任务调度框架Azkaban Flow1.0和Azkaban Flow2.0

一、Azkaban Flow1.0简介

Azkaban 主要通过界面上传配置文件来进行任务的调度。它有两个重要的概念:

  • Job: 你需要执行的调度任务;
  • Flow:一个获取多个 Job 及它们之间的依赖关系所组成的图表叫做 Flow。

目前 Azkaban 3.x 同时支持 Flow 1.0 和 Flow 2.0。

二、Azkaban Flow1.0基本任务调度

2.1 新建项目
在 Azkaban 主界面可以创建对应的项目:
在这里插入图片描述
2.2 任务配置
新建任务配置文件 Hello-Azkaban.job,内容如下。这里的任务很简单,就是输出一句 ‘Hello Azkaban!’ :

#command.job
type=command
command=echo ‘Hello Azkaban!’

2.3 打包上传
将 Hello-Azkaban.job 打包为 zip 压缩文件:
在这里插入图片描述

通过 Web UI 界面上传:
在这里插入图片描述
上传成功后可以看到对应的 Flows:
在这里插入图片描述
2.4 执行任务
点击页面上的 Execute Flow 执行任务:
在这里插入图片描述
2.5 执行结果
点击 detail 可以查看到任务的执行日志:
在这里插入图片描述

三、Azkaban Flow1.0多任务调度

在这里插入图片描述
在这里插入图片描述
其他的步骤与标题二的是一样的。

四、Azkaban Flow1.0调度HDFS作业

步骤与上面的步骤一致,这里以查看 HDFS 上的文件列表为例。命令建议采用完整路径,配置文件如下:

type=command
command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop fs -ls /

在这里插入图片描述

五、Azkaban Flow1.0调度MR作业

MR 作业配置:

type=command
command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop jar /usr/app/hadoop-2.6.0-cdh5.15.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.2.jar pi 3 3

在这里插入图片描述

六、Azkaban Flow1.0调度Hive作业

作业配置:

type=command
command=/usr/app/hive-1.1.0-cdh5.15.2/bin/hive -f 'test.sql'

其中 test.sql 内容如下,创建一张雇员表,然后查看其结构:

CREATE DATABASE IF NOT EXISTS hive;
use hive;
drop table if exists emp;
CREATE TABLE emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
-- 查看 emp 表的信息
desc emp;

打包的时候将 job 文件与 sql 文件一并进行打包:
在这里插入图片描述

执行结果如下:

在这里插入图片描述

七、Azkaban Flow1.0在线修改作业配置

在测试时,我们可能需要频繁修改配置,如果每次修改都要重新打包上传,这会比较麻烦。所以 Azkaban 支持配置的在线修改,点击需要修改的 Flow,就可以进入详情页面:
在这里插入图片描述
在编辑页面可以新增配置或者修改配置:
在这里插入图片描述

八、Azkaban Flow 2.0 简介

Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用 Flow 2.0,因为 Flow 1.0 会在将来的版本被移除。Flow 2.0 的主要设计思想是提供 1.0 所没有的流级定义。用户可以将属于给定流的所有 job / properties 文件合并到单个流定义文件中,其内容采用 YAML 语法进行定义,同时还支持在流中再定义流,称为为嵌入流或子流。

九、Azkaban Flow 2.0简单任务调度

9.1 任务配置
新建 flow 配置文件:

nodes:
  - name: jobA
    type: command
    config:
      command: echo "Hello Azkaban Flow 2.0."

在当前的版本中,Azkaban 同时支持 Flow 1.0 和 Flow 2.0,如果你希望以 2.0 的方式运行,则需要新建一个 project 文件,指明是使用的是 Flow 2.0:

azkaban-flow-version: 2.0

9.2 打包上传
在这里插入图片描述
9.3 执行结果
由于在 1.0 版本中已经介绍过 Web UI 的使用,这里就不再赘述。对于 1.0 和 2.0 版本,只有配置方式有所不同,其他上传执行的方式都是相同的。执行结果如下:
在这里插入图片描述

十、Azkaban Flow 2.0多任务调度

和 1.0 给出的案例一样,这里假设我们有五个任务(jobA——jobE), D 任务需要在 A,B,C 任务执行完成后才能执行,而 E 任务则需要在 D 任务执行完成后才能执行,相关配置文件应如下。可以看到在 1.0 中我们需要分别定义五个配置文件,而在 2.0 中我们只需要一个配置文件即可完成配置。

nodes:
  - name: jobE
    type: command
    config:
      command: echo "This is job E"
    # jobE depends on jobD
    dependsOn: 
      - jobD
    
  - name: jobD
    type: command
    config:
      command: echo "This is job D"
    # jobD depends on jobA、jobB、jobC
    dependsOn:
      - jobA
      - jobB
      - jobC

  - name: jobA
    type: command
    config:
      command: echo "This is job A"

  - name: jobB
    type: command
    config:
      command: echo "This is job B"

  - name: jobC
    type: command
    config:
      command: echo "This is job C"

十一、Azkaban Flow 2.0内嵌流

Flow2.0 支持在一个 Flow 中定义另一个 Flow,称为内嵌流或者子流。这里给出一个内嵌流的示例,其 Flow 配置如下:

nodes:
  - name: jobC
    type: command
    config:
      command: echo "This is job C"
    dependsOn:
      - embedded_flow

  - name: embedded_flow
    type: flow
    config:
      prop: value
    nodes:
      - name: jobB
        type: command
        config:
          command: echo "This is job B"
        dependsOn:
          - jobA

      - name: jobA
        type: command
        config:
          command: echo "This is job A"

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zouyang920/article/details/130406409