Hadoop的MapReduce中的“Map”和“Reduce”函数

时间:2013-03-28 00:53:17

标签: hadoop mapreduce

我一直在看hadoop的这个单词计数示例: http://hadoop.apache.org/docs/r1.0.4/mapred_tutorial.html#Source+Code

我对Map功能有点困惑。在显示的map函数中,它接收LongWritable类型的“键”,但此参数从不在Map函数的主体中使用。应用程序员期望Hadoop为此密钥传递什么?如果map函数只是从一行文本或其他东西中解析值,为什么map函数需要一个键。有人能给我一个例子,其中输入需要一个键和一个值吗?我只看到地图为V1 - > (K2,V2)。

另一个问题:在实际执行hadoop时,他们的多个减少步骤是什么?如果是这样,如果函数是(K2,V2) - >,则hadoop如何多次应用相同的缩减函数。 (K3,V3)?如果执行另一次减少,则需要输入类型(K3,V3)......

谢谢!

1 个答案:

答案 0 :(得分:2)

那里有一个键,因为map()方法总是传递一个键和一个值(以及一个上下文)。您是否真正使用密钥和/或值取决于您。在这种情况下,键表示正在读取的文件中的行号。字计数逻辑不需要那个。 map()方法只使用该值,在文本文件的情况下,该值是文件的一行。

关于你的第二个问题(它应该是它自己的堆栈溢出问题),你可以在hadoop工作流程中拥有任意数量的map / reduce作业。其中一些作业将作为输入预先存在的文件读取,其他作业将读取其他作业的输出。每个作业都有一个或多个映射器和一个减速器。