我在40台计算机的集群中使用Hadoop hadoop-2.0.0-mr1-cdh4.1.2。
每台机器都有12个hadoop使用的磁盘。
一台机器上的某些磁盘不平衡,因此我决定按照本文中所述手动重新平衡:rebalance individual datanode in hadoop
我在该服务器上停止了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警告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:块池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警告org.apache.hadoop.hdfs.server.datanode.DataNode:offerService中的IOException
java.io.IOException:找不到块池BP-208475052-10.165.18.36-1351280731538

所以,我有一些问题:

  • 遵循我提到的方法还不够吗? IE。停止DataNode,移动块文件对和/或子目录,然后重新启动DataNode。
  • 我需要重新启动NameNode或其他服务吗?
  • 为什么会提示缺少块或损坏的文件?
  • 如何重新启动DataNode并摆脱那些异常,从而使DN与NN成功通信?

  • 我感谢您的帮助。
    爱德华多

    最佳答案

    我将在这里回答我自己的问题。

    我遇到的问题是由于在移动数据块后具有错误的文件/目录权限和所有权引起的。我以root用户身份进行了移动,并且移动的文件最终具有以下权限:

    drwx ----- T 2根根12288 Dec 19 23:14 subdir28

    一旦将其更改回原始位置,DN就会重新正确启动,NN会停止报告丢失的块或损坏的文件。这是它应具有的权限:

    drwxr-xr-t 2 hdfs hadoop 12288 Dec 20 11:47 subdir28

    关于hadoop - 手动重新平衡hadoop hdfs磁盘后,DataNode将无法重新启动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20698101/

    10-16 01:23