首先介绍下 Azkaban 中 project、flows、job 之间的关系:一个 project 中可 以包含一个或者多个 flows,一个 flows 包含多个 job。这里的 job 是在 Azkaban 中 运行的一个进程,可以是简单的 linux 命令、shell 脚本、sql 脚本等。一个 job 可以 依赖于另一个 job,这种多个 job 之间的依赖关系组成 flow,也就是任务流。

1.设计工作流程

假设现在有 5 个 job,分别是 job1、job2、job3、job4、job5。每个 job 都执 行一个 shell 脚本。job3 依赖与 job1 和 job2 执行的结果,job4 依赖于 job3 执行 的结果,job5 依赖于 job4 执行的结果。 针对以上这个任务需求,我们可以设计一个任务流(flow),这个任务流中有 5 个 job,按照上述 job 依赖的关系,可以编写一个简单的任务流程提交到 Azkaban 中进行 调度执行。

2.编写各阶段 Job

编写 job 非常容易,需要创建一个以”.job”结尾的文本文件,文件中书写格式如 下:

type=command
command= 需要执行的脚本或命令

type=command 是告诉 Azkaban 使用 unix 原生命令去运行命令或者脚本, command=“xxx”就是指定当前 job 需要执行的命令或者脚本,如果当前 job 依赖于其 他的 job,只需要在这个文本文件后面加上“dependencies=依赖的 job 名称”即可, 依赖的 job 只需要写名称,不需要写出后缀“job”。
为了方便演示以上工作流程,这里设计的每个 job 都调起 linux 上的一个脚本,脚 本中就使用简单的 echo 打印一些信息供参看,5 个 job 及对应的脚本设置内容如下:

  1. 编写 job 任务

job1.job

type=command
command=sh /root/test/

job2.job

type=command
command=sh /root/test/

job3.job

type=command
command=sh /root/test/
dependencies=job1,job2

job4.job

type=command
command=sh /root/test/
dependencies=job3

job5.job

type=command
command=sh /root/test/
dependencies=job4

以上 job 任务的编写可以在本地 window 环境中编写,编写完成后需要将 5 个 job 压缩到一个压缩文件中,后期提交到 Azkaban 中执行。

  1. 编写脚本内容

echo "开始执行第一个任务"
echo "正在执行"
echo "第一个任务执行完成"

echo "开始执行第二个任务"
echo "正在执行"
echo "第二个任务执行完成"

echo "开始执行第三个任务"
echo "正在执行"
echo "第三个任务执行完成"

echo "开始执行第四个任务"
echo "正在执行"
echo "第四个任务执行完成"

echo "开始执行第五个任务"
echo "正在执行"
echo "第五个任务执行完成"

3.配置工作流并执行

Azkaban 中任务提交时,必须将所有 job 文件压缩到一个 zip 文件中再提交到 Azkaban 中执行。首先将以上 5 个 job 压缩到一个 zip 文件中,然后登陆 Azkaban,点 击右上角的 Create Project 创建一个项目:
Azkaban 构建工作流_文本文件
在弹出的框中填写项目名称及项目描述:
Azkaban 构建工作流_依赖关系_02
点击 Create Project,点击 upload,上传压缩好的任务:
Azkaban 构建工作流_运维_03
上传完成之后,查看任务流,Azkaban 默认 Flow 名称是以最后一个没有依赖的 job 定义的:
Azkaban 构建工作流_linux_04
点击 Execute Flow 可以看到任务流的详细依赖关系:
Azkaban 构建工作流_linux_05
点击 Execute 执行任务。

如果想要每隔一段时间执行一次任务,可以点击 Schedule,配置定时任务,配置好 时间之后,点击 Schedule 调度即可。如图示:
Azkaban 构建工作流_bash_06

4.工作流执行监控

执行任务完成之后,会自动跳转到执行成功界面:
Azkaban 构建工作流_运维_07
可以点击 Job List 来查看详细 job 的执行先后顺序:
Azkaban 构建工作流_运维_08
还可以通过点击每个 job 的详细信息查看任务执行过程中产生的日志信息: 例如:点击 job2 的 Details 信息,可以看到:
Azkaban 构建工作流_依赖关系_09