【问题标题】:What is the algorithm behind GROUP USING 'collected' and 'merge'GROUP USING 'collected' 和 'merge' 背后的算法是什么
【发布时间】:2014-08-02 17:00:31
【问题描述】:

Pig documentation 表示如果满足某些条件(这些条件在 doc 中有描述),Pig 可以做 map side GROUP。有人可以解释这个算法吗?我想深入了解 MapReduce 可以做什么。

【问题讨论】:

    标签: java algorithm hadoop mapreduce apache-pig


    【解决方案1】:

    例如,想象下面的文件:

    10 - 1
    14 - 2
    10 - 3
    12 - 4
    12 - 5
    20 - 6
    21 - 7
    17 - 8
    12 - 9
    17 - 10
    

    然后,负载将存储您的文件,如下所示(假设您的集群有 3 个节点 - 如果您使用 Identity Map-Reduce 作业,那么将减少数设置为 3 可以获得相同的结果。如果您的文件是歪斜的,您可能会遇到一些性能问题)。 用于此的加载器必须保证它不会将键的单个值拆分为多个拆分。 (http://wiki.apache.org/pig/MapSideCogroup)

    part-r-00000  part-r-00001   part-r-00002
    10 - 1        14 - 2         20 - 6
    10 - 3        17 - 8         21 - 7
    12 - 4        17 - 10
    12 - 9
    

    现在,hadoop 框架将为每个生成的分区生成一个映射任务。在这种情况下,我有 3 个地图任务。 所以想象一下你要对第二个字段求和,这个过程可以在地图端运行。

    part-m-00000
    10 - 17
    12 - 13
    
    part-m-00001
    14 - 2
    17 - 18
    
    part-m-00002
    20 - 13
    

    在 COGROUP 的情况下,我想这会以类似的方式执行。每个 map-task 将在两个具有相同键的分区文件中运行。

    【讨论】:

      【解决方案2】:

      您可以阅读该算法的源代码。一个简单的答案是两者都实现了合并算法(即数据必须预先按组键排序,以便(a)不需要排序和(b)通过迭代数据,您可以找到组键更改的位置。

      【讨论】:

        猜你喜欢
        • 2012-06-28
        • 2010-09-15
        • 1970-01-01
        • 2020-09-22
        • 2012-10-02
        • 1970-01-01
        • 2020-10-09
        • 2011-11-04
        相关资源
        最近更新 更多