我正在使用带有-io typedbytes的Hadoop流并设置mapred.reduce.tasks = 2,但我最终只得到一个输出文件。如果我设置mapred.reduce.tasks = 0,那么我有很多输出文件。我很困惑。
我的问题是: 当我在流媒体中使用-io typedbytes时,如何使mapred.reduce.tasks = num(num> 1)配置有效?
PS:我的映射器的输出是(键:python的字符串,值:numpy的数组)。
我的.sh文件:
hadoop jar $ HADOOP_HOME / contrib / streaming / hadoop-streaming-1.2.1.jar \
-D mapred.reduce.tasks = 2 \
-fs本地\
-jt当地
-io typedbytes \
-inputformat org.apache.hadoop.mapred.SequenceFileAsBinaryInputFormat \
- 输入FFT_SequenceFile \
- 输出pinvoutput \
-mapper'pinvmap.py'\
-file pinvmap.py \
答案 0 :(得分:0)
-D mapred.reduce.tasks=2 \ -fs local \ -jt local
通过检查-fs
和-jt
的值,我知道您正在以local
模式运行它。
在local
模式下,零或一个减速器最多可以运行
因为它使用本地文件系统和单个JVM,所以在这种模式下没有Hadoop守护进程
在psuedo distributed
模式下,所有守护程序在同一台计算机上运行,属性-D mapred.reduce.tasks=n
将起作用,结果n
缩减器。
因此,您应该使用psuedo distributed
模式来处理多个Reducer
希望它有所帮助!