群集之间/内部的Distcp是Map-Reduce作业。我的假设是,它在输入分割级别上复制文件,有助于复制性能,因为文件将被多个映射器并行处理多个“片段”。 但是,当我浏览Hadoop Distcp的文档时,似乎Distcp只能在文件级别上运行。 请参考这里:hadoop.apache.org/docs/current/hadoop-distcp/DistCp.html
根据distcp doc,distcp只会拆分文件列表而不是文件本身,并将列表分区分配给映射器。
有人能告诉我这究竟是如何运作的吗?
答案 0 :(得分:2)
对于~50G
大小的单个文件,将触发1个地图任务来复制数据,因为文件是Distcp
中最精细的粒度级别。
为什么在指定更多地图时DistCp的运行速度不快?
目前 目前,DistCp的最小工作单元是一个文件。即一个文件 仅由一张地图处理。将地图数量增加到一个值 超过文件数将不会产生任何性能优势。该 启动的地图数量等于文件数量。
<强>更新强>
在mapreduce期间,从namenode获取文件的块位置。在Distcp上,如果可能,将在文件的第一个块所在的节点上启动每个Mapper。如果文件由多个拆分组成,如果在同一节点上不可用,它们将从邻域中获取。