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

Posted

技术标签:

【中文标题】Hadoop MapReduce 中的“Map”和“Reduce”函数【英文标题】:"Map" and "Reduce" functions in Hadoop's MapReduce 【发布时间】:2013-03-28 00:53:16 【问题描述】:

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

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

另外一个问题:在hadoop的实际实现中,它们是不是有多个reduction step?如果是这样,如果函数是 (K2, V2) -> (K3, V3),hadoop 如何多次应用相同的归约函数?如果再做一次reduction,需要把type (K3, V3)...

谢谢!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

所以如果我将 K1 声明为任何东西,Hadoop 怎么知道它应该作为密钥传入什么?就像在这种情况下,它可能是一个行号,因为它的 LongWritable,但如果它像 String,Hadoop 是否知道传递其他东西?总是行号吗?谢谢.. 这取决于您选择的输入格式类型。对于文件/文本输入类型,kay/value 是 LongWritable/Text。 HDFS 顺序文件(另一种输入格式类型)将具有您在创建它们时使用的任何键/值类型。

以上是关于Hadoop MapReduce 中的“Map”和“Reduce”函数的主要内容,如果未能解决你的问题,请参考以下文章

hadoop mapreduce 进程都有哪些

入门Hadoop---Mapreduce,Yarn是什么?

Hadoop中的MapReduce框架

Hadoop中的map端连接和reduce端连接以及半连接

如何查看hadoop mapreduce 性能

Hadoop旧mapreduce的map任务切分原理