可以在Hadoop Streaming中级联多个MapReduce作业吗(语言:Python)

3 投票
2 回答
1969 浏览
提问于 2025-04-17 10:14

我正在使用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的输出,否则退出

撰写回答