Azkaban介绍

  Azkaban是在LinkedIn上创建的用于运行Hadoop作业的批处理工作流作业调度程序。Azkaban通过工作依赖性解决订购问题,并提供易于使用的Web用户界面来维护和跟踪您的工作流程。
  Azkaban的设计首先考虑了可用性。它已经在LinkedIn上运行了几年,并驱动了许多Hadoop和数据仓库流程。
  官网地址:https://azkaban.github.io/
  官网Doc:https://azkaban.readthedocs.io/en/latest/getStarted.html#

特性

  • 与任何版本的Hadoop兼容
  • 易于使用的Web UI
  • 简单的Web和HTTP工作流程上传
  • 项目工作区
  • 安排工作流程
  • 模块化且可插入
  • 认证与授权
  • 跟踪用户动作
  • 通过电子邮件通知失败和成功
  • SLA警报和自动终止
  • 重试失败的作业
    在这里插入图片描述

架构

在这里插入图片描述
  Azkaban由三个关键组件构成:

  1. AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。
  2. AzkabanExecutorServer:负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行。
  3. 关系型数据库(MySQL):存储大部分执行流状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。

安装

下载

  官网下载地址:https://azkaban.github.io/downloads.html
  编译好的:https://github.com/azkaban/azkaban/releases
  官网下载的是源码包,需要自己手动编译,或者去下载已经编译好的版本,主要是三个包:

  • azkaban-web-server-版本号.tar.gz
  • azkaban-executor-server-版本号.tar.gz
  • azkaban-sql-script-版本号.tar.gz

编译

  从官网或者GitHub下载的代码是源码,需要手动编译,Azkaban是使用Gradle而不是maven做依赖管理的,Gradle的安装使用可以参考:Gradle – 安装Gradle并集成到IDEA
  按照上面博客将Gradle安装集成到IDEA后,就可以进行编译工作了,这里提醒一句,一定要把镜像地址改成国内镜像,不然编译时下载依赖很可能会超时下不来。 编译的话,可以在Linux服务器环境使用命令编译,也可以在Windows系统使用工具编译,我就是在windows环境编译了,我直接在源码包下使用gradle命令编译,中间还是出了点问题,所以我是在IDEA中编译的。

Linux类系统编译

  类Linux系统编译,官网也是给了说明,如下:
在这里插入图片描述

Windows系统编译

  Windows系统编译,我是使用IDEA,打开源码的build.gradle,打开为project,然后我们在在IDEA的控制台输入gradlew build、gradlew clean、gradlew installDist,之后就等着下载依赖和编译吧,中间过程大概10-20分钟。
在这里插入图片描述
  编译结束后,我们主要关注如下三块,db(元数据检表语句)、exec-server(执行器)、web-server(调度器),我们可以将这三部分的build/install下的azkaban-exec-server和azkaban-web-server文件夹打包或者直接上传到服务器,这里注意,如果是直接上传服务器,需要手动给bin目录下的sh脚本赋可执行权限,不然启动报错。
在这里插入图片描述
在这里插入图片描述

安装

  将文件夹或者打好的包上传到服务器后,我们需要修改一些配置,这里我把文件夹改了下名字,azkaban-web-server改成了server,azkaban-executor-server改成了executor。
在这里插入图片描述

初始化元数据

  需要安装MySQL,分配用户和权限,这里就不再介绍了。然后找到db模块下的build/install/azkaban-db文件夹下的create-all-sql的脚本文件,去数据库中初始化元数据。
在这里插入图片描述

安装配置executor

在这里插入图片描述

  1. 进入executor/conf目录下,修改azkaban.properties,修改mysql连接、用户名、密码信息即可。
  2. 在之前的版本,应该是3.0之前,除了要修改mysql信息外,还需要配置ssl,但是3.0之后是不需要了,就改mysql连接信息就可以了。
  3. 启动executor,./bin/start-exec.sh
  4. 在3.x版本,启动了executor之后,还需要激活executor,否则web-server检测不到。激活executor只需要curl一下这个地址,或者浏览器访问下这个地址即可。其中localhost和port需要改为对应的地址和端口,至于端口号,在启动后会有一个executor.port的文件,cat一下可以看到此端口号,然后请求下面路径即可。
curl -G "http://localhost:port/executor?action=activate"
//或者浏览器直接访问:
http://localhost:port/executor?action=activate

在这里插入图片描述
在这里插入图片描述
5. 激活后就算启动完成了,可以jps看下

在这里插入图片描述

安装配置web-server

在这里插入图片描述

  1. 进入server/conf目录下,修改azkaban.properties,修改mysql连接、用户名、密码信息即可。
  2. 和上面一样,不再不需要配置ssl了。
  3. 启动server,./bin/start-web.sh
  4. 启动后去页面验证,默认端口8081
    在这里插入图片描述
  5. 默认有两个用户,在server/conf/azkaban-users.xml中配置,也可以自己添加用户
    在这里插入图片描述

使用

使用说明

  Azkaban的任务是以job文件为单位的,一个job文件一个任务,然后把所有任务打成一个zip包在页面上传,之后可以执行也可以定时执行。
  Azkaban内置的任务类型支持command、java,虽然只有两种,但是一个command其实就几乎代替了所有类型。。。

单任务

  1. 创建job描述文件,vim first.job
#first.job
type=command
command=echo 'this is my first job'
  1. 将job资源文件打包成zip文件,在webUI上传
    在这里插入图片描述
    在这里插入图片描述
  2. 单一执行或者调度执行
    在这里插入图片描述
  3. 查看结果
    在这里插入图片描述

多任务

  1. 创建多job,通过dependencies字段配置依赖关系。
#first.job
type=command
command=echo 'first job'
#second.job
type=command
command=echo 'second job'
dependencies=first
#third.job
type=command
command=echo 'third job'
dependencies=first
#fourth.job
type=command
command=echo 'fourth job'
dependencies=second,third
  1. 将job资源文件打包成zip文件,在webUI上传
  2. 执行
    在这里插入图片描述
  3. 查看结果
    在这里插入图片描述

调度Java、MapReduce、Hive、Spark等

  和上面的一样的道理,可以使用java -jar命令提交或者spark-submit提交,反正就是写好job文件,写好提交命令,一样打成zip包提交,执行或者调度执行就好。

二次开发

  因为我司需求想集成一个调度框架,对于azkaban我们就需要web应用通过api来操作任务、调度任务、查看任务等等,所以我们在官方api纸上还需要包装下通用api。

官方API

  官方API文档地址:https://azkaban.readthedocs.io/en/latest/ajaxApi.html

开源的包装好的API

  封装好的API,GitHub地址:https://github.com/shirukai/azkaban-java-api.git

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐