Hadoop:来自一个Map函数的多个Emit

时间:2011-10-16 00:22:58

标签: java hadoop

我正在用java编写一个小的hadoop程序,我的要求是从一个Map方法做两个Emits,并在一个Reduce方法中处理两个Emits。这可能吗 ? 如果可能的话,我如何区分两个Emits,以便我可以在Reduce方法中以不同方式处理它们? 我对此做了很多搜索,但无法得到任何具体的东西。我不允许使用任何外部库。

3 个答案:

答案 0 :(得分:1)

map / reduce任务将键/值作为输入。值不一定是像WordCount这样的大多数示例中的字符串,它也可以是一个复杂的结构。

您可以拥有一个结构,其中两个字段对应于两个发射,并且该键/值对将自动发送到一个减速器。

答案 1 :(得分:1)

您可以从单个“地图”调用中输出您需要的少量或多条记录。

当您需要通过单个“Reduce”调用处理其中几条记录时,您只需确保它们具有相同的密钥,并且Hadoop框架将确保它们将被送入相同的reducer调用。

请注意,reducer可能会以不同的顺序接收键值对。

答案 2 :(得分:0)

如果你想在减速器侧区分不同的发射和地图,你可以
1)为所有发射,标记值保持相同的键
2)不同发射,标签值的标签键(如果你想在减速器侧对键的某些部分进行分组/排序,这很有用) 阅读以下内容 What is the use of grouping comparator in hadoop map reduce http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html