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
视为键。