如果我将数据从本地系统复制到 HDFS,我可以确定它在节点之间均匀分布吗?
PS HDFS 保证每个块将存储在 3 个不同的节点上。但这是否意味着我的所有文件块都将在相同的 3 个节点上排序?还是 HDFS 会为每个新块随机选择它们?
如果您的复制设置为 3,它将被放置在 3 个单独的节点上。它放置的节点数量由您的复制因子控制。如果您想要更大的分布,那么您可以通过编辑$HADOOP_HOME/conf/hadoop-site.xml
和更改dfs.replication
值来增加复制数。
我相信新块几乎是随机放置的。对于跨不同机架的分布有一些考虑(当 hadoop 知道机架时)。有一个示例(找不到链接),如果您在 3 个和 2 个机架上进行复制,则 2 个块将在一个机架中,第三个块将放置在另一个机架中。我猜想对于哪个节点获取机架中的块没有显示偏好。
我还没有看到任何表明或说明将同一文件的块存储在同一节点上的偏好。
如果您正在寻找跨节点强制平衡数据的方法(以任何值复制),一个简单的选项是$HADOOP_HOME/bin/start-balancer.sh
运行平衡过程以自动在集群中移动块。这个和其他一些平衡选项可以在Hadoop FAQs中找到
希望有帮助。
您可以在 Namenode 的 50070 端口上打开 HDFS Web UI。它将向您显示有关数据节点的信息。您会在那里看到一件事 - 每个节点的已用空间。
如果您没有 UI - 您可以查看数据节点的 HDFS 目录中使用的空间。
如果您有数据倾斜,您可以运行重新平衡器,它会逐渐解决它。
现在有了Hadoop-385补丁,我们可以选择块放置策略,以便将文件的所有块放置在同一个节点中(对于复制节点也是如此)。阅读有关此主题的博客- 查看评论部分。
是的,Hadoop 按块分配数据,因此每个块将单独分布。