在reducer完成时调用mapper

时间:2016-02-07 04:32:25

标签: python hadoop mapreduce cluster-computing distributed-computing

我正在执行这项工作:

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 tutorial州:

  

用户可能需要链接MapReduce作业才能完成无法通过单个MapReduce作业完成的复杂任务。这很容易,因为作业的输出通常是分布式文件系统,而输出又可以用作下一个作业的输入。

但它没有给出任何例子...

这是some code in Java我能理解,但我正在编写Python! :/

这个问题摆脱了一些之光:Chaining multiple mapreduce tasks in Hadoop streaming

1 个答案:

答案 0 :(得分:1)

您可以使用Java API执行所需的操作,因为您已经找到了一个示例。

但是,您正在使用简单读取标准输入并写入标准输出的流API。除了完成hadoop jar命令之外,没有回调可以说明mapreduce作业何时完成。但是,因为它完成了,并没有真正表明“成功”。话虽如此,如果没有更多关于流API的工具,这是不可能的。

如果输出被写入本地终端而不是HDFS,则可能将该输出传输到另一个流作业的输入中,但不幸的是,蒸汽罐的输入和输出需要HDFS上的路径。