如何依次顺序运行MapReduce Jobs

时间:2014-02-20 05:01:41

标签: hadoop scheduling

我正在运行单节点集群并处理时间序列数据。我有一组MapReduce作业定期运行(使用Quartz crontrigger)来自客户端应用程序。例如,

job1 : runs every 10 min .priority VERY_HIGH
job2 : runs every hour (it takes input from the output of job1).priority HIGH
job3 : runs every day(it takes input from the output of job2).priority NORMAL

.....

一切正常。但有时,可以同时触发多个作业,例如在00:00 am job1,job2,job3将被触发。即使作业优先级设置,由于可用的映射槽,这些作业被发现并行执行。因此,低优先级作业错过了一些输入数据。

简要说明:我需要根据作业优先级严格执行FIFO。意味着它应该被限制为一次只运行一个作业。即job1完成,然后job2完成,job3 ..

我不知道hadoop调度程序如何帮助我。请指教。

2 个答案:

答案 0 :(得分:1)

尝试将这些设置更改为1:

mapred.tasktracker.map.tasks.maximum 1 mapred.tasktracker.reduce.tasks.maximum 1

如果您将mapper和reducer的值限制为1,则下一个作业必须等待下一个映射器完成。如果你看,这不是一个好的解决方案。

使用Oozie工作流引擎最能满足您的需求。

答案 1 :(得分:0)

我一直在研究一种名为Soop的新工作流引擎。 https://github.com/radixCSgeek/soop它非常轻量级,使用类似cron的语法设置和运行非常简单。您可以指定作业依赖关系(包括作业之间的虚拟依赖关系),DAG引擎将确保以正确的顺序执行它们。