对这一节文件查看和下一节文件写入出问题的解决方案(云服务器开发)。

来源:3-19 HDFS API编程之查看HDFS文件内容

蜥蜴

2020-03-27

对这一节使用网络云主机的同学,常常出现文件读取不成功,还有下一节的写入不成功的情况。我把解决解决方法进行总结(以下几步都需要):

  1. 把云主机上的/etc/hosts文件里面的内容加入我们想要的主机的名称(但一定不要_),并且地址要是自己的云主机的内网地址。
  2. 退出云主机,再次登陆,如果还没显示自己的刚才配置的云主机的名称,那就通过hostname + 你想要的云主机的名称强制更改云主机的名称。
  3. 重启dfs,看自己的文件的Availability是我们刚才配置的主机名称。
  4. 把自己的电脑的hosts加入自己的云主机的名称,并且配置云主机的外网地址。
  5. 最后在我们的代码中的configuartion构建的下面,加入这句代码configuration.set("dfs.client.use.datanode.hostname", "true");

这一套打完之后运行就没问题了。如果名称带有_会报错Does not contain a valid host;port authority的错误。

写回答

8回答

WineOrShe

2020-05-24

我是这么解决的,整个人都舒畅了:
1、楼主说的第5点,最后在我们的代码中的configuartion构建的下面,加入这句代码configuration.set("dfs.client.use.datanode.hostname", "true");

2、在云主机安全组配置规则里添加50010端口,这个端口是DataNode 用于数据传输服务端口 默认是 50010

3
0

weixin_慕妹114626

2020-05-04

感谢!再补充一下,还需要在云主机安全组配置规则里添加50010端口,这个端口是DataNode 用于数据传输服务端口 默认是 50010

3
0

慕标2366677

2020-04-10

 windows 用户在这修改host文件

C:\Windows\System32\drivers\etc\hosts

1
0

weixin_慕瓜0383873

2020-04-09

感谢蜥蜴同学的回答,成功解决问题。

补充一句,第五步里面的configuration.set("dfs.client.use.datanode.hostname", "true");中的hostname就是hostname,不是修改后的主机名。

我修改成了主机名字然后折腾了半天,给我整吐了。

1
0

Michael_PK

2020-03-27

总结的很到位

1
0

dh1211

2020-07-22

感谢分享,我也来补充一点,hadoop3.x版本,云主机要开放9866(Hadoop2.x 是50010),是看的回答区的小伙伴加端口对照

0
0

慕九州8702158

2020-07-21

第一步的云主机名称是hadoop000吗

0
1
Michael_PK
看你上一楼的,就是答案
2020-07-21
共1条回复

user_hk

2020-05-12

按照大佬的步骤完成配置,又报了异常。有同学遇到过吗?麻烦解答下,谢谢~

java.io.IOException: DataStreamer Exception: 

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:696)
Caused by: java.nio.channels.UnresolvedAddressException
at sun.nio.ch.Net.checkAddress(Net.java:101)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:192)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:530)
at org.apache.hadoop.hdfs.DFSOutputStream.createSocketForPipeline(DFSOutputStream.java:1610)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1408)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1361)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:588)


0
1
user_hk
测试把默认端口8020改成其他就正常了(注意防火墙开放该端口)
2020-05-12
共1条回复

Hadoop 系统入门+核心精讲

从Hadoop核心技术入手,掌握数据处理中ETL应用,轻松进军大数据

2408 学习 · 908 问题

查看课程