2

集群之间/集群内的 Distcp 是 Map-Reduce 作业。我的假设是,它在输入拆分级别复制文件,有助于提高复制性能,因为一个文件将由多个并行处理多个“片段”的映射器复制。但是,当我浏览 Hadoop Distcp 的文档时,似乎 Distcp 只能在文件级别上工作。请参考这里:hadoop.apache.org/docs/current/hadoop-distcp/DistCp.html

根据 distcp doc,distcp 只会拆分文件列表,而不是文件本身,并将列表的分区提供给映射器。

谁能告诉这究竟是如何工作的?

  • 附加问题:如果一个文件只分配给一个映射器,映射器如何在它运行的一个节点上找到所有输入拆分?
4

1 回答 1

2

对于单个~50G大小的文件,将触发 1 个映射任务来复制数据,因为文件是Distcp.

引用文档

为什么指定更多地图时 DistCp 运行速度不快?

目前,DistCp 的最小工作单元是文件。即,一个文件仅由一个映射处理。将映射数量增加到超过文件数量的值不会产生任何性能优势。启动的地图数量将等于文件数量。

UPDATE
文件的块位置是在 mapreduce 期间从 namenode 获得的。在 Distcp 上,如果可能,每个 Mapper 将在文件第一个块所在的节点上启动。在文件由多个拆分组成的情况下,如果同一节点上不可用,则将从邻居中获取它们。

于 2017-02-20T18:31:16.573 回答