spark设置检查点 使用ip访问hdfs 被拒绝连接
在设置检查点的时候一开始的写法是这样的:
spark.sparkContext.setCheckpointDir('/checkPoint')
提示路径明显为本地路径,请改为hdfs路径,于是显式的写成:
spark.sparkContext.setCheckpointDir('hdfs://192.168.16.128:9000/checkPoint')
报错:connection refused。改为:
spark.sparkContext.setCheckpointDir('hdfs://localhost:9000/checkPoint')
成功在hdfs中创建checkPoint文件夹。
原因:
使用netstat -lntp命令可以看到如下端口信息:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3547/java
127.0.0.1表示只允许本机访问。通过外网地址是访问不到9000端口的。
而在hadoop的core-site.xml中配置的hdfs路径为:
<property>
<name>fs.default.name</name> <value>hdfs://localhost:9000</value>
</property>
解决方法:
将hadoop配置文件中的core-site.xml中的fs.defaultFS(和fs.default.name是同一个东西)的value改为hadoop-master,再去linux的/etc/hosts配置hadoop-master 和0.0.0.0的映射。重启hadoop。
再次使用netstat -nltp查看端口情况:
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 85205/java
此时hdfs便既可以通过内网地址又能通过外网地址访问了。
其实还有其他的解决办法,但有些要重新格式化namenode有些直接将固定ip写进许多配置文件中,后续维护麻烦,还可能导致其他软件运行不正常。