2013-03-28 124 views
1

“地图”和“减少”的功能我一直在寻找这个词的Hadoop通过算例如: http://hadoop.apache.org/docs/r1.0.4/mapred_tutorial.html#Source+CodeHadoop中的MapReduce

而且我有点困惑的地图功能。在显示的map函数中,它采用LongWritable类型的“键”,但该参数在Map函数的主体中从不使用。应用程序员希望Hadoop通过此密钥传递什么信息?为什么地图函数只需要解析一行文本或某些东西的值就需要一个键。有人可以给我一个例子,说明输入需要密钥和值吗?我只看到地图为V1 - >(K2,V2)。

另一个问题:在hadoop的真正实现中,他们的多个缩减步骤?如果是这样,如果函数是(K2,V2) - >(K3,V3),hadoop如何多次应用相同的归约函数?如果执行另一个缩减,则需要取(K3,V3)类型...

谢谢!

回答

2

有一个关键,因为map()方法总是传递一个键和一个值(和一个上下文)。您是否真的使用密钥和/或价值取决于您。在这种情况下,该键表示正在读取的文件的行号。字数逻辑不需要。 map()方法只使用该值,对于文本文件,该值是文件的一行。至于你的第二个问题(它确实应该是它自己的堆栈溢出问题),你可能在hadoop工作流中有任意数量的map/reduce作业。其中一些作业将作为输入预先存在的文件读取,其他作业将读取其他作业的输出。每个工作将有一个或多个映射器和一个简化器。

+0

因此,如果我将K1声明为任何事情,Hadoop如何知道它应该作为密钥传入?就像在这种情况下,它可能是一个行号,因为它的LongWritable,但如果它的东西像String,Hadoop是否知道传入其他东西?它是否始终是行号? 谢谢.. – de1337ed 2013-03-28 01:21:59

+0

这取决于您选择的输入格式类型。对于文件/文本输入类型,kay /值是LongWritable/Text。 HDFS顺序文件(另一种输入格式类型)将创建您在创建时使用的任何键/值类型。 – 2013-03-28 02:06:06