Hadoop - 如何使用和减少多个输入?

时间:2013-04-11 11:47:10

标签: java hadoop mapreduce

Mapper/Reducer 1 --> (key,value)
                      /   |   \
                     /    |    \
     Mapper/Reducer 2     |    Mapper/Reducer 4
     -> (oKey,oValue)     |    -> (xKey, xValue)
                          |
                          |
                    Mapper/Reducer 3
                    -> (aKey, aValue)

我有一个日志文件,我与MR1聚合在一起。 Mapper2,Mapper3,Mapper4将MR1的输出作为输入。工作被束缚。

MR1输出:

User     {infos of user:[{data here},{more data},{etc}]}
..

MR2输出:

timestamp       idCount
..

MR3输出:

timestamp        loginCount
..

MR4输出:

timestamp        someCount
..

我想结合MR2-4的输出:最终输出 - >

timestamp     idCount     loginCount   someCount
..
..
..

有没有猪或蜂巢的方式?我正在使用Java。

2 个答案:

答案 0 :(得分:1)

您可以使用MultipleInputs执行此操作,请参阅示例here

答案 1 :(得分:1)

据我所知,你不能在reducer类中有输出数组。 我想到的解决问题的方法如下:

您的 MR1输出密钥将是{a,b,c}之一,而{timestamp,idCount}{timestamp, loginCount}或{{ 1}}根据键。你将结合 MR2-4

所以这个过程就是这样的:

{timestamp, someCount}

此外,还有一些名为MR1 <inputKey,inputValue,outputKey,outPutValue> where outputKey is "a" for outValue`{timestamp,idCount} "b" for outValue`{timestamp, loginCount} "c" for outValue`{timestamp, someCount} MR2-4<inputKey,inputValue,outputKey,outPutValue> if inputkey is "a" do MR2 if inputkey is "b" do MR3 if inputkey is "c" do MR4 的方法,您可以在其中使用{key / value},mapper / reducer可以将Partitioner and GroupComperator视为关键。