Hadoop流问题

Hadoop流问题,hadoop,hadoop-streaming,Hadoop,Hadoop Streaming,我在使用Hadoop流媒体时遇到了这些问题。我正在用python编写代码 1) 聚合库包 根据hadoop streaming docs(),有一个内置的聚合类,它既可以用作映射器,也可以用作缩减器 命令如下: shell> hadoop jar hadoop-streaming.jar -file mapper.py -mapper mapper.py -combiner aggregate -reducer NONE -input input_files -output output_

我在使用Hadoop流媒体时遇到了这些问题。我正在用python编写代码

1) 聚合库包

根据hadoop streaming docs(),有一个内置的聚合类,它既可以用作映射器,也可以用作缩减器

命令如下:

shell> hadoop jar hadoop-streaming.jar -file mapper.py -mapper mapper.py -combiner aggregate -reducer NONE -input input_files -output output_path
执行此命令会导致映射程序失败,并出现以下错误:

java.io.IOException: Cannot run program "aggregate": java.io.IOException: error=2, No such file or directory
但是,如果使用聚合作为缩减器而不是组合器来运行此命令,则作业可以正常工作

shell> hadoop jar hadoop-streaming.jar -file mapper.py -mapper mapper.py -reduce aggregate -reducer NONE -input input_files -output output_path
这是否意味着我不能使用聚合类作为组合器?

2) 不能将|用作通用选项的分隔符

这是来自上述链接的示例命令

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D map.output.key.field.separator=. \
-D mapred.text.key.partitioner.options=-k1,2\
-D mapred.reduce.tasks=12
不能将|用作map.output.key.field.separator的参数。错误是

-D: command not found
11/08/03 10:48:02 ERROR streaming.StreamJob: Missing required options: input, output
(更新)你必须用这样的\来逃避|

-D stream.map.output.field.separator=\|
3) 无法像示例中那样在命令末尾指定-D选项。错误是

-D: command not found
11/08/03 10:50:23 ERROR streaming.StreamJob: Unrecognized option: -D
是文档有缺陷还是我做错了什么?


任何关于我做错了什么的见解都是值得赞赏的。Thnx

这个问题是3年前提出的,但今天我仍然遇到了-D选项的问题,因此如果其他人有相同的问题,我将为他们添加一些信息

根据hadoop流媒体手册:

bin/hadoop command [genericOptions] [commandOptions]
-D是一个通用选项,所以你必须把它放在任何其他选项之前。 因此,在本例中,该命令应如下所示:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D map.output.key.field.separator=. \
-D mapred.text.key.partitioner.options=-k1,2\
-D mapred.reduce.tasks=12
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \

这个问题是3年前提出的,但今天我仍然遇到了-D选项的问题,所以如果其他人有同样的问题,我将为他们添加一些信息

根据hadoop流媒体手册:

bin/hadoop command [genericOptions] [commandOptions]
-D是一个通用选项,所以你必须把它放在任何其他选项之前。 因此,在本例中,该命令应如下所示:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D map.output.key.field.separator=. \
-D mapred.text.key.partitioner.options=-k1,2\
-D mapred.reduce.tasks=12
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \

我强烈建议将其拆分为多个问题,在这种形式下,它非常本地化,更适合hadoop用户邮寄列表这是解决方案1)而不是combiner-aggregate use-combiner org.apache.hadoop.mapred.lib.aggregate.ValueAggregatorReducerI强烈建议将其拆分为多个问题,在这种形式下,它是非常本地化的,更适合hadoop用户邮寄列表这里是1)的解决方案,而不是combiner-aggregate use-combiner org.apache.hadoop.mapred.lib.aggregate.ValueAggregatorReducer