在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