可以在Hadoop Streaming中级联多个MapReduce作业吗(语言:Python)
我正在使用Python,并且需要在Hadoop Streaming上处理以下场景:
a) Map1 -> Reduce1 -> Map2 -> Reduce2
b) 我不想存储中间文件
c) 我不想安装像Cascading、Yelp、Oozie这样的包。我把它们作为最后的选择。
我已经在Stack Overflow和其他地方看过类似的讨论,但找不到关于Python的答案。你能给我一些建议吗?
2 个回答
2
为什么不使用像Dumbo https://github.com/klbostee/dumbo/wiki/Short-tutorial 或 MRJob http://packages.python.org/mrjob/ 这样的MapReduce框架来进行Python流处理呢?
举个例子,使用Dumbo时,你的管道(pipe)会是:
job.add_iter(Mapper1, Reducer1)
job.add_iter(Mapper2, Reducer2)
3
b) 我不想存储中间文件。
c) 我不想安装像Cascading、Yelp、Oozie这样的包。
你为什么这么想呢?根据你的回答,可能会提供更好的解决方案。
中间文件是无法避免的,因为前一个Hadoop任务的输出不能直接作为下一个任务的输入。你可以创建一个这样的脚本:
运行流式任务job1
如果job1没有成功,就退出
运行流式任务job2
如果job2成功了,就删除job1的输出,否则退出
运行流式任务job3
如果job3成功了,就删除job2的输出,否则退出