设置减速器的数量不起作用
set the number of reducers does not work
我正在使用带 -io typedbytes 的 Hadoop 流式处理并设置 mapred.reduce.tasks=2,但我最终只得到一个输出文件。如果我设置 mapred.reduce.tasks=0,那么我会得到很多输出文件。我很困惑。
所以我的问题是:
当我在流式传输中使用 -io typedbytes 时,如何使 mapred.reduce.tasks = num (num >1) 配置有效?
PS: 我的映射器的输出是 (key:string of python, value:array of numpy) .
还有我的 .sh 文件:
hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-1.2.1.jar \
-D mapred.reduce.tasks=2 \
-fs 本地 \
-jt本地\
-io 类型字节\
-输入格式 org.apache.hadoop.mapred.SequenceFileAsBinaryInputFormat \
- 输入 FFT_SequenceFile \
- 输出 pinvoutput \
-映射器'pinvmap.py'\
-文件 pinvmap.py \
-D mapred.reduce.tasks=2 \ -fs local \ -jt local
通过检查 -fs
和 -jt
的值,我了解到您正在 运行 将其设置为 local
模式。
在local
模式下,零个或一个reducer最多可以运行.
因为它使用本地文件系统和单个 JVM,所以在这种模式下没有 Hadoop 守护进程。
在 psuedo distributed
模式下,所有守护进程 运行 都在同一台机器上,属性 -D mapred.reduce.tasks=n
将工作并产生 n
个减速器。
所以你应该使用 psuedo distributed
模式来处理多个减速器。
希望对您有所帮助!
我正在使用带 -io typedbytes 的 Hadoop 流式处理并设置 mapred.reduce.tasks=2,但我最终只得到一个输出文件。如果我设置 mapred.reduce.tasks=0,那么我会得到很多输出文件。我很困惑。
所以我的问题是: 当我在流式传输中使用 -io typedbytes 时,如何使 mapred.reduce.tasks = num (num >1) 配置有效?
PS: 我的映射器的输出是 (key:string of python, value:array of numpy) .
还有我的 .sh 文件:
hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-1.2.1.jar \
-D mapred.reduce.tasks=2 \
-fs 本地 \
-jt本地\
-io 类型字节\
-输入格式 org.apache.hadoop.mapred.SequenceFileAsBinaryInputFormat \
- 输入 FFT_SequenceFile \
- 输出 pinvoutput \
-映射器'pinvmap.py'\
-文件 pinvmap.py \
-D mapred.reduce.tasks=2 \ -fs local \ -jt local
通过检查 -fs
和 -jt
的值,我了解到您正在 运行 将其设置为 local
模式。
在local
模式下,零个或一个reducer最多可以运行.
因为它使用本地文件系统和单个 JVM,所以在这种模式下没有 Hadoop 守护进程。
在 psuedo distributed
模式下,所有守护进程 运行 都在同一台机器上,属性 -D mapred.reduce.tasks=n
将工作并产生 n
个减速器。
所以你应该使用 psuedo distributed
模式来处理多个减速器。
希望对您有所帮助!