java - GROUP USING 'collected' 和 'merge' 背后的算法是什么

标签 java algorithm hadoop mapreduce apache-pig

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

最佳答案

例如,想象下面的文件:

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

然后,负载将存储您的文件,就像这样(假设您的集群有 3 个节点 - 如果您使用 Identity Map-Reduce Job,那么将 reduce 数量设置为 3 可以获得相同的结果。如果您的文件是 skweed 你可能会遇到一些性能问题)。 用于此的加载程序必须保证它不会在多个拆分中拆分键的单个值。 ( 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 个 map task 。 因此,假设您要对第二个字段求和,该过程可以只在 map 端运行。

part-m-00000
10 - 17
12 - 13

part-m-00001
14 - 2
17 - 18

part-m-00002
20 - 13

就 COGROUP 而言,我想它会以类似的方式执行。每个映射任务将在两个具有相同 key 的分区文件中运行。

关于java - GROUP USING 'collected' 和 'merge' 背后的算法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25097414/

相关文章:

hadoop - 说 “hadoop is a hyper-converged Infrastructure application”是否公平?

hadoop - Oozie SSH 操作

java - Netbeans,无法保存我对项目文件所做的编辑

algorithm - 实践中什么更快 : Treap or Splay tree?

c++ - 如何否定 lambda 函数结果

Python-查找可以在单词内部找到的所有子词

hadoop - Spark 1.3.0 : Running Pi example on YARN fails

java - Tomcat 7/TomEE 1.6 @Webfilter 注释。没有从 Jar 中加载

java - 内部静态泛型类<<无法解析为类型>>

java - 如何从 javadoc 中学习