distcp 导致 HDFS 偏斜

distcp causing skewness in HDFS

我在 HDFS 中有一个文件夹(大小约为 2 TB),它是使用 Apache Spark 的 save 方法创建的。它几乎均匀分布在节点之间(我使用 hdfs fsck 检查了这一点)。

当我尝试 distcp 这个文件夹(集群内)和 运行 hdfs fsck 目标文件夹时,它被证明是高度倾斜的,也就是说,很少节点有很多块,而很少有节点上存储的块非常少。 HDFS 上的这种偏斜导致性能问题。

我们尝试使用 mv 将数据从源移动到目标(集群内),这次目标的偏度很好,也就是说,数据分布均匀。

使用distcp时有什么方法可以减少HDFS的偏度吗?

distcp 中的映射器数量等于负载过重的节点数量。

所以我使用 -m 选项将 distcp 中的映射器数量增加到集群中存在的机器数量,并且输出的偏差要小得多。

一个额外的好处:distcp 工作完成的速度比以前快得多。