我在40台机器的集群中使用Hadoop hadoop-2.0.0-mr1-cdh4.1.2.每台机器有12个由hadoop使用的磁盘.一台机器中的某些磁盘是不平衡的,我决定手动重新平衡,如本文所述:在hadoop中重新平衡单个datanode 我停止了该服务器上的DataNode,移动了块文件对,在一些磁盘之间移动了整个子目录.
一旦我停止了DataNode,NameNode就会通过在UI中显示以下消息来抱怨缺少块:警告:有2002个丢失的块.请检查日志或运行fsck以识别丢失的块.
然后,我尝试重新启动DataNode.它拒绝成功启动,它会记录错误和警告,如下所示:
java.io.IOException:目录无效目录或I/O错误:/data/disk3/dfs/data/current/BP-208475052-10.165.18.36-1351280731538/current/finalized/subdir61/subdir28
2013-12-20 01:40:29,046 WARN org.apache.hadoop.hdfs.server.datanode.DataNode:offerService中的IOException java.io.IOException:找不到块池BP-208475052-10.165.18.36-1351280731538
2013-12-20 01:40:29,088错误org.apache.hadoop.hdfs.server.datanode.DataNode:块池的BPOfferService中的异常BP-208475052-10.165.18.36-1351280731538(存储ID DS-737580588-10.165.18.36 -50010-1351280778276)服务于aspen8hdp19.turner.com/10.165.18.56:54310 java.lang.NullPointerException
2013-12-20 01:40:34,088 WARN org.apache.hadoop.hdfs.server.datanode.DataNode:offerService中的IOException java.io.IOException:找不到块池BP-208475052-10.165.18.36-1351280731538
所以,我有一些问题:
我感谢您的帮助.爱德华多.
我将在这里回答我自己的问题。
我遇到的问题是由于移动数据块后文件/目录权限和所有权错误造成的。我以 root 身份进行了移动,移动的文件最终获得了以下权限:
drwx-----T 2 根根 12288 十二月 19 23:14 subdir28
当我将其改回原始状态后,DN 会正确重新启动,并且 NN 会停止报告丢失的块或损坏的文件。这是它应该具有的权限:
drwxr-xr-t 2 hdfs hadoop 12288 12 月 20 日 11:47 subdir28