刚刚了解了分布式应用程序的协调服务zookeeper,我们现在来了解一下工作流任务调度系统,就是作业协调的工具。主要了解两个主要产品oozie和azkaban。
一、Oozie
1、oozie本质就是一个作业协调的工具(底层原理是通过将xml语言转化成MapReduce程序来做,但只是集中在map端做处理,避免shuffle过程)。
2、主要概念:
① workflow:工作流,有我们需要处理的每个工作组成,进行需求的流式处理
② coordinator:协调器,可以理解为工作流的协调器,可以将多个工作流协调成一个工作流来进行处理
③ bundle: 束,将一堆coordinator进行汇总处理
简单来说,workflow是对要进行顺序化的工作的抽象,coordinator是对要进行顺序化的workflow的抽象,bundle是对一堆coordinator的抽象
3、oozie的作业由三部分组成:job.properties,workflow.xml,lib
job.properties是用来配置job中各种用到的参数
workflow.xml是定义任务的整体流程的文件,需要注意的有三点:版本信息,EL函数,节点信息。workflow.xml文件需要被放置在HDFS上才能被oozie调度,如果启动需要调动MR任务,jar包同样需要在HDFS上。
oozie的节点分为两种:流程控制节点和动作节点。①流程控制节点一般都是定义在工作流开始或者结束的位置,比如:start,end,kill等,以及提供工作流执行路径机制,比如:decision,fork,join等。②动作节点是负责执行具体动作的节点,比如拷贝文件,执行某个shell脚本等。
lib是在workflow工作流定义的同级目录下,需要一个lib目录,在lib目录中存在MapReduce使用的jar包。需要注意的是,oozie并不是使用指定的jar包启动任务的,而是通过指定主类来启动任务的。在lib包中绝对不能存在某个jar包的不同版本和不能够出现多个相同的主类
4、oozie的最终目录结构如下:
/xxx/oozie/workflow.xml
/xxx/oozie/lib
/xxx/oozie/lib/mr-1.7-SNAPSHOT-package.jar
/xxx/oozie/lib/xxx.mr-1.7-SNAPSHOT-package.jar
二、Azkaban
1、azkaban是由linkedin公司推出的批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程。它的配置通过简单的key:value对的方式,通过配置中的dependencies来设置依赖关系,这个依赖必须是无环的,否则会被视为无效的工作流。azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
2、azkaban主要由三个关键组件组成:关系型数据库(MySQL)、AzkabanWebServer、AzkabanExecutorServer。
(1)azkaban使用数据库存储大部分状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库
(2)AzkabanWebServer是azkaban工作流系统的主要管理者,它负责project的管理、用户登录认证、定时执行工作流、跟踪工作流执行进度等一系列任务。同时,它还提供Web服务操作的接口,利用该接口,用户可以使用curl或其他ajax的方式,来执行azkaban的相关操作。操作包括:用户登录,创建project、上传workflow、执行workflow、查询workflow的执行进度、杀掉workflow等一系列操作,且这些操作的返回结果均是json的格式。并且azkaban使用方便,azkaban使用以.job为后缀名的键值属性文件来定义工作流中的各个任务,以及使用dependencies属性定义作业间的依赖关系链。这些作业文件和关联的代码最终以*.zip的方式通过azkaban UI传到web服务器上。
(3)AzkabanExecutorServer主要负责具体的工作流的提交、执行,可以启动多个执行器,它通过mysql数据库来协调任务的执行。目前Azkaban将AzkabanExecutor分离成独立的服务器,这样方便某个任务流失败后,可以更方便的将其重新执行和便于Azkaban的升级。
原文:https://www.cnblogs.com/qugemingzihaonan13/p/9872406.html