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

Pig または Hive を使用しない方法はありますか? 私はJavaを使用しています。

4

2 に答える 2

1

私の知る限り、レデューサー クラスに出力の配列を含めることはできません。あなたの問題を解決するために私の頭に浮かぶのは次のとおりです。

MR1 の出力キーは次のいずれかで{a,b,c}はキー間のペア{timestamp,idCount}またはキーによるペアです。そしてMR2-4を合体させます。{timestamp, loginCount}{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

また、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 に答える