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写进许多配置文件中,后续维护麻烦,还可能导致其他软件运行不正常。

posted @ 2021-01-14 19:04  风和雨滴  阅读(674)  评论(0编辑  收藏  举报