一个简单的使用Quartz和Oozie调度作业给大数据计算平台执行

简介:

一,介绍

Oozie是一个基于Hadoop的工作流调度器,它可以通过Oozie Client 以编程的形式提交不同类型的作业,如MapReduce作业和Spark作业给底层的计算平台(如 Cloudera Hadoop)执行。

Quartz是一个开源的调度软件,它为任务的调度执行提供了各种触发器以及监听器

下面使用Quartz + Oozie 将一个MapReduce程序提交给Cloudera Hadoop执行

二,调度思路

①为什么要用Quartz呢?主要是借助Quartz强大的触发器功能。它可以允许满足不同的调度需求,如每周执行作业一次、重复执行作业多少次。这里有一个重要的问题:假设我有一个作业需要重复执行,当第一次把该作业提交到CDH上执行后,以后需要执行该作业时不再是又一次把该作业上传到CDH上然后执行,而是把提交过的作业记录下来,下次需要运行时,直接让CDH再运行该作业。

②使用Quartz还有一个好处就是:在作业提交的时候可以做一些控制。比如,某种类型的作业提交的频率很高,或者运行时间较短(根据它上次执行完的情况来判断),那么下次运行它时,让它具有更高的优先级。

③使用Oozie的目的很明确,就是让它把作业发送给底层的计算平台,如CDH去执行作业。

三,Eclipse开发环境搭建

主要是需要Quartz和Oozie的依赖包。具体如下:

 四,实现思路

a) 调度系统目前只考虑调度两种类型的作业:Mapreduce作业和Spark作业。先把这二种作业通过Quartz传递给Oozie,然后再让Oozie把作业提交给CDH计算平台去执行。

b) Quartz提供了一个公共的Job接口。里面只有一个execute()方法,该方法负责完成Quartz所调度的作业的具体功能:把作业传递给Oozie

c) 定义一个抽象类BaseJob,它里面定义了二个方法。这二个方法主要是用来做一些准备工作,即使用Quartz把作业传递给Oozie时需要找到作业在HDFS上的存储目录,并将之复制执行目录下。

d) 最后是两个具体的实现类,MRJob和SparkJob,它们分别代表Mapreduce作业和Spark作业。在实现类里面完成作业的配置,然后将作业提交到CDH计算平台上执行。

相关类图如下:

 

五,具体代码分析

MRJob.java

实现了org.quartz.Job接口的execute(),该方法当触发器被触发时,会自动地被Quartz Schedule 调度执行。这样,就可以根据需要定义触发器,控制作业何时提交给Oozie。

复制代码
 1 @Override
 2     public void execute(JobExecutionContext arg0) throws JobExecutionException {
 3         try{
 4             String jobId = wc.run(conf);
 5             System.out.println("Workflow job submitted");//submit job to oozie and get the jobId
 6             
 7             //wait until the workflow job finishes
 8             while(wc.getJobInfo(jobId).getStatus() == Status.RUNNING){
 9                 System.out.println("Workflow job running...");
10                 try{
11                     Thread.sleep(10*1000);
12                 }catch(InterruptedException e){e.printStackTrace();}
13             }
14             System.out.println("Workflow job completed!");
15             System.out.println(wc.getJobId(jobId));
16         }catch(OozieClientException e){e.printStackTrace();}
17     }
复制代码

 

测试的main函数程序如下:可以看出对于客户端而言,只需要按照编写常规的Quartz作业方式,就可以调试MapReduce作业了。要想运行该程序,当然还得提前准备到作业的运行环境。具体参考

复制代码
 1 import static org.quartz.JobBuilder.newJob;
 2 import static org.quartz.TriggerBuilder.newTrigger;
 3 
 4 import java.util.Date;
 5 
 6 import org.quartz.JobDetail;
 7 import org.quartz.Scheduler;
 8 import org.quartz.SchedulerFactory;
 9 import org.quartz.SimpleTrigger;
10 import org.quartz.impl.StdSchedulerFactory;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13 
14 import com.quartz.job.MRJob;
15 
16 
17 public class QuartzOozieJobTest {
18     public static void main(String[] args) throws Exception{
19         QuartzOozieJobTest test = new QuartzOozieJobTest();
20         test.run();
21     }
22     
23     public void run() throws Exception{
24         Logger log = LoggerFactory.getLogger(QuartzOozieJobTest.class);
25 
26         log.info("------- Initializing ----------------------");
27 
28         SchedulerFactory sf = new StdSchedulerFactory();
29         Scheduler sched = sf.getScheduler();
30         
31         long startTime = System.currentTimeMillis() + 20000L;
32         Date startTriggerTime = new Date(startTime);
33         
34         JobDetail jobDetail = newJob(MRJob.class).withIdentity("job", "group1").build();
35         SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger", "group1").startAt(startTriggerTime).build();
36         
37         Date ft = sched.scheduleJob(jobDetail, trigger);
38         
39         log.info(jobDetail.getKey() + " will submit at " + ft + " only once.");
40         
41         sched.start();
42 //        sched.shutdown(true);
43     }
44 }
复制代码

 

整个项目的源代码下载


本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/p/4943592.html,如需转载请自行联系原作者

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
4月前
|
存储 SQL 分布式计算
开源大数据比对平台设计与实践—dataCompare
开源大数据比对平台设计与实践—dataCompare
68 0
|
4月前
|
SQL 存储 大数据
某互联网大厂亿级大数据服务平台的建设和实践
某互联网大厂亿级大数据服务平台的建设和实践
68 0
|
4月前
|
SQL 大数据 关系型数据库
开源大数据比对平台(dataCompare)新版本发布
开源大数据比对平台(dataCompare)新版本发布
69 0
|
4月前
|
SQL 存储 分布式计算
从0到1介绍一下开源大数据比对平台dataCompare
从0到1介绍一下开源大数据比对平台dataCompare
114 0
|
7月前
|
分布式计算 Java 大数据
大数据常用调度平台
大数据常用调度平台
199 0
|
6月前
|
存储 云安全 大数据
【云计算和大数据平台】云计算平台和大数据平台(如阿里云、腾讯云、华为云等)的搭建和使用方法
【云计算和大数据平台】云计算平台和大数据平台(如阿里云、腾讯云、华为云等)的搭建和使用方法
225 0
|
5月前
|
人工智能 Cloud Native 大数据
构建高性能云原生大数据处理平台:融合人工智能优化数据分析流程
构建高性能云原生大数据处理平台:融合人工智能优化数据分析流程
189 0
|
2月前
|
监控 物联网 大数据
智慧工地管理平台系统源码基于物联网、云计算、大数据等技术
智慧工地平台APP通过对施工过程人机料法环的全面感知、互联互通、智能协同,提高施工现场的生产效率、管理水平和决策能力,实现施工管理的数字化、智能化、精益化。
53 0
|
3月前
|
SQL 分布式计算 HIVE
开源湖仓一体平台(二):Arctic(上篇)
开源湖仓一体平台(二):Arctic(上篇)
开源湖仓一体平台(二):Arctic(上篇)
|
3月前
|
SQL 消息中间件 分布式计算
开源湖仓一体平台(一):LakeSoul
开源湖仓一体平台(一):LakeSoul