一.Azkaban介绍
Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系,这个依赖关系必须是无环的,否则会被视为无效的工作流。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。zkaban的设计首先考虑了可用性。它已经在LinkedIn上运行了几年,并驱动了许多Hadoop和数据仓库流程。知名度比较高的应该是Apache Oozie,但是其配置工作流的过程是编写大量的XML配置,而且代码复杂度比较高,不易于二次开发。另外一个应用也比较广泛的调度系统是Airflow,但是其开发语言是Python。
1.选择Azkaban的理由
提供功能清晰,简单易用的Web UI界面
提供job配置文件快速建立任务和任务之间的依赖关系提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop基于Java开发,代码结构清晰,易于二次开发2.适用场景
实际项目中经常有这些场景:每天有一个大任务,这个大任务可以分成A,B,C,D四个小任务,A,B任务之间没有依赖关系,C任务依赖A,B任务的结果,D任务依赖C任务的结果。一般的做法是,开两个终端同时执行A,B,两个都执行完了再执行C,最后再执行D。这样的话,整个的执行过程都需要人工参加,并且得盯着各任务的进度。但是我们的很多任务都是在深更半夜执行的,通过写脚本设置crontab执行。其实,整个过程类似于一个有向无环图(DAG)。每个子任务相当于大任务中的一个流,任务的起点可以从没有度的节点开始执行,任何没有通路的节点之间可以同时执行,比如上述的A,B。总结起来的话,我们需要的就是一个工作流的调度器,而Azkaban就是能解决上述问题的一个调度器。3.架构
Azkaban在LinkedIn上实施,以解决Hadoop作业依赖问题。我们有工作需要按顺序运行,从ETL工作到数据分析产品。最初是单一服务器解决方案,随着多年来Hadoop用户数量的增加,Azkaban 已经发展成为一个更强大的解决方案。Azkaban总共有三个角色:关系型数据库(MySQL)、AzkabanWebServer、AzkabanExecutorServer。Azkaban使用MySQL存储服务状态,AzkabanWebServer和AzkabanExecutorServer都需要访问MySQL的DB数据库以前的Azkaban版本(version 3.0之前)在单个服务器中同时具有AzkabanWebServer和AzkabanExecutorServer功能。此后,执行程序已被分离到单独的服务器中。拆分这些服务的原因有很多:方便的扩展Executor的数量,并在失败的情况下可以恢复。分离以后在对Azkaban升级的时候对用户的使用影响很小。
二.部署环境
本集群azkaban部署模式位分布式安装,webserver在cdh01,executor在cdh01、cdh02、cdh03三台节点,mysql5.7在cdh03,采用的是2.5.0版本。1.注意要点
a.mysql数据库是程序指定的版本5.7,且源码中的jdbc以及url都是5.7格式的,注意mysql版本问题b.Azkaban各版本的sql脚本中的建表语句或许会有所差别,2.5.0与3.73.1版本所建的表相差很大c.Webserver配置文件中注意分布式部署所需要的额外配置语句,下文中会提到d.安装完成后注意启动的脚本选择,默认的脚本选择为start-web.sh,查看此脚本三.Azkaban2.5.0集群安装
1.建立安装路径mkdir /data/soft/Azkaban3.在cdh03安装mysql5.7
进入mysql,并创建azkaban数据库,导入sql脚本mysql -uroot -p123456create database azkaban;use azkaban;source /opt/module/azkaban/azkaban-2.5.0/create-all-sql2.5.0.sql4.生成密钥对和证书(cdh01)
Keytool 是 java 数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。 -keystore 指定密钥库的名称及位置(产生的各类信息将存在.keystore 文件中) -genkey(或者-genkeypair) 生成密钥对 -alias 为生成的密钥对指定别名,如果没有默认是 mykey -keyalg 指定密钥的算法 RSA/DSA 默认是 DSA生成 keystore 的密码及相应信息的密钥库
keytool -keystore keystore -alias jetty - genkey -keyalg RSA5.将 keystore 拷贝到 azkaban web服务器所在目录中
6.Web 服务器配置(cdh01)
进入 azkaban web 服务器安装目录 conf 目录,打开 azkaban.properties 文件7.执行服务器配置(cdh02、cdh03)
进入执行服务器安装目录 conf,打开azkaban.properties8.web 服务器用户配置
在 azkaban web 服务器安装目录 conf 目录,按照如下配置修改 azkaban-users.xml 文件, 增加管理员用户。附:webserver和executor的bin目录和根目录,注意各路径下可能需要自己创建的文件夹
cdh03上:
9.在mysql的azkaban库中的executors表中添加各个执行服务器的ip/域名和端口
四.启动服务
先启动exec-server(执行器),然后启动web-server(web服务)可以直接执行azkaban-executor-start.sh 和 Azkaban-web-start.sh启动成功后打开页面:https://cdh01:8443/https://190.168.3.60:8443/
精彩评论