组合黑客为hadoop流

时间:2012-02-27 07:21:07

标签: hadoop streaming combiners

当前版本的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 

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

1 个答案:

答案 0 :(得分: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行)

Java Api for ProcessBuilder

因此操作系统不会解释您的管道,更多的是作为参数传递给您的映射器(您应该能够通过转储映射器代码中传递的参数来确认)

这是0.20.2的全部内容,因此可能已经“修复”以满足您在hadoop的更高版本中的用途。