有时,数据块以不平衡的方式跨数据节点存储。基于 HDFS 块放置策略,第一个副本倾向于存储在写入节点(即客户端节点)上,然后第二个副本存储在远程机架上,第三个副本存储在本地机架上。在这种放置策略下,哪些用例会导致数据块在数据节点之间不平衡?一个可能的原因是,如果写入节点很少,那么数据块的一个副本将存储在这些节点上。还有其他原因吗?

最佳答案

以下是数据倾斜的一些潜在原因:

  • 如果某些 DataNode 在一段时间内不可用(不接受请求/写入),则集群最终可能会不平衡。
  • TaskTracker 没有在集群节点上均匀地与 DataNode 并置。如果我们在这种情况下通过 MapReduce 写入数据,集群可能会不平衡,因为同时托管 TaskTracker 和 DataNode 的节点将是首选。
  • 同上,但使用HBase的RegionServers。
  • 大量删除数据会导致集群不平衡,具体取决于删除块的位置。
  • 添加新的 DataNode 不会自动重新平衡集群中的现有块。

  • “hdfs balancer”命令允许管理员重新平衡集群。此外,https://issues.apache.org/jira/browse/HDFS-1804 添加了一个新的块存储策略,该策略将卷上剩余的可用空间考虑在内。

    关于hadoop - HDFS上存储的文件不平衡的可能原因是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27475286/

    10-12 23:00