我正在执行这项工作:
hadoop/bin/./hadoop jar /home/hadoopuser/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.6.0.jar -D mapred.reduce.tasks=2 -file kmeans_mapper.py -mapper kmeans_mapper.py -file kmeans_reducer.py \
-reducer kmeans_reducer.py -input gutenberg/small_train.csv -output gutenberg/out
当两个reducers完成后,我想对结果做一些事情,所以理想我想调用另一个文件(另一个mapper?),它会接收reducers的输出它的输入。怎么这么容易?
我查了blog这个有 Mrjob 的例子,但没有解释,我不知道如何做我的。
用户可能需要链接MapReduce作业才能完成无法通过单个MapReduce作业完成的复杂任务。这很容易,因为作业的输出通常是分布式文件系统,而输出又可以用作下一个作业的输入。
但它没有给出任何例子...
这是some code in Java我能理解,但我正在编写Python! :/
这个问题摆脱了一些之光:Chaining multiple mapreduce tasks in Hadoop streaming
答案 0 :(得分:1)
您可以使用Java API执行所需的操作,因为您已经找到了一个示例。
但是,您正在使用简单读取标准输入并写入标准输出的流API。除了完成hadoop jar
命令之外,没有回调可以说明mapreduce作业何时完成。但是,因为它完成了,并没有真正表明“成功”。话虽如此,如果没有更多关于流API的工具,这是不可能的。
如果输出被写入本地终端而不是HDFS,则可能将该输出传输到另一个流作业的输入中,但不幸的是,蒸汽罐的输入和输出需要HDFS上的路径。