2

我在使用 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

文档有缺陷还是我做错了什么?

感谢您对我做错了什么的任何见解。谢谢

4

1 回答 1

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 \
于 2014-08-06T16:30:58.580 回答