我在使用 Hadoop Streaming 时遇到了这些问题。我正在用python编写代码
1) 聚合库包
根据hadoop流文档(http://hadoop.apache.org/common/docs/r0.20.0/streaming.html#Working+with+the+Hadoop+Aggregate+Package+%28the+-reduce+aggregate+option%29 ),有一个内置的 Aggregate 类,它既可以作为映射器,也可以作为减速器。
这是命令:
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
文档有缺陷还是我做错了什么?
感谢您对我做错了什么的任何见解。谢谢