【问题标题】:How map reduce framework can determine to run reduce before map is completely done?map reduce 框架如何确定在 map 完全完成之前运行 reduce?
【发布时间】:2012-05-24 07:08:25
【问题描述】:

我注意到通常当hadoop集群不忙时,在map端完全完成之前,reduce端开始进行?这怎么可能?我记得在某处读过减少进度指示器的内容有些误导,但记不清了。有人可以解释一下吗?

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    33 1/3% 的任何 reduce 任务进度指示器正在复制地图输出。 (另外 33 个 1/3% 正在对它们进行排序,最后 33 个 1/3% 构成实际调用reduce()方法。)映射器一直在完成,并且您配置的尽可能多的reduce任务一旦准备好就会拉出这些输出,所以最多2/ 3 的第一轮reduce 阶段将在任何reduce() 调用发生之前完成。

    【讨论】:

    • 感谢您的信息。我也对此感到困惑。顺便说一句,有人可以推荐有关此的文档吗?我一直在寻找运气不佳。
    【解决方案2】:

    除了已经给出的答案之外,此行为由 mapred 属性 mapred.reduce.slowstart.completed.maps 控制,它表示在复制阶段开始之前必须完成的映射任务的百分比 (0-1)。

    【讨论】:

      【解决方案3】:

      这是因为 reducer 必须将 map 输出复制到 reduce 任务运行的节点。如果一个 map 任务已经完成并提交了它的输出,你可以直接将它传输并合并到 reducer 中已经可用的数据中。

      所以这将为您节省大量时间,而不是等待所有映射器完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        相关资源
        最近更新 更多