Azkaban is a batch workflow job scheduler created at LinkedIn to run Hadoop jobs. Azkaban resolves the ordering through job dependencies and provides an easy to use web user interface to maintain and track your workflows.
特点
- 兼容任何版本的hadoop。(Oozie依赖于hadoop)
- 有易于使用的web界面
- 简单的工作流上传
- 方便设置任务之间的关系
- 调度工作流
- 模块化和可插拔的插件机制
- 认证/授权(权限的工作)。任务提交上去之后,并不是所有人都能查看或修改。
- 能够杀死并重启工作流
- 有关失败和成功的电子邮件提醒
三大组件
- azkaban webServer。是整个azkaban工作流系统的主要管理者,包括用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。
- azkaban executor server。负责具体的工作流的提交和执行,通过mysql来协调任务的执行。
- mysql:存储大部分执行流状态,azkaban WebServer和executorServer都需要访问mysql
安装配置
- 下载azkaban:
https://github.com/azkaban/azkaban/releases/tag/3.86.0
下载azkaban-3.86.0.tar.gz
- 将文件解压
执行命令:./gradlew build installDist -x test
。如果无法下载:可以访问http://services.gradle.org/distributions/
下载对应的包,把zip压缩包拷贝进入~/.gradle/wrapper/dists/gradle-4.6-all/bcst21l2brirad8k2ben1letg
,然后执行gradlew clean即可。 - 这一个过程中会下载很多依赖包。文末有gradle依赖,以及编译好的azkaban 3.86版本。直接解压就可以使用
Start the solo server
修改azkaban-3.86.0/azkaban-solo-server/build/install/azkaban-solo-server/conf/azkaban.properties
文件的时区:
default.timezone.id=Asia/Shanghai
执行
# 一定要在azkaban更目录运行,它的配置文件默认是相对路径
cd azkaban-solo-server/build/install/azkaban-solo-server
bin/start-solo.sh
默认端口是8081,可以在azkaban.properties
中进行修改
用户名和密码都是azkaban
。
创建简单job任务
创建format.job
type=command
# 必须使用绝对路径,指定脚本位置
command=sh /home/iie4bu/shell/azkaban/job/format.sh
同时创建format.sh
:
#!/bin/bash
echo "format job start...."
head /home/iie4bu/data/sales.csv
将format.job
进行压缩:zip -r format.zip format.job
然后进行上传:
执行job
点击前面的序号3,进入job,查看joblist
查看log:
可以看到脚本的输出内容。
如何在job中指定shell的相对路径
新建clean.sh:
#!/bin/bash
date >> /home/iie4bu/date.txt
新建clean.job
type=command
# 相对路径
command=sh clean.sh
将这两个文件压缩到一起:
将clean.zip文件上传至azkaban运行就可以了。
处理复杂的shell工作流程
first.job内容:
type=command
command=echo 'first'
second.job内容:
type=command
command=echo 'second'
dependencies=first
third.job内容:
type=command
command=echo 'third'
dependencies=first
fourth.job内容:
type=command
command=echo 'fourth'
dependencies=second,third
将这四个job压缩成一个zip包:
将jobs.zip上传到azkaban:
执行这个工作流程:
处理java Job
新建一个Extract.java:
public class Extract {
public static void main(String[] args) throws FileNotFoundException {
// 往文件里写数据
}
}
将这个文件进行package。生成mockdata-1.0-SNAPSHOT-jar-with-dependencies.jar
新建java.job:
type=javaprocess
Xms=1024M
Xmx=2048M
java.class=ETL.Extract
classpath=./mockdata-1.0-SNAPSHOT-jar-with-dependencies.jar
将这两个文件压缩成java.zip:
上传至azkaban,然后执行即可。
Java process jobs 是一个方便启动java程序的容器。它等价于从命令行执行一个class的main方法。下面介绍在javaprocess jobs中的可用属性:
Property | Required? | Meaning | Example |
---|---|---|---|
java.class | required | 包含main方法的class | com.org.baidu |
classpath | 可选 | 一个用逗号隔开的JAR文件的列表并且目录要被添加到classpath下。如果没有设置,它将会把working目录下的所有JAR文件都添加到classpath下面 | common-io.jar,hello.jar |
Xms | 可选 | 启动JVM时初始化内存池大小。默认64M | 64M |
Xmx | 可选 | 内存池最大值。默认为256M | 1024M |
main.args | 可选 | 传入到java main方法中的以逗号分隔的参数列表 | arg1,arg2 |
jvm.args | 可选 | 设置JVM的参数。整个字符串被完整传入作为VM的参数 | -Dmyprop=test -Dhello=world |
working.dir | 可选 | 从command jobs继承 | /home/job |
env.property | 可选 | 从command jobs继承 | env.MY_ENV_VARIABLE=testVariable |
gradle和azkaban编译结果
链接:https://pan.baidu.com/s/1MgJTkIjxGnWf779iyPQS2g
提取码:n7fp