摘要:我的最近一段时间一直在使用oozie,从刚开始的各类别扭到如今愈来愈以为有意思的状况下,想整理一下关于oozie的认知,整理出来一个oozie系列,原本市面上关于oozie的资料就比较少,但愿写完后能造成本身对oozie的独特理解和增强总体性的把握.java
linux自带定时器,没有web界面 ,不利于监控任务和调度任务,在工做量比较小的状况下,建议使用linux的crontab定时命令mysql
##crongtab 命令 * * * * * 后面接调度 job 的命令 分 时 日 月 周 ##简单实例(天天0点11分执行) 11 0 * * * /home/hduser/lubians/intelligentDevice/intelligentDevice.sh
开源项目,key/value配置对,操做简单,带web界面linux
Azkaban开源网站git
apache项目,xml配置文件,操做稍微有难度,带web查看界面,经常使用于hadoop相关任务的调度github
Oozie官网web
公司下半年技术架构升级,将整个大数据集群管理流程化,规模化,引入了更多的技术组件,这其中就有Oozie.算法
在这以前公司使用的调度工具主要是TaskCtl和Kettle,TaskCtl分为三层,Manage,Server和Agent.sql
能够理解为将调度分层了.shell
TASKCTL主要能够完成串行、并行、依赖、互斥、执行计划、定时、容错、循环、条件分支、远程、负载均衡、自定义条件等各类不一样的核心调度功能。数据库
根据不一样的功能分类,TASKCTL将客户端分为Admin(平台管理)、Designer(流程集成开发环境)、Monitor(流程监控管理)三套不一样的软件。
Admi:平台节点管理、任务类型管理、工程管理、应用设置、全局变量管理以及流程导入导出等功能。
Designer:平台流程代码信息管理、代码设计编辑、流程图形编辑、规则语法适时检测功能以及编译发布等功能。
Monitor:图形方式监控、多角度统计监控、流程起停重置、任务锁定、任务重作、信息对象查询等。
TaskCtl最大的问题是做为调度系统须要一台单独的调度服务器,而且和Hadoop生态圈的产品搭配不是很好,因此考虑另行办法在Hadoop集群上使用调度工具.
使用Oozie的缘由是由于公司使用的是Ambari集群管理工具,自带Oozie插件安装,同时Oozie支持Java API调度,会在工做中用到Java语言的缘故,选择了Oozie.
oozie是一个workflow(工做流)协调系统,是由Cloudera公司贡献给Apache的,主要用来管理Hadoop做业(job).属于web应用程序,由oozie client和oozie server两个组件构成.
oozie server运行于java servlet容器(tomcat)中的web程序.
①对于较为复杂的Hadoop做业系统来讲,单纯的依靠shell脚本方式,手工方式调度是的流程更加难以控制.
②复杂系统的算法须要不少不一样的做业(如mr,Java程序,shell脚本,hivesql,sqoop,spark等)按照特定的顺序,串行并行,不一样时间,不一样条件进行执行,就须要oozie这样的调度系统作支撑,将复杂问题简单化.
①将hadoop生态系统中常见的mr任务启动,hdfs操做,shell调度,hive操做等经过统一的方式进行连贯调度.
②将复杂的依赖关系,时间触发,事件触发使用xml语言进行表达,提升开发效率.
③一组任务使用一个DAG(有向无环图)来表示,图形化的表达,流程逻辑更加清晰.
④支持不少种任务调度,能完成大部分的hadoop任务处理.
⑤程序定义支持EL常量和函数,写过shell脚本的小伙伴使用根本没难度.
在网上找了一个oozie架构图,以下:
oozie包含四大服务组件:
workflow: 用于支持动做有向无环图(DAG)的设计和执行,能够按照特定的顺序执行mr,hive和shell等节点.
coordinator: 用于定时调度特定的 workflow 进行执行,能够基于事件,资源存在,传递参数等自动执行.
bundle: 批量设定一组coordinator执行.
SLA(Service Level Agreement, oozie服务器等级协定): 用于程序执行过程的日志跟踪.
如上图,oozie调度自己就是一个mr程序,开始,执行,结束或者失败,简单易懂.
因此咱们能够思考一下,在oozie调度mr程序时,其实同一时间是运行了两个mr的,一个是调度自己,一个是任务.
任务自己是一个有向无环图(DAG)
图中fork标签后面的 MR job 和 Hive job 是并行执行的,都成功后经过 join 节点合并.
coordinator是一个定时服务,经过定时来固定频率的执行任务,这里的功能相似crontab.
bundle的做用就是设定多个coordinator定时服务按批次执行,这样使得多个任务也造成一个DAG.
单独安装: 须要安装server端和client端
组件安装: 使用Ambari进行oozie组件添加(可使用HA)
注意:若是使用CDH集群管理工具,也是一键配置,由于我是直接组件式安装,这里就不细讲了,有须要的小伙伴能够联系我,看状况写一下ambari配置oozie.
节点内存配置:
这里的节点内存配置可能会涉及到oozie调度阻塞的问题,这个在以后有时间整理一下整个问题现象以及解决办法,这里就看一下
#(节点并发),决定了你能够同时执行几个action oozie.service.callablequeueservice.callable.concurrency #(队列大小) oozie.service.callablequeueservice.queue.size #(扩展)一些扩展相关 oozie.service.ActionService.executor.ext.classes
ambari配置oozie元数据
Ambari默认数据库为Derby.
咱们配置时,无特殊需求状况下,通常默认选择mysql
选择数据库类型,库名,用户名,url链接串,驱动,密码
测试链接成功便可.
进入oozie文件夹
将ext-2.2.tar.gz解压放到./libext/ext-2.2目录下
这里有时候会出现oozieUI界面没法访问问题,以后更新一篇文章,简单说明一下.
状态 | 含义说明 |
---|---|
PREP | 一个工做流Job第一次建立将处于PREP状态,表示工做流Job已经定义,可是没有运行。 |
RUNNING | 当一个已经被建立的工做流Job开始执行的时候,就处于RUNNING状态。它不会达到结束状态,只能由于出错而结束,或者被挂起。 |
SUSPENDED | 一个RUNNING状态的工做流Job会变成SUSPENDED状态,并且它会一直处于该状态,除非这个工做流Job被从新开始执行或者被杀死。 |
SUCCEEDED | 当一个RUNNING状态的工做流Job到达了end节点,它就变成了SUCCEEDED最终完成状态。 |
KILLED | 当一个工做流Job处于被建立后的状态,或者处于RUNNING、SUSPENDED状态时,被杀死,则工做流Job的状态变为KILLED状态。 |
FAILED | 当一个工做流Job不可预期的错误失败而终止,就会变成FAILED状态。 |
我是鲁边, 2020 peace and love
别惊讶,今年的主题就是爱与和平,希望我能一直用下去...
按例按例,个人我的公众号:鲁边社,欢迎关注