mapreduce计算成对的出现次数

iszxjhcz  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(319)

我是mapreduce的新手,希望您对以下任务的最佳mapreduce方法发表意见。
我有一个大文件的格式

1 2 3
2
2 3 4 5

每行都有一个数字列表。我想在任何一行列出每一个可能的数字组合。我想要包含每一对的行数。
结果会是

element1 element2 occurrences
1        1        1
1        2        1
1        3        1
2        2        3
2        3        2
3        3        2
3        4        1
3        5        1

文件中大约有2万行,大约有1.5万个不同的数字。而且将有大约2.5g不同的数字对需要计数。
stright-forward伪代码类似于:为文档中的每一行调用map

Map(int lineId, list<int> elements)
{
  for each pair of integers in elements
    emit(pair, 1)
}

Reduce((int, int) pair, list<int> counts)
{
  return sum(counts)
}

但这种方法需要2米的绘图机和2.5克的减速机。这是一个可行的方法吗?计划在azure上尝试hadoop。

v440hwme

v440hwme1#

简而言之,我不是Maven,但我会这么做@thomas jungblut的观点很重要-Map器会为每个文件的每个块启动(大小是可配置的,并且最大值),所以你不会有你认为的那么多Map器,此外-在某种程度上,使用hadoop这样的平台的目的是让它解决问题。你的逻辑是正确的。

bvuwiixz

bvuwiixz2#

但这种方法需要2米的绘图机和2.5克的减速机。这是一个可行的方法吗?计划在azure上尝试hadoop。
这种假设是不正确的。
fileinputformat的Map器数等于输入拆分数。输入分割可以Map到hdfs中的一个块,默认值为64mb。因此,如果输入文件是1024MB,那么将启动16个Map任务。
可以使用mapred.reduce.tasks参数(默认值为1)配置减速器的数量。另外,请注意,可以使用组合器使作业更快地完成。
我建议您阅读hadoop,这是更好地理解mapreduce和hadoop的权威指南。

相关问题