问题描述:
在我想要查询内部名称节点和数据节点的私网ip时,使用hadoop dfsadmin -report命令只出现下面图中所示内容。
并且在后续使用Java api进行文件上传,文件下载出现下面的报错:
File /xiyou/huangguoshan/sunwukong.txt could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node(s) are excluded in this operation.
这表明在写入文件xxx.txt文件
时,没有足够的数据节点可用。
问题原因:
namenode和datanode启动id不一致,这是因为不止一次的进行Hadoop系统格式化操作。即多次使用命令hdfs namenode -format
解决办法:
(1)在启动主节点namenode那台机器上找到你安装hadoop的文件目录,我的是hadoop102.
(2)在这些目录下找data/dfs/name/current目录,最主要的是要找到current目录,有些的目录结构可能有些许不相同,需要自己慢慢去寻找,大致目录结构都是会有/dfs/name/current。只要找到current目录再对比下面有没有VERSION文件即可。
(3)进入VERSION文件中,记录clusterID的值,再按照同样的步骤找到另外两台hadoop的 VERSION文件,将三台Hadoop的clusterID设置成一样的值,并保存好。
(4)在主节点hadoop102的机器上使用stop-all.sh以及start-all.sh重新启动hadoop集群。
(5)再次使用hadoop dfsadmin -report命令,即出现Live datanodes。
问题总结:
不要总是使用hdfs namenode -format,后续还会出现别的问题。刚开始的时候,我忘记怎么开启集群和关闭集群了,然后,每次开启集群就会使用这个命令,这个currentId我不止修改了一次。
我是先出现文件上上传的问题,然后通过解决hadoop dfsadmin -report命令的问题后,发现文件上传相关的问题也解决了,算是误打误撞吧。如果文件上传相关的问题还没解决可以去看另一个博主的博客。他好像和我的解决办法不同。
希望能够帮助到你!