Spark读取主机HDFS报错解决

本文详细记录了解决SparkSQL在本地读取远程HDFS文件时遇到的报错问题。通过排查确认问题在于内外网通信,特别是本地与DataNode的连接。通过在hdfs-site.xml配置中启用dfs.datanode.use.datanode.hostname属性,让DataNode使用域名通信,从而解决了由于内网IP导致的访问问题。这种方式简化了IP更换过程,但也需要确保DNS的可靠性。
摘要由CSDN通过智能技术生成

在本地机器使用SparkSQL读取hdfs上的文件并转换为DF的过程中出现报错

排除信息:
1.本地 Shell 可以正常操作,排除集群搭建和进程没有启动的问题

2.云主机没有设置防火墙,排除防火墙没关的问题

3.云服务器防火墙开放了 DataNode 用于数据传输服务端口 默认是 50010

4.我在本地搭建了另一台虚拟机,该虚拟机和本地在同一局域网,本地可以正常操作该虚拟机的hdfs,基本确定了是由于内外网的原因。

5.查阅资料发现 HDFS 中的文件夹和文件名都是存放在 NameNode 上,操作不需要和 DataNode 通信,因此可以正常创建文件夹和创建文件说明本地和远程 NameNode 通信没有问题。那么很可能是本地和远程 DataNode 通信有问题

由于本地测试和云主机不在一个局域网,hadoop配置文件是以内网ip作为机器间通信的ip。在这种情况下,我们能够访问到namenode机器,namenode会给我们数据所在机器的ip地址供我们访问数据传输服务,但是当写数据的时候,NameNode 和DataNode 是通过内网通信的,返回的是datanode内网的ip,我们无法根据该IP访问datanode服务器。
我们来看一下其中一部分报错信息:

 Failed to connect to /192.168.2.101:50010 for block, add to deadNodes and continue....

从报错信息中可以看出,连接不到192.168.2.101:50010,也就是datanode的地址,因为外网必须能访问到datanode。
为了能够让开发机器访问到hdfs,我们可以通过域名访问hdfs,让namenode返回给我们dat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值