1

dfs.name.dir我试图通过在in 中添加卷的位置来向 Hadoop 伪分布式节点添加一个新卷hdfs-site.xml,并且我可以在该位置看到锁定文件 - 但尽我所能,似乎当我加载文件时(使用 hive)这些位置几乎没有使用(即使出现了锁定文件和一些子文件夹......所以 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。

4

2 回答 2

1

根据常见问题解答,您可以做一些事情:

  1. 手动将 HDFS 中的文件复制为新名称,删除旧文件,然后将新文件重命名为原来的名称。
  2. 暂时增加复制因子,一旦块在节点之间平衡后将其设置回来。
  3. 删除完整节点,等待其块复制到其他节点,然后将其恢复。这并没有真正的帮助,因为当您将其重新联机时,您的完整节点仍然是满的。
  4. 在头节点上运行重新平衡器脚本。

我会先尝试运行#4,然后是#2。

于 2011-02-24T17:43:17.150 回答
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

于 2011-02-24T17:36:42.133 回答