Azkaban工作流调度器

  • 一个完整的数据分析系统通常都是由大量任务单元组成;
    • shell脚本程序、java程序、mapreduce程序、hive脚本等
  • 各任务单元之间存在时间先后及前后依赖关系

  • 为了==很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行==

  • Azkaban是由Linkedin开源的一个==批量工作流任务调度器==。用于在一个工作流内以一个特定的顺序运行一组工作和流程。

  • Azkaban定义了一种==KV文件(properties)格式==来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

azkaban.github

  • 功能特点
    • 提供功能清晰、简单易用的web UI界面
    • 提供job配置文件快速建立任务和任务之间的关系
    • 提供模块化的可插拔机制,原生支持command、java、hive、hadoop
    • 基于java开发,代码结构清晰,易于二次开发

基础架构

azkaban

  • Azkaban由三部分构成

    • 1、==Azkaban Web Server==

      • 提供了Web UI,是azkaban的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。

      • 2、==Azkaban Executor Server==

        • 负责具体的工作流和任务的调度提交
    • ==Mysql==

      • 用于保存项目、日志或者执行计划之类的信息

运行模式

  • 1、solo server mode(单机模式)
H2
web server 和 executor server运行在一个进程里
最简单的模式,数据库内置的H2数据库,管理服务器和执行服务器都在一个进程中运行,任务量不大项目可以采用此模式。
  • 2、two server mode
web server 和 executor server运行在不同的进程
数据库为mysql,管理服务器和执行服务器在不同进程,这种模式下,管理服务器和执行服务器互不影响。

  • 3、multiple executor mode
web server 和 executor server运行在不同的进程,executor server有多个
该模式下,执行服务器和管理服务器在不同主机上,且执行服务器可以有多个。

示例

command类型单一job

  • 1、==创建job描述文件 以.job后缀结尾==
    • 创建 command.job 文件
#command.job
type=command
command=echo 'hello azkaban......'
  • 2、将job资源文件打包成zip文件
  • 例如

    • command.zip
  • 3、通过azkaban的web管理平台创建project并上传job压缩包

create_project

upload_zip

  • 3、点击运行

execute-flow

execute

  • 4、运行完成

success

多job工作流

  • 1、创建有依赖关系的多个job描述

    • 第一个job:start1.job
    #start1.job
    type=command
    command= echo 'start1...start1...'
    
    • 第二个job:start2.job 它依赖start1.job
    #start2.job
    type=command
    dependencies=start1
    command= echo 'start2...start2...'
    
  • 2、将job资源文件打包成zip文件

    • start12.zip

    start12job

  • 3、创建工程,上传zip包,最后启动工作流

execute-start12

  • ==补充==
    • 如果一个job有多个依赖的job,可以使用逗号隔开
例如: 
#start1.job
type=command
command= echo "start1 job"

#start2.job
type=command
command= echo "start2 job"

#stop.job
type=command
denpendencies=start1,start2
command=echo "stop job"

注意:有多个依赖的job,用逗号隔开

HDFS操作任务

  • 1、创建job描述文件

    • vim fs.job
    #fs.job
    type=command
    command=echo "start execute"
    command.1=/kfly/install/hadoop-2.6.0-cdh5.14.2/bin/hdfs dfs -mkdir /azkaban
    command.2=/kfly/install/hadoop-2.6.0-cdh5.14.2/bin/hdfs dfs -put /home/hadoop/source.txt /azkaban
    
  • 2、将job资源文件打包成zip文件

    • fs.zip
  • 3、创建工程,上传zip包,最后启动工作流

fs

fs-hdfs

MAPREDUCE任务

  • MR任务依然可以使用command的job类型来执行

  • 1、创建job描述文件,及mr程序jar包

    • 示例中直接使用hadoop自带的example jar
    • hdfs dfs -mkdir -p /wordcount/in
    #mr.job
    type=command
    command=/kfly/install/hadoop-2.6.0/bin/hadoop  jar hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar wordcount /wordcount/in /wordcount/out
    
  • 2、将job资源文件打包成zip文件

    • mr.zip
  • 3、创建工程,上传zip包,最后启动工作流

mr

HIVE脚本任务

  • 1、 创建job描述文件和hive脚本

    • Hive脚本: test.sql
    use default;
    create table if not exists test_azkaban(id int,name string,address string) row format delimited fields terminated by ',';
    load data local inpath '/home/hadoop/azkaban/test.txt' into table test_azkaban;
    create table if not exists countaddress as select address,count(*) as num from test_azkaban group by address ;
    
    insert overwrite local directory '/home/hadoop/azkaban/out' select * from countaddress; 
    
    • 准备数据

      • vim /home/hadoop/azkaban/test.txt
      1,zhangsan,shanghai
      2,lisi,beijing
      3,xiaoming,shanghai
      4,xiaozhang,shanghai
      5,xiaogang,beijing
      
  • 2、创建job描述文件

    • hive.job
    # hive.job
    type=command
    command=/kkb/install/hive-1.1.0-cdh5.14.2/bin/hive -f 'test.sql'
    
  • 3、将job资源文件打包成zip文件

    • hive.zip

任务定时调度

  • 在启动工作流的时候,可以点击==Schedule==,实现定时调度一个工作流

schedule1

schedule2

webUI 传递参数

  • 可以通过webUI动态给job传递参数

  • 1、创建一个job的描述文件

    • parameter.job

      #parameter.job
      type=command
      parameter=${param}
      command= echo ${parameter}
      
    • 其中

      • ==${param}== 表示解析页面传递的参数param的值,通过声明一个变量parameter去接受
      • ==${parameter}==表示获取该parameter变量的值
  • 2、将job资源文件打包成zip文件

    • parameter.zip
  • 3、创建工程,上传zip包,最后启动工作流,并且设置参数

1572232468448

  • 4、运行完成后的结果

    1572232525618