5
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。

4

2 回答 2

1

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

的 MR1 输出键将是其中之一,{a,b,c}并且是键之间{timestamp,idCount}{timestamp, loginCount}{timestamp, someCount}根据键的对。你将结合MR2-4

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

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

此外,还调用了一些方法Partitioner and GroupComperator,您可以在其中使用 {key/value} 和 mapper/reducer 可以将key+some_part_of_value其视为键。

于 2013-04-12T06:27:42.677 回答
1

您可以使用MultipleInputs执行此操作,请参见此处的示例

于 2013-04-11T11:53:26.903 回答