• 任务调度器之Azkaban的使用


    Azkaban概述

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

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

    官网 : https://azkaban.github.io/

    安装Azkaban

    下载

    wget https://github.com/azkaban/azkaban/archive/refs/tags/3.73.0.tar.gz
    
    tar -zxvf 3.73.0.tar.gz 
    
    mv azkaban-3.73.0  azkaban-src
    
    • 1
    • 2
    • 3
    • 4
    • 5

    安装Git

    yum ‐y install git
    yum ‐y install gcc‐c++
    
    [root@administrator program]# git version
    git version 1.8.3.1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改azkaban-src目录下的build.gradle文件,修改allprojects节点配置,指定仓库地址为阿里云仓库

    
    allprojects {
        apply plugin: 'jacoco'
        repositories {
           maven {
        	  	url 'https://maven.aliyun.com/repository/public/'
       	 }
        mavenLocal()
        mavenCentral()
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    开始编译、安装并跳过测试阶段

     cd azkaban/
     
    ./gradlew  build installDist -x test
    
    • 1
    • 2
    • 3

    最后编译成功

    BUILD SUCCESSFUL in 4m 52s
    82 actionable tasks: 76 executed, 6 from cache
    
    • 1
    • 2

    编译后得到以下文件

    # azkaban-web-server页面显示服务
    [root@administrator azkaban-src]# ls azkaban-web-server/build/distributions/
    azkaban-web-server-0.1.0-SNAPSHOT.tar.gz  azkaban-web-server-0.1.0-SNAPSHOT.zip
    
    # azkaban-solo-server
    [root@administrator azkaban-src]# ls azkaban-solo-server/build/distributions/
    azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz  azkaban-solo-server-0.1.0-SNAPSHOT.zip
    
    #  azkaban-exec-server任务执行服务
    [root@administrator azkaban-src]# ls azkaban-exec-server/build/distributions/
    azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz  azkaban-exec-server-0.1.0-SNAPSHOT.zip
    
    # two server模式需要的C程序
    [root@administrator azkaban-src]# ls az-exec-util/src/main/c
    execute-as-user.c
    
    # 数据库脚本
    [root@administrator azkaban-src]# ll azkaban-db/build/install/azkaban-db/
    总用量 112
    -rw-r--r-- 1 root root 12022 312 13:33 create-all-sql-0.1.0-SNAPSHOT.sql
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    单服务模式

    Azkaban的单服务模式使用的是一个单节点模式来进行启动服务,只需要启动安装包即可,所有数据保存在H2内存中。

    准备

    azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
    
    • 1

    解压

    解压azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz

    tar -zxvf  azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../azkaban
    
    [root@administrator azkaban]# ls
    azkaban-solo-server-0.1.0-SNAPSHOT
    
    • 1
    • 2
    • 3
    • 4

    安装

    修改vim azkaban-solo-server-0.1.0-SNAPSHOT/conf/azkaban.properties文件,保证与Linxu服务器时区一致

    #default.timezone.id=America/Los_Angeles 
    
    default.timezone.id=Asia/Shanghai
    
    • 1
    • 2
    • 3

    修改vim azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes/commonprivate.properties文件

    # set execute-as-user
    execute.as.user=false
    
    # Azkaban对内存要求高,关闭内存检查
    memCheck.enabled=false
    
    • 1
    • 2
    • 3
    • 4
    • 5

    启动solo-server

     cd azkaban-solo-server-0.1.0-SNAPSHOT/
     
     bin/start-solo.sh
    
    [root@administrator azkaban-solo-server-0.1.0-SNAPSHOT]# jps
    22563 AzkabanSingleServer
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    访问Web

    浏览器访问:IP:8081在这里插入图片描述
    登陆,用户名与密码:azkaban在这里插入图片描述

    使用

    创建 Job 描述文件 vim test.job

    type=command
    command=echo "hello world"
    
    • 1
    • 2

    创建一个项目
    在这里插入图片描述
    test.jobjob资源文件打包成test.zipzip文件,并上传
    在这里插入图片描述
    启动执行job
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    两个服务器模式

    准备

    azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
    
    azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
    
    create-all-sql-0.1.0-SNAPSHOT.sql
    
    execute-as-user.c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    初始化数据库

    CREATE DATABASE azkaban;
    
    
    CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
    
    GRANT all privileges ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION;
    
    flush privileges;
    
    use azkaban;
    
    source /usr/local/program/azkaban-src/azkaban-db/build/install/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    解压

    tar -zxvf  azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz   -C ../azkaban
    
    
    tar -zxvf  azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz  -C ../azkaban
    
    [root@administrator azkaban]# ls
    azkaban-exec-server-0.1.0-SNAPSHOT  azkaban-solo-server-0.1.0-SNAPSHOT  azkaban-web-server-0.1.0-SNAPSHOT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    安装SSL安全认证

    安装SSL安全认证,允许使用https的方式访问azkaban的web服务

    [root@administrator azkaban]# keytool -keystore keystore -alias keyalias -genkey -keyalg RSA
    输入密钥库口令:  
    再次输入新口令: 
    您的名字与姓氏是什么?
      [Unknown]:  
    您的组织单位名称是什么?
      [Unknown]:  
    您的组织名称是什么?
      [Unknown]:  
    您所在的城市或区域名称是什么?
      [Unknown]:  
    您所在的省/市/自治区名称是什么?
      [Unknown]:  
    该单位的双字母国家/地区代码是什么?
      [Unknown]:  
    CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
      []:  y
    
    输入 <keyalias> 的密钥口令
            (如果和密钥库口令相同, 按回车):  
    
    Warning:
    JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
    [root@administrator azkaban]# ls
    azkaban-exec-server-0.1.0-SNAPSHOT  azkaban-solo-server-0.1.0-SNAPSHOT  azkaban-web-server-0.1.0-SNAPSHOT  keystore
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    安装Azkaban Web Server

    安装azkaban web server,进入cd azkaban-web-server-0.1.0-SNAPSHOT/conf编辑 vim azkaban.properties

    #default.timezone.id=America/Los_Angeles 
    default.timezone.id=Asia/Shanghai
    
    #jetty.use.ssl=false
    jetty.use.ssl=true
    
    # ssl配置
    jetty.ssl.port=8443
    jetty.keystore=/usr/local/program/azkaban/keystore
    jetty.password=azkaban
    jetty.keypassword=azkaban
    jetty.truststore=/usr/local/program/azkaban/keystore
    jetty.trustpassword=azkaban
    
    # Azkaban mysql settings by default. Users should configure their own username and password.
    database.type=mysql
    mysql.port=3306
    mysql.host=localhost
    mysql.database=azkaban
    mysql.user=azkaban
    mysql.password=azkaban
    mysql.numconnections=100
    
    azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
    #azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
    
    azkaban.activeexecutor.refresh.milisecinterval=10000
    azkaban.queueprocessing.enabled=true
    azkaban.activeexecutor.refresh.flowinterval=10
    azkaban.executorinfo.refresh.maxThreads=10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    安装Azkaban Executor Server

    安装azkaban executor server,进入cd azkaban-exec-server-0.1.0-SNAPSHOT/conf编辑vim azkaban.properties

    #default.timezone.id=America/Los_Angeles 
    default.timezone.id=Asia/Shanghai
    
    #jetty.use.ssl=false
    jetty.use.ssl=true
    
    # ssl配置
    jetty.ssl.port=8443
    jetty.keystore=/usr/local/program/azkaban/keystore
    jetty.password=azkaban
    jetty.keypassword=azkaban
    jetty.truststore=/usr/local/program/azkaban/keystore
    jetty.trustpassword=azkaban
    
    # Where the Azkaban web server is located
    #azkaban.webserver.url=http://localhost:8081
    azkaban.webserver.url=http://localhost:8443
    
    # Azkaban mysql settings by default. Users should configure their own username and password.
    database.type=mysql
    mysql.port=3306
    mysql.host=localhost
    mysql.database=azkaban
    mysql.user=azkaban
    mysql.password=azkaban
    mysql.numconnections=100
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    添加插件

    将编译后的C文件execute-as-user.c拷贝到azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes目录

    cp az-exec-util/src/main/c/execute-as-user.c /usr/local/program/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes
    
    • 1

    生成execute-as-user

    cd azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes
    
    [root@administrator jobtypes]# yum -y install gcc-c++
    
    [root@administrator jobtypes]# gcc execute-as-user.c  -o execute-as-user
    [root@administrator jobtypes]# ls
    commonprivate.properties  execute-as-user  execute-as-user.c
    
    [root@administrator jobtypes]# chown root execute‐as‐user
    
    [root@administrator jobtypes]# chmod 6050 execute-as-user
    
    [root@administrator jobtypes]# ll
    总用量 24
    -rw-rw-r-- 1 root root    44 531 2019 commonprivate.properties
    ---Sr-s--- 1 root root 13536 312 15:33 execute-as-user
    -rw-r--r-- 1 root root  3976 312 15:30 execute-as-user.c
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    修改配置文件

    vim commonprivate.properties 
    
    # set execute-as-user
    execute.as.user=false
    # 关闭内存检测
    memCheck.enabled=false
    # 指定插件存放目录
    azkaban.native.lib=/usr/local/program/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    启动服务

    启动azkaban exec server

    cd azkaban-exec-server-0.1.0-SNAPSHOT
    
    bin/start-exec.sh 
    
    
    [root@administrator azkaban-src]# jps
    24655 AzkabanExecutorServer
    
    
    # 当azkaban-exec-server-0.1.0-SNAPSHOT目录下出现executor.port文件,说明启动成功
    [root@administrator azkaban-exec-server-0.1.0-SNAPSHOT]# ls
    bin  conf  currentpid  executions  executor.port  executorServerLog__2022-03-12+15:57:50.out  lib  logs  plugins  projects  temp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    激活exec-server

    [root@administrator azkaban-exec-server-0.1.0-SNAPSHOT]# curl -G "node01:$(<./executor.port)/executor?action=activate" && echo
    {"status":"success"}
    
    • 1
    • 2

    启动azkaban-web-server

    cd azkaban-web-server-0.1.0-SNAPSHOT/
    
    bin/start-web.sh 
    
    [root@administrator azkaban-src]# jps
    11146 AzkabanWebServer
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    访问Web

    浏览器访问IP:8443
    在这里插入图片描述

    注意:放行端口or关闭防火墙

    systemctl stop firewalld.service
    
    • 1

    使用测试

    单服务模式下的Job资源上传进行测试
    在这里插入图片描述

    任务提交与执行

    Command类型

    1.单一Job的使用

    1.创建 Job 描述文件
    
    2.将job资源文件打包成zip文件
    
    3.创建工程并上传zip压缩包
    
    4.启动工作流flow,执行job
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    创建 Job 描述文件 vim test.job

    type=command
    command=echo "hello world"
    
    • 1
    • 2

    2.多Job的使用

    1.创建有依赖关系的多个job描述
    
    2.将所有job资源文件打到一个zip包中
    
    3.创建工程并上传zip压缩包
    
    4.启动工作流flow,执行job
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    创建 Job 描述文件 vim test1.job

    type=command
    command=echo "test1 hello world"
    
    • 1
    • 2

    创建 Job 描述文件 vim test2.job

    type=command
    command=echo "test2 hello world"
    dependencies=test1
    
    • 1
    • 2
    • 3

    上传后执行时显示依赖关系
    在这里插入图片描述
    执行过程与结果
    在这里插入图片描述

    定时任务

    Azkaban的scheduler功能可以实现对作业任务进行定时调度功能
    在这里插入图片描述
    在这里插入图片描述

    HDFS操作任务

    1.创建job描述文件
    
    2.将job资源文件打包成zip文件
    
    3.创建project并上传job压缩包
    
    4.启动执行该job
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    vim hdfs.job

    type=command
    command=/usr/local/program/hadoop/bin/hdfs dfs -mkdir /azkaban
    
    • 1
    • 2

    在这里插入图片描述

    执行后查看HDFS

    [root@administrator hadoop]# hdfs dfs -ls /
    Found 6 items
    drwxr-xr-x   - root supergroup          0 2022-03-12 18:37 /azkaban
    
    • 1
    • 2
    • 3

    MapReduce任务

    1.下载/usr/local/program/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar文件

    2.创建job描述文件 vim mr.job

    type=command
    command=/usr/local/program/hadoop/bin/hadoop jar hadoop-mapreduce-examples-3.3.2.jar pi 3 5
    
    • 1
    • 2

    3.将所有job资源文件( vim mr.jobhadoop-mapreduce-examples-3.3.2.jar)打到一个zip压缩包中

    4.创建工程并上传zip包,启动job
    在这里插入图片描述

    Hive 脚本任务

    1.准备Hive脚本: hive.sql

    create database if not exists dbazkaban;
    use dbazkaban;
    create table if not exists tbazkaban(id string,name string) row format
    delimited fields terminated by '\t';
    
    • 1
    • 2
    • 3
    • 4

    2.创建job描述文件 hive.job

    type=command
    command=/usr/local/program/hive/bin/hive -f 'hive.sql'
    
    • 1
    • 2

    3.将所有job资源文件打到一个zip包中

    4.创建工程并上传zip包,启动job
    在这里插入图片描述

  • 相关阅读:
    windows环境和linux环境,多加了正斜杠导致结果不同
    houdini布料解算 质感像塑料
    高衍射效率的偏振无关透射光栅的分析与设计
    《JavaScript前端开发与实例教程(微课视频版)》
    Java:注解的分类学习及相关知识学习
    【单端S参数与差分S参数转化】
    标题采集软件-免费标题生成器
    6.1 KMP算法搜索机器码
    【云原生之K8S】k8s资源限制以及探针检查
    c语言中使用openssl对数据进行hmac_sha256加密
  • 原文地址:https://blog.csdn.net/qq_38628046/article/details/123441248