在java中我會使用:在hadoop上的一個流式作業中使用多個映射器輸入?
MultipleInputs.addInputPath(CONF,路徑,inputFormatClass,mapperClass)
添加多個輸入與不同的映射器,用於每一個。
現在我正在使用python在hadoop中編寫一個流式作業,可以完成類似的工作嗎?
在java中我會使用:在hadoop上的一個流式作業中使用多個映射器輸入?
MultipleInputs.addInputPath(CONF,路徑,inputFormatClass,mapperClass)
添加多個輸入與不同的映射器,用於每一個。
現在我正在使用python在hadoop中編寫一個流式作業,可以完成類似的工作嗎?
可以使用多輸入選項來指定多個輸入路徑:
hadoop jar hadoop-streaming.jar -input foo.txt -input bar.txt ...
我想這可以幫助你:https://github.com/hyonaldo/hadoop-multiple-streaming。
在這裏你可以看到「這些不同的輸入路徑不同映射器」以及:
hadoop jar hadoop-multiple-streaming.jar \
-input myInputDirs \
-multiple "outputDir1|mypackage.Mapper1|mypackage.Reducer1" \
-multiple "outputDir2|mapper2.sh|reducer2.sh" \
-multiple "outputDir3|mapper3.py|reducer3.py" \
-multiple "outputDir4|/bin/cat|/bin/wc" \
-libjars "libDir/mypackage.jar" \
-file "libDir/mapper2.sh" \
-file "libDir/mapper3.py" \
-file "libDir/reducer2.sh" \
-file "libDir/reducer3.py"
謝謝。但是如果我想爲不同的輸入路徑使用不同的映射器呢?我實際上得到了不同的數據源,我想從中解析出相同格式的數據,以便Reducer可以處理。 – Ken
我不像Streaming那麼熟悉正常的HMR,所以我不確定是否有更好的方法來做到這一點,但是您可以通過帶有Identity Reducers的Mappers來運行您的輸入,然後將這些輸出工作並將其用作具有身份映射器和所需的Reducer的另一項工作的輸入。 – HypnoticSheep
因此,如果我想使用多輸出多輸入,我應該重寫hadoop-streaming.jar?或者只是將輸入和輸出指定爲shell參數? – whyisyoung