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


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
..
..
..

有没有办法不使用Pig或Hive?

您可以使用MultipleInputs来完成这个操作,参见这里的示例

据我所知,你不能在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的方法,您可以在其中使用{键/值},mapper/reducer可以将key+some_part_of_value视为键。

相关内容

  • 没有找到相关文章

最新更新