Hadoop Distcp是否在块级复制?

时间:2017-02-20 18:16:48

标签: hadoop hdfs cluster-computing distcp

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

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

有人能告诉我这究竟是如何运作的吗?

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

1 个答案:

答案 0 :(得分:2)

对于~50G大小的单个文件,将触发1个地图任务来复制数据,因为文件是Distcp中最精细的粒度级别。

引用documentation

  

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

     

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

<强>更新
在mapreduce期间,从namenode获取文件的块位置。在Distcp上,如果可能,将在文件的第一个块所在的节点上启动每个Mapper。如果文件由多个拆分组成,如果在同一节点上不可用,它们将从邻域中获取。