我怎样才能确保数据在hadoop节点上均匀分布?

时间:2011-02-21 11:29:34

标签: hadoop hdfs

如果我将数据从本地系统复制到HDFS,我可以确定它是在节点间均匀分布的吗?

PS HDFS保证每个块将存储在3个不同的节点上。但这是否意味着我的文件的所有块将在相同的3个节点上排序?或者HDFS会为每个新块随机选择它们吗?

4 个答案:

答案 0 :(得分:9)

如果您的复制设置为3,它将被放在3个单独的节点上。放置的节点数由复制因子控制。如果您想要更好的分发,则可以通过编辑$HADOOP_HOME/conf/hadoop-site.xml并更改dfs.replication值来增加复制数。

我相信新的块几乎是随机放置的。在不同机架上分配时需要考虑一些因素(当hadoop意识到机架时)。有一个示例(找不到链接),如果您在3个和2个机架上进行复制,则2个块将位于一个机架中,第三个块将放置在另一个机架中。我猜想没有显示哪个节点获取机架中的块的偏好。

我没有看到任何指示或声明在同一节点上存储同一文件块的首选项。

如果您正在寻找各种方法来强制跨节点平衡数据(复制无论什么值),一个简单的选项是$HADOOP_HOME/bin/start-balancer.sh,它将运行一个平衡过程来自动在集群中移动块。 您可以在Hadoop FAQs

找到此功能和其他一些平衡选项

希望有所帮助。

答案 1 :(得分:3)

您可以在您的namenode的端口50070上打开HDFS Web UI。它将显示有关数据节点的信息。你会看到一件事 - 每个节点使用空间。
如果您没有UI - 您可以查看数据节点的HDFS目录中使用的空间。
如果您有数据倾斜,您可以运行rebalancer,它将逐步解决它。

答案 2 :(得分:2)

现在使用Hadoop-385补丁,我们可以选择块放置策略,以便将文件的所有块放在同一节点中(对于复制节点也是如此)。请阅读此blog关于此主题的内容 - 请查看评论部分。

答案 3 :(得分:0)

是的,Hadoop按块分发数据,因此每个块都将单独分发。