如果我将数据从本地系统复制到HDFS,我可以确定它是在节点间均匀分布的吗?
PS HDFS保证每个块将存储在3个不同的节点上。但这是否意味着我的文件的所有块将在相同的3个节点上排序?或者HDFS会为每个新块随机选择它们吗?
答案 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按块分发数据,因此每个块都将单独分发。