我的工作是:
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
当两个reducer完成后,我想对结果做些什么,所以理想情况下我想调用另一个文件(另一个Map器?),它将接收reducer的输出作为其输入。如何轻松做到这一点?
我查了这个博客,里面有一个mrjob的例子,没有解释,我不知道怎么做我的。
mapreduce教程说明:
用户可能需要链接mapreduce作业来完成复杂的任务,这些任务不能通过单个mapreduce作业来完成。这是相当容易的,因为作业的输出通常会传递到分布式文件系统,而输出反过来又可以用作下一个作业的输入。
但它没有给出任何例子。。。
下面是一些我可以理解的java代码,但我正在编写python!:/
这个问题揭示了一些问题:在hadoop流媒体中链接多个mapreduce任务
1条答案
按热度按时间oipij1gg1#
您可以使用javaapi来实现您的要求,因为您已经找到了一个示例。
但是,您使用的是流式api,它只读取标准输入并写入标准输出。当mapreduce作业完成时,除了
hadoop jar
命令。但是,因为它完成了,并不意味着真正的“成功”。也就是说,如果没有更多关于流式api的工具,这真的是不可能的。如果将输出写入本地终端而不是hdfs,则可以将该输出通过管道传输到另一个流作业的输入,但不幸的是,到流jar的输入和输出需要hdfs上的路径。