java—使用“collected”和“merge”的组背后的算法是什么

kulphzqa  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(264)

清管器文件说明,如果满足某些条件(这些条件在文档中有描述),清管器可以做Map侧 GROUP . 有人能解释一下这个算法吗?我想深入了解mapreduce可以做什么。

wd2eg0qa

wd2eg0qa1#

例如,想象下面的文件:

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

然后,负载将存储您的文件,如下所示(假设您的集群有3个节点-如果您使用identity map reduce作业,那么您可以通过将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框架将为生成的每个分区生成一个map任务。我在本例中使用了3个map任务。假设你要对第二个字段求和,这个过程可以在map端运行。

part-m-00000
10 - 17
12 - 13

part-m-00001
14 - 2
17 - 18

part-m-00002
20 - 13

在cogroup的情况下,我想这将以类似的方式执行。每个map任务将在具有相同密钥的两个文件分区中操作。

m3eecexj

m3eecexj2#

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

相关问题