当前版本的hadoop-streaming需要一个用于组合器的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 然而,这似乎不起作用。我做错了什么?
发布于 2012-03-30 19:32:04
我怀疑你的问题出在下面的某个地方:
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
所以你的管道没有被操作系统解释,更多的是作为参数传递给你的映射器(你应该能够通过转储你的映射器代码中传递的args来确认这一点)
这都是为了0.20.2,所以可能已经在更高版本的hadoop中进行了“修复”,以满足您的目的。
https://stackoverflow.com/questions/9461326
复制相似问题