Hadoop流媒体问题

时间:2011-08-03 17:53:50

标签: hadoop hadoop-streaming

我在使用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类,可以作为映射器和reducer使用。

这是命令:

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

但是,如果使用aggregate作为reducer而不是组合器运行此命令,则作业正常。

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

1 个答案:

答案 0 :(得分:0)

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 \