当前版本的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
但是,这似乎不起作用。我做错了什么?
答案 0 :(得分:0)
我怀疑您的问题出在以下来源:
第69行splitArgs()
方法,它标记了您传递的命令:
python /code/triples-mapper.py | sort | python /code/triples-reducer.py
运行命令运行:/code/triples-mapper.py
(第131/132行),然后传入一组参数。所有标记都传递给ProcessBuilder(第164行)
因此操作系统不会解释您的管道,更多的是作为参数传递给您的映射器(您应该能够通过转储映射器代码中传递的参数来确认)
这是0.20.2的全部内容,因此可能已经“修复”以满足您在hadoop的更高版本中的用途。