我使用的是Python,必须使用Hadoop Streaming处理以下场景: a)Map1-> Reduce1-> Map2-> Reduce2 b)我不想存储中间文件 c)我不想安装Cascading,Yelp,Oozie等软件包。我把它们作为最后的选择。
我已经在SO和其他地方进行了同样的讨论,但是找不到Python的答案。你能建议吗。
答案 0 :(得分:3)
b)我不想存储中间文件
c)我不想安装像Cascading,Yelp,Oozie这样的软件包。
有什么理由?根据响应,可以提供更好的解决方案。
无法避免中间件文件,因为以前的Hadoop作业的o / p无法作为i / p流式传输到下一个作业。创建一个这样的脚本
运行流媒体作业1 如果job1不成功,则退出
运行流媒体job2
如果job2成功,则删除o / p job1,否则退出
运行流媒体工作3 如果job3成功,则删除o / p job2,退出
答案 1 :(得分:2)
为什么不将MapReduce框架用于python流,例如Dumbo https://github.com/klbostee/dumbo/wiki/Short-tutorial或MRJob http://packages.python.org/mrjob/
例如,使用dumbo,您的管道将是:
job.add_iter(Mapper1, Reducer1)
job.add_iter(Mapper2, Reducer2)