使用oozie实现spark定时调度和spark依赖
2017-08-07 12:00
603 查看
oozie是针对hadoop的任务调度框架,因为spark on yarn的模式是基于hadoop的任务调度模块yarn来做的,所以spark on yarn模式可以利用oozie的定时模块和任务依赖调度模块,实现按时按步骤的执行spark的job,下面就简单介绍一下刚使用oozie时容易忽略和比较重要的地方。 最简单来讲,一个简单依赖关系的ooziejob,需要一个提交到hdfs上的xml用来解析properties文件,一个properties对应一个oozie的job,一个jar包用来执行任务。 定时任务则额外需要一个xml用来指定定时规则。 下面就以最简配置举一个简单的spark定时任务和依赖例子
workflow.xml
"> <start to="spark-SparkOozieAction1"/> <kill name="Kill"> <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <action name="spark-SparkOozieAction1"> <spark xmlns="uri:oozie:spark-action:0.1"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <master>${jobmaster}</master> <mode>${jobmode}</mode> <name>${jobname1}</name> <class>${jarclass1}</class> <jar>${jarpath1}</jar> <spark-opts>${sparkopts1}</spark-opts> <arg>${jararg1}</arg> </spark> <ok to="SparkOozieAction2"/> <error to="Kill"/> </action> <action name="spark-SparkOozieAction2"> <spark xmlns="uri:oozie:spark-action:0.1"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <master>${jobmaster}</master> <mode>${jobmode}</mode> <name>${jobname2}</name> <class>${jarclass2}</class> <jar>${jarpath2}</jar> <spark-opts2>${sparkopts}</spark-opts> <arg2>${jararg}</arg> </spark> <ok to="End"/> <error to="Kill"/> </action> <end name="End"/> </workflow-app>
上面的workflow.xml简单的实现了一个依赖的job,对于两个sparkjob重 复使用的配置可以使用相同的配置名,其中的frequency是最重要的参数,设置时间间隔,EL表达式可以参照文章最后的表格。下面是定时的xml:
coordinator.xml
<coordinator-app xmlns="uri:oozie:coordinator:0.2" timezone="UTC" end="${end}" start="${start}" frequency="${coord:days(1)}" name="coordinatordays"> <action> <workflow> <app-path>${workflowAppUri}</app-path> <configuration> <property> <name>jobTracker</name> <value>${jobTracker}</value> </property> <property> <name>nameNode</name> <value>${nameNode}</value> </property> <property> <name>queueName</name> <value>${queueName}</value> </property> </configuration> </workflow> </action> </coordinator-app>
需要注意的是,任务调度的时间是以UTC时区为参照的,因为我们在+8时区,所以需要把现在的时间-8得到UTC时区的时间。
下面是具体的job.properties和比较重要的属性介绍
#需要有,是否使用系统lib路径 oozie.use.system.libpath=True #需要有,lib路径,在hdfs上的,根据实际情况,一般来讲都一样 oozie.libpath=hdfs://master:8020/user/oozie/share/lib/ #需要有,coordinator.xml在hdfs上的路径 oozie.coord.application.path=hdfs://master:8020/user/root/oozie/coordinator/coordinatordays.xml #下面的两个最好有,是否启动安全机制和检查机制 security_enabled=False dryrun=False #下面是spark的属性参数,具体参照自己的workflow.xml jobTracker=master:8032 nameNode=hdfs://master:8020 jobname=sparkjob jarclass=com.spark.main jarpath=hdfs://master:8020/user/root/oozie/jar/myspark.jar #spark参数,其中spark.yarn.jar比较重要,要找到自己的assembly相关jar包,这是装配spark的类,很重要 sparkopts=--executor-memory 1G --total-executor-cores 2 --driver-memory 512M --conf spark.yarn.jar=hdfs://master:8020/system/spark/lib/spark-assembly-1.6.0-cdh5.9.0-hadoop2.6.0-cdh5.9.0.jar --conf spark.yarn.historyServer.address=http://master:18088 --conf spark.eventLog.dir=hdfs://master:8020/user/spark/applicationHistory --conf spark.eventLog.enabled=true jararg1=hello #下面是定时任务相关的参数 workflowAppUri是workflow.xml的地址,用来关联workflow.xml的信息 start=2017-07-26T16:10Z end=2020-07-30T16:10Z workflowAppUri=/user/root/oozie/workflow/workflow.xml queueName=default
一般来讲,oozie经常会拿来和azkaban来比较,经常会权衡用那个框架比较好,整体而言,oozie是Apache下的一个项目,对于hadoop生态圈有更好的支持,依赖于笨重的配置文件,实现的功能也更丰富,但同时,笨重也是它的缺点之一,程序员在刚开始使用的时候,不太熟悉XML里的一些属性的联系和意义,容易犯一些不容易发现的小错误,oozie的日志也不是很完善,如果要找到错误,要去hadoop或者spark的日志系统里找问题;因为这些问题,azkaban的社区活跃度比oozie高很多,oozie也在最近几年版本更新的异常缓慢。所以如果对功能性要求不是很高,只是简单使用依赖关系和定时功能,那azkaban无疑是更好的选择。 oozie最常用的两个命令就是启动job和杀死job的命令
启动命令
oozie job -oozie http://master:11000/oozie -config /home/cdh/ooziejob/job.properties -run
kill命令,jobid可以到oozie自带的web界面查看
oozie job -oozie http://localhost:11000/oozie -kill 0000000-170724202624644-oozie-oozi-C
相关文章推荐
- 使用 Timer 实现任务调度(定时任务)
- 使用Spring + quartz实现定时任务调度
- 如何使用spring 定时调度 【 Spring+Quartz实现定时任务 】
- Spring与Quartz集成实现定时调度任务的简单使用
- OpenJWeb使用Spring框架实现定时作业调度的例子
- OpenJWeb使用Spring框架实现定时作业调度的例子
- 使用Spring + quartz实现定时任务调度
- ASP.NET使用Quartz.NET实现定时任务调度
- 使用Quartz实现作业调度(二)
- 使用SQL Server维护计划实现数据库定时自动备份
- 决定使用DropBox和任务调度来实现文件同步
- Spring--简单使用quartz实现定时作业
- [转]Spring--简单使用quartz实现定时作业
- Quartz实现定时功能,Cron表达式调度等等
- Spring--简单使用quartz实现定时作业
- 使用BeanPostProcessor实现依赖注入的修正器
- 使用C#的Timer控件来实现定时触发事件
- 使用Quartz实现定时功能
- 使用System.Timers.Timer类实现程序定时执行
- Spring--简单使用quartz实现定时作业