1、遇到问题
今天使用自己的电脑,使用外网操作阿里云服务器上的HDFS。
报错 org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block
2、百度结果
参考 https://blog.csdn.net/xiaozhaoshigedasb/article/details/88999595
- 防火墙记得关掉;
- 查看DataNode是否启动;
- 有些数据块是损坏了,可以命令查看
- 阿里云防火墙已经关闭了
- 使用 jps 查看本地本地 datanode 启动没问题
- 使用 hadoop fsck /weblog/log.00 返回信息 healthy
3、继续查
参考 https://blog.csdn.net/vaf714/article/details/82996860
NameNode 和DataNode 是通过内网通信的,NameNode 会返回给我 DataNode 的内网 IP,我本地就访问不了了
- 报错信息中果然包含 阿里云服务器的内网地址( datanode 只有一个 )
- 参考博主的解决办法 在本地配置 主机名与 公网ip 的映射
- 由于我用的是windows系统, 在下边记录一下 windows 配置主机名与ip映射方法
4、windows 配置主机名与ip映射方法
参考 https://blog.csdn.net/zhangge360/article/details/53384108/
- C:/windows/system32/drivers/etc找到hosts 编辑 --参考博主
- 我本地是win10 ,目录类似有一点点区别 C:\Windows\System32\drivers\etc
- 编辑hosts 添加 123.56.45.* hadoop (这里主机名要与云服务器上datanode 内网ip设置的主机名一致,ip设置为公网ip)
- 再测试代码。 通过。
总结帖:仅把自己遇到的问题分享出来。都是借鉴其他大神的博客。希望能帮助到其他人。