设置减速器的数量不起作用

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 模式来处理多个减速器。
希望对您有所帮助!