将新卷添加到伪分布式Hadoop节点会以静默方式失败

时间:2011-02-24 16:35:32

标签: amazon-ec2 hadoop hive

我试图通过在dfs.name.dir中的hdfs-site.xml中添加卷的位置来向Hadoop伪分布式节点添加新卷,我可以在此位置看到锁定文件 - 但是尝试尽我所能,似乎当我加载文件(使用配置单元)这些位置很难使用(即使锁文件和一些子文件夹出现..所以Hadoop显然可以访问它们)。当主卷接近空间不足时,我得到以下异常:

Failed with exception java.io.IOException: File /tmp/hive-ubuntu/hive_2011-02-24_15-39-15_997_1889807000233475717/-ext-10000/test.csv could only be replicated to 0 nodes, instead of 1
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1417)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:643)

有关如何向Hadoop添加新卷的任何指示? FWIW我正在使用EC2。

2 个答案:

答案 0 :(得分:1)

向数据节点添加新磁盘/容量时,Hadoop无法保证磁盘的负载均衡(例如:它不会在具有更多可用空间的驱动器上放置更多块)。我解决这个问题的最好方法是增加复制因子(例如:从2到3)。

hadoop fs -setrep 3 -R /<path>

在名称节点上观察“未复制的块”报告。一旦达到0,减少复制因子(例如:从3到2)。这将从系统中随机删除应该平衡本地节点的副本。

hadoop fs -setrep 2 -R /<path>

它不会100%平衡,但它应该比以前好多了。这在Hadoop wiki中有所涉及。如果您正在运行伪分布式,并且没有其他数据节点,那么平衡器脚本将无法帮助您。

http://wiki.apache.org/hadoop/FAQ#If_I_add_new_DataNodes_to_the_cluster_will_HDFS_move_the_blocks_to_the_newly_added_nodes_in_order_to_balance_disk_space_utilization_between_the_nodes.3F

答案 1 :(得分:1)

根据FAQ

,您可以做一些事情
  1. 将HDFS中的文件手动复制到新名称,删除旧文件,然后将新文件重命名为原来的文件。
  2. 临时增加复制因子,一旦块在节点之间平衡,就将其设置回来。
  3. 删除整个节点,等待其块复制到其他节点,然后重新启动它。这并没有多大帮助,因为当您将其重新联机时,您的完整节点仍然已满。
  4. 在头节点上运行rebalancer脚本。
  5. 我首先尝试运行#4,然后运行#2。