使用云上的虚拟环境搭建好的测试集群,在本地IDEA做调试,但是发现本地IDEA无法连接测试环境
导入一些数据,本地HDFS的JavaAPI访问云服务器上的Hadoop服务时,终端展现IP地址的形式:
outUrl hdfs://公网ip地址:9000/root/output1/
这里的ip,是云服务器的网关ip,所以在访问的时候,出现了下面的异常:
2021-12-28 20:55:56,811 WARN [org.apache.hadoop.hdfs.BlockReaderFactory] - I/O error constructing remote block reader. java.net.ConnectException: Connection timed out: no further information详纠报错
报错核心
2021-12-28 20:56:58,268 WARN [org.apache.hadoop.hdfs.DFSClient] - Failed to connect to /内网ip地址:50010 for block, add to deadNodes and continue. java.net.ConnectException: Connection timed out: no further information
此处的ip地址,使用的是云服务的内网ip,用人话口吻解释:我们本地执行程序时访问hdfs上的DataNode时用的是内网IP。
这也就导致了报错,本地服务是无法访问云服务器的内网IP、而只能访问外网IP。
通过日志可以看出,是本地中无法连接到远程服务器,查看网络服务可以发现通信时访问的是内部网络,也就是NameNode与DataNonde的通信是采用内网进行通信的,我们在本地调试的时候需要指定网络为外部网络
2. 解决问题这里可以通过编辑器自带的打断点(Debug)功能去逐一排查问题,在此不做演示
翻阅各类帖子,提炼出两种我个人觉得实用性较高的解决方法汇总如下
2.1 HostName访问简明扼要:使用HostName实现本地访问云服务的内网
过程:
- 云服务器的Hadoop配置hostname访问
- 云服务器配置,内网于HostName的映射
- 云服务器的Hadoop配置文件都用HostName
- 本地修改hosts文件,云服务器外网ip和HostName的映射
本地目录添加或者服务器添加均可
这里的话配置涉及到优先级问题:本地优先级>服务器
在IDEA中resource的hdfs-site.xml 配置,即使用hostname连接datanode
2.1.2 配置云服务映射only cofig in clients dfs.client.use.datanode.hostname true
vim /etc/hosts # 添加内网IP和新增的hostname的映射 内网IP地址 testname2.1.3 core-site.xml添加
2.1.4 修改本地hosts文件fs.defaultFS hdfs://testname:9000
本地hosts文件目录:C:WindowsSystem32driversetchosts
在hosts文件中添加:
公网ip地址 hadooptest
也是云服务器外网IP
2.2 指定NN与DN通信在程序中指定NN和DN之间的通信为外网,此方式仅适用于API *** 作HDFS
import org.apache.hadoop.conf.Configuration; // 使用hdfs的fs功能,客户端访问core-site.xml配置文件 Configuration conf = new Configuration(); // 设置客户端访问datanode使用hostname来进行访问 conf.set("dfs.client.use.datanode.hostname", "true"); // 设置core-site.xml中的属性fs.defaultFS和属性值,注意主机名必须和设置的hosts主机名一致 conf.set("fs.defaultFS","hdfs://testname:9000");
由于本地测试网关和服务器不在同一局域网,安装的hadoop配置文件是以内网ip作为机器间通信的ip。
在这种情况下,我们能够访问到的namenode机器,此时,namenode会给数据所在机器的ip地址提供我们访问数据传输服务,但是返回的的是datanode内网的ip,我们无法根据该IP访问datanode服务器。
所以,我们需让namenode返回给我们datanode的域名,在开发机器的hosts文件中配置datanode对应的外网ip和域名,并且在与hdfs交互的程序中添加如上代码即可
写完本篇内容的时间略微有点晚了,状态有点差,先就此结束,后续会再汇总一篇问题引申解决,在此插个眼
了解更多知识请戳下:
@Author:懒羊羊
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)