我在 40 台机器的集群中使用 Hadoop hadoop-2.0.0-mr1-cdh4.1.2。 每台机器有 12 个磁盘供 hadoop 使用。 一台机器上的一些磁盘不平衡,我决定按照这篇文章中提到的手动重新平衡:rebalance individual datanode in hadoop 我停止了该服务器上的 DataNode,移动了 block 文件对,在一些磁盘之间移动了整个子目录。
我一停止 DataNode,NameNode 就通过在 UI 中显示以下消息来提示缺少 block : 警告:缺少 2002 个 block 。请检查日志或运行 fsck 以确定丢失的 block 。
然后,我尝试重启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 警告 org.apache.hadoop.hdfs.server.datanode.DataNode:offerService 中的 IOException java.io.IOException: block 池 BP-208475052-10.165.18.36-1351280731538 未找到
2013-12-20 01:40:29,088 错误 org.apache.hadoop.hdfs.server.datanode.DataNode: block 池 BP-208475052-10.165.18.36-1351280731538(存储 ID DS-737580588- 的 BPOfferService 中的异常10.165.18.36-50010-1351280778276) 服务到 aspen8hdp19.turner.com/10.165.18.56:54310 java.lang.NullPointerException
2013-12-20 01:40:34,088 警告 org.apache.hadoop.hdfs.server.datanode.DataNode:offerService 中的 IOException java.io.IOException: block 池 BP-208475052-10.165.18.36-1351280731538 未找到
所以,我有一些问题:
- 遵循我提到的方法还不够吗? IE。停止 DataNode,移动 block 文件对和/或子目录,重新启动 DataNode。
- 我需要重启 NameNode 或其他服务吗?
- 为什么它会提示丢失 block 或损坏文件?
- 如何重新启动 DataNode 并消除这些异常,从而使 DN 与 NN 成功通信?
感谢您的帮助。 爱德华多。
最佳答案
我要在这里回答我自己的问题。
我遇到的问题是由于移动数据 block 后文件/目录权限和所有权错误造成的。我以 root 身份进行了移动,移动的文件最终获得了以下权限:
drwx-----T 2 root root 12288 Dec 19 23:14 subdir28
一旦我将它改回原来的状态,DN 就会正常重新启动,NN 会停止报告丢失的 block 或损坏的文件。这是它应该拥有的权限:
drwxr-xr-t 2 hdfs hadoop 12288 Dec 20 11:47 subdir28
关于hadoop - 手动重新平衡 hadoop hdfs 磁盘后,DataNode 不会重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20698101/