2

当前版本的 hadoop-streaming 需要一个用于组合器的 Java 类,但我在某处读到我们可以使用如下 hack:

hadoop jar ./contrib/streaming/hadoop-0.20.2-streaming.jar  -input /testinput -output /testoutput -mapper "python /code/triples-mapper.py | sort | python /code/triples-reducer.py" -reducer /code/triples-reducer.py 

但是,这似乎不起作用。我究竟做错了什么?

4

1 回答 1

0

我怀疑您的问题出在以下来源:

http://svn.apache.org/viewvc/hadoop/common/tags/release-0.20.2/src/contrib/streaming/src/java/org/apache/hadoop/streaming/PipeMapRed.java?view=markup

第 69 行splitArgs()方法标记了您传递的命令:

python /code/triples-mapper.py | sort | python /code/triples-reducer.py

进入要运行的命令:(/code/triples-mapper.py第 131/132 行),然后传入一组参数。所有令牌都传递给 ProcessBuilder(第 164 行)

用于 ProcessBuilder 的 Java API

所以你的管道没有被操作系统解释,更多的是作为参数传递给你的映射器(你应该能够通过转储映射器代码中传递的参数来确认这一点)

这都是针对 0.20.2 的,所以可能已经“修复”以满足您在更高版本的 hadoop 中的目的。

于 2012-03-30T11:32:03.610 回答