【问题标题】:Does Hadoop Distcp copy at block level?Hadoop Distcp 是否在块级别复制?
【发布时间】:2017-07-10 03:38:35
【问题描述】:

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

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

谁能说出这到底是如何工作的?

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

【问题讨论】:

    标签: hadoop hdfs cluster-computing distcp


    【解决方案1】:

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

    引用documentation:

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

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

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

    【讨论】:

    • 谢谢!您是说单个文件的拆分将由多个映射器并行复制吗?但是根据 distcp doc,distcp 只会拆分文件列表,而不是文件本身,并将列表的分区提供给映射器。我真的不明白这部分。请参考:hadoop.apache.org/docs/current/hadoop-distcp/DistCp.html
    • @TianqiTong,你是对的,到目前为止,我还误以为 Distcp 使用典型的 mapreduce 过程。我已经更正了我的答案。
    • 感谢指正!我已经更新了我的问题,所以其他人会开始喜欢它(希望如此)。但我不明白的另一件事是,该映射器如何在单个节点上找到单个文件的所有部分。 (我已经把它放在描述中了)
    • 没有必要也极不可能在单个节点中找到所有块,mapper 会在必要时从其他节点获取块。文件的块位置是从名称节点获得的。映射器将在文件的第一个块所在的节点上启动,其余块如果在同一节点中可用,将被使用,否则将从附近获取。
    • 那么这是否意味着在只有一个文件的情况下 distcp 不会比 cp 提供任何性能改进?
    猜你喜欢
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 2019-12-22
    • 2015-08-26
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多