【发布时间】:2014-08-02 17:00:31
【问题描述】:
Pig documentation 表示如果满足某些条件(这些条件在 doc 中有描述),Pig 可以做 map side GROUP。有人可以解释这个算法吗?我想深入了解 MapReduce 可以做什么。
【问题讨论】:
标签: java algorithm hadoop mapreduce apache-pig
Pig documentation 表示如果满足某些条件(这些条件在 doc 中有描述),Pig 可以做 map side GROUP。有人可以解释这个算法吗?我想深入了解 MapReduce 可以做什么。
【问题讨论】:
标签: java algorithm hadoop mapreduce apache-pig
例如,想象下面的文件:
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 将在两个具有相同键的分区文件中运行。
【讨论】:
您可以阅读该算法的源代码。一个简单的答案是两者都实现了合并算法(即数据必须预先按组键排序,以便(a)不需要排序和(b)通过迭代数据,您可以找到组键更改的位置。
【讨论】: