用于hadoop流的组合器破解



当前版本的hadoop流需要一个用于组合器的Java类,但我在某个地方读到,我们可以使用如下破解:

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 

然而,这似乎并不奏效。我做错了什么?

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

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的后续版本中的目的。

最新更新