【发布时间】:2016-02-07 04:32:24
【问题描述】:
我正在执行这项工作:
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
当两个减速器完成后,我想对结果做点什么,所以理想情况下我想调用另一个文件(另一个映射器?),它将接收减速器的输出为它的输入。如何轻松做到这一点?
我检查了这个 blog,它有一个 Mrjob 示例,没有解释,我不知道该怎么做。
用户可能需要链接 MapReduce 作业来完成无法通过单个 MapReduce 作业完成的复杂任务。这相当容易,因为作业的输出通常会发送到分布式文件系统,而输出又可以用作下一个作业的输入。
但它没有给出任何例子......
这里是some code in Java 我可以理解,但我正在写Python! :/
这个问题揭示了一些:Chaining multiple mapreduce tasks in Hadoop streaming
【问题讨论】:
-
您指定了输出到 hdfs 目录,对吧?您需要将其作为您的输入进行另一项 mapreduce 工作
-
是的@cricket_007,我不确定如何通过一个电话来做到这一点。我的意思是我可以像我的回答一样执行该作业,然后执行另一个作业,该作业只会调用一个映射器。但这似乎很奇怪,我不能按一次 ENTER 键吗? :)
-
我很确定您正在阅读的教程(对于您链接到的页面已经超过 2 年)是说 Java MapReduce api 允许将作业串在一起。蒸汽 mapreduce 只经过标准输入和标准输出。您可能能够通过彼此通过管道传输命令,但前提是您输出到标准输出
-
@cricket_007 是的,我使用
sys.stdin输入,print输出。 -
对,在你的 python 代码中,因为这是流 api 的工作方式,但它被捆绑在一个 jar 文件中,并发送到 hdfs。您将无法将作业的标准输出返回到本地终端以将其通过管道传输到新命令,这就是将输出写入 HDFS 的原因
标签: python hadoop mapreduce cluster-computing distributed-computing