• 工作流调度器Azkaban


    1.工作流调度器

    1.为什么需要工作流调度系统

    • 一个完整的数据分析系统通常都是由大量任务单元组成:
      • shell脚本程序,java程序,mapreduce程序、hive脚本等
      • 各任务单元之间存在时间先后及前后依赖关系
      • 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;
    • 例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:
      • 通过Hadoop先将原始数据同步到HDFS上;
      • 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
      • 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive宽表;
      • 将明细数据进行各种统计分析,得到结果报表信息;
      • 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。

    2. 工作流调度实现方式

    • 简单的任务调度:直接使用linux的crontab来定义;
    • 复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban、airflow、dophinschedule等

    2. Azkaban介绍

    • Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流(work flow)内以一个特定的顺序运行一组工作和流程。
    • Azkaban定义了一种KV格式文件(properties)来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
    • 它有如下功能特点:
      • 提供功能清晰、简单易用的web UI界面
        • 方便上传工作流
        • 调度工作流
        • 能够杀死并重新启动工作流
        • 工作流和任务的日志记录和审计
      • 提供job配置文件快速建立任务和任务之间的关系
      • 提供模块化的可插拔机制,原生支持command、java、hive、hadoop
      • 安全性高:认证/授权(权限的工作)
      • 提供分布式的多个执行服务器executor
      • 提供conditional workflow工作流

    3. azkaban的基本架构

    • Azkaban由三部分构成
      • 1、Azkaban Web Server
        提供了Web UI,是azkaban的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。
      • 2、Azkaban Executor Server
        负责具体的工作流和任务的调度提交
      • 3、Mysql
        用于保存项目、日志或者执行计划之类的信息

    4. Azkaban架构的三种运行模式

    1. solo server mode(单机模式)

    • solo server mode是azkaban的一个独立的实例
    • 易于安装:不需要安装mysql,它内置了H2数据库,作为它的底层持久化存储
    • 易于开始使用:管理服务器web server和执行服务器execute server都在一个进程中运行,任务量不大项目可以采用此模式
    • 包含azkaban所有的功能
    • 有兴趣的同学,可以参考官网文档

    2. two server mode

    • web server 和 executor server运行在不同的进程
    • 数据库为mysql,管理服务器和执行服务器在不同进程
    • 这种模式下,管理服务器和执行服务器互不影响。

    3. multiple executor mode

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

    Multiple Executor模式安装

     

    Multiple Executor模式安装

    前提:某节点已经安装mysql,此文档以hadoop02已经安装mysql为例

    若没有特殊说明,所有操作都是使用hadoop普通用户操作

    具体用到的安装包可以在这里下载:https://pan.baidu.com/s/1SfjBBvtyOIQ3-kIKVKjRFw 提取码:dm29

    • 在hadoop03节点操作
    1. 确认所需软件:
    • Azkaban Web服务安装包
    azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
    
    • Azkaban执行服务安装包
    azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
    
    • 编译之后的sql脚本
    create-all-sql-0.1.0-SNAPSHOT.sql
    
    • C程序文件脚本
    execute-as-user.c
    
    • 将以上4个文件上传到hadoop03的/bigdata/soft目录
    2. 数据库准备
    • 进入mysql的客户端执行以下命令
    [hadoop@hadoop03 ~]$ mysql -uroot -p123456
    
    • mysql中执行以下命令:
    -- 设置密码的验证强度等级
    set global validate_password_policy=LOW; 
    set global validate_password_length=6;
    -- 创建数据库azkaban,用于存储使用azkaban框架过程中产生的数据
    CREATE DATABASE azkaban;
    CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';  
    GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION;
    
    flush privileges;
    use azkaban; 
    source /bigdata/soft/create-all-sql-0.1.0-SNAPSHOT.sql;
    exit;
    

    • 更改 MySQL 包大小;防止 Azkaban 连接 MySQL 阻塞
    hadoop@hadoop02 ~]$ sudo vim /etc/my.cnf
    
    • 在文件末尾增加如下内容;然后保存、退出
    max_allowed_packet=1024M
    

    • 重启mysql服务
    [hadoop@hadoop02 sbin]$ sudo /sbin/service mysqld restart
    # 输出如下日志
    Redirecting to /bin/systemctl restart mysqld.service
    
    3. 解压软件安装包
    • 解压azkaban-web-server
    [hadoop@hadoop03 ~]$ cd /bigdata/soft/
    [hadoop@hadoop03 soft]$ tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /bigdata/install
    [hadoop@hadoop03 soft]$ cd /bigdata/install
    [hadoop@hadoop03 install]$ mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web-server-4.0.0
    
    • 解压azkaban-exec-server
    [hadoop@hadoop03 install]$ cd /bigdata/soft/
    [hadoop@hadoop03 soft]$ tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /bigdata/install/
    [hadoop@hadoop03 soft]$ cd /bigdata/install/
    [hadoop@hadoop03 install]$ mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec-server-4.0.0
    
    4. 安装SSL安全认证
    • 安装ssl安全认证,允许我们使用https的方式访问我们的azkaban的web服务;
    • 密码一定要一个个的字母输入,或者粘贴也行
    [hadoop@hadoop03 install]$ cd /bigdata/install/azkaban-web-server-4.0.0
    [hadoop@hadoop03 azkaban-web-server-4.0.0]$ keytool -keystore keystore -alias jetty -genkeypair -keyalg RSA
    
    • 具体输入如下:

      • 密码都是azkaban
      • 显示[Unknown]:直接敲回车
      • 显示[no]:输入yes,回车
      • jetty密码:azkaban
    • 如果你的linux是中文环境

    • 如果是英文环境,上图中的“是”用“yes”代替

    • 发现目录中多出一个秘钥文件keystore

    [hadoop@hadoop03 azkaban-web-server-4.0.0]$ pwd
    /bigdata/install/azkaban-web-server-4.0.0
    [hadoop@hadoop03 azkaban-web-server-4.0.0]$ ls
    bin  conf  keystore  lib  web
    
    5. azkaban web server安装
    1、修改azkaban-web-server
    • 修改azkaban-web-server的配置文件
    [hadoop@hadoop03 azkaban-web-server-4.0.0]$ cd /bigdata/install/azkaban-web-server-4.0.0/conf
    [hadoop@hadoop03 conf]$ vim azkaban.properties
    
    • 修改文件中的如下属性
    # Azkaban Personalization Settings
    azkaban.name=Azkaban
    azkaban.label=My Azkaban
    ...
    
    default.timezone.id=Asia/Shanghai
    ...
    
    # Azkaban Jetty server properties.
    jetty.use.ssl=true
    ...
    
    # 新增内容
    jetty.ssl.port=8443
    jetty.keystore=/bigdata/install/azkaban-web-server-4.0.0/keystore
    jetty.password=azkaban
    jetty.keypassword=azkaban
    jetty.truststore=/bigdata/install/azkaban-web-server-4.0.0/keystore
    jetty.trustpassword=azkaban
    ...
    
    
    mysql.host=hadoop02
    ...
    
    azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
    
    
    • 说明:
      • StaticRemainingFlowSize:正在排队的任务数;
      • CpuStatus: CPU 占用情况
      • MinimumFreeMemory:内存占用情况。 测试环境, 必须将 MinimumFreeMemory 删除掉,否则它会认为集群资源不够,不执行。
    • 需要修改的项目如下图
    2、设置azkaban用户
    • 文件/bigdata/install/azkaban-web-server-4.0.0/conf/azkaban.properties中默认有如下属性
    user.manager.class=azkaban.user.XmlUserManager
    user.manager.xml.file=conf/azkaban-users.xml
    
    • 上边的XmlUserManager是azkaban内置的UserManager用户管理器
    • 当启动web server时,XmlUserManager读取上边配置文件azkaban.properties,然后解析azkaban-users.xml
    • 此xml文件中用来配置azkaban的用户、组、角色
    • 接下来编辑此xml文件,用来配置azkaban用户
    • 添加用户hadoop
    [hadoop@hadoop03 conf]$ pwd
    /bigdata/install/azkaban-web-server-4.0.0/conf
    [hadoop@hadoop03 conf]$ vim azkaban-users.xml
    
    • 内容如下(注意:在向内容拷贝到xml文件时,注意格式缩进)
      <user password="123456" roles="myread" username="tenicread"/>
      <user password="123456" roles="mywrite" username="tenicwrite"/>
      <user password="123456" roles="admin" username="tenicadmin"/>
      <user password="123456" roles="myread, mywrite" username="tenicrwe" groups="groupx"/>
      
      <group name="groupx" roles="myexe"/>
      
      <role name="myread" permissions="READ"/>
      <role name="mywrite" permissions="WRITE"/>
      <role name="myexe" permissions="EXECUTE"/>  
    

    6. azkaban executor server 安装
    第一步:修改azkaban-exex-server配置文件
    • 修改azkaban-exec-server的配置文件
    [hadoop@hadoop03 ~]$ cd /bigdata/install/azkaban-exec-server-4.0.0/conf
    [hadoop@hadoop03 conf]$ vim azkaban.properties
    
    # Azkaban Personalization Settings
    azkaban.name=Azkaban
    azkaban.label=My Azkaban
    ...
    
    default.timezone.id=Asia/Shanghai
    ...
    
    jetty.use.ssl=true
    ......
    
    # 新增内容 添加如下5行内容
    jetty.keystore=/bigdata/install/azkaban-web-server-4.0.0/keystore
    jetty.password=azkaban
    jetty.keypassword=azkaban
    jetty.truststore=/bigdata/install/azkaban-web-server-4.0.0/keystore
    jetty.trustpassword=azkaban
    ...
    
    
    
    # Where the Azkaban web server is located
    azkaban.webserver.url=https://hadoop03:8443
    ...
    
    mysql.host=hadoop02
    ...
    
    第二步:添加插件
    • 将我们编译后的C文件execute-as-user.c上传或拷贝到/bigdata/install/azkaban-exec-server-4.0.0/plugins/jobtypes
    [hadoop@hadoop03 conf]$ cp /bigdata/install/execute-as-user.c /bigdata/install/azkaban-exec-server-4.0.0/plugins/jobtypes/
    
    • 然后执行以下命令生成execute-as-user
    # 在线安装gcc-c++
    [hadoop@hadoop03 conf]$ sudo yum -y install gcc-c++
    [hadoop@hadoop03 conf]$ cd /bigdata/install/azkaban-exec-server-4.0.0/plugins/jobtypes
    [hadoop@hadoop03 jobtypes]$ gcc execute-as-user.c -o execute-as-user
    # 添加root特权
    [hadoop@hadoop03 jobtypes]$ sudo chown root execute-as-user
    [sudo] hadoop 的密码:
    [hadoop@hadoop03 jobtypes]$ sudo chmod 6050 execute-as-user
    

    第三步:修改配置文件
    • 修改配置文件
    [hadoop@hadoop03 jobtypes]$ cd /bigdata/install/azkaban-exec-server-4.0.0/plugins/jobtypes
    [hadoop@hadoop03 jobtypes]$ vim commonprivate.properties
    
    • 增加或修改如下内容
    execute.as.user=true
    azkaban.native.lib=/bigdata/install/azkaban-exec-server-4.0.0/plugins/jobtypes
    azkaban.group.name=myazkaban
    memCheck.enabled=false
    
    • 将exec拷贝到另外两个节点,并修改所属用户
    [hadoop@hadoop03 servers]$ cd /bigdata/install
    [hadoop@hadoop03 servers]$ scp -r azkaban-exec-server-4.0.0/ hadoop@hadoop01:$PWD
    [hadoop@hadoop03 servers]$ scp -r azkaban-exec-server-4.0.0/ hadoop@hadoop02:$PWD
    
    • hadoop01节点
    [hadoop@hadoop01 ~]# cd /bigdata/install/azkaban-exec-server-4.0.0/plugins/jobtypes
    # 添加root特权
    [hadoop@hadoop01 jobtypes]$ sudo chown root execute-as-user
    [sudo] hadoop 的密码:
    [hadoop@hadoop01 jobtypes]$ sudo chmod 6050 execute-as-user
    
    • hadoop02节点
    [hadoop@hadoop02 ~]$ cd /bigdata/install/azkaban-exec-server-4.0.0/plugins/jobtypes
    # 添加root特权
    [hadoop@hadoop02 jobtypes]$ sudo chown root execute-as-user
    [sudo] hadoop 的密码:
    [hadoop@hadoop02 jobtypes]$ sudo chmod 6050 execute-as-user
    
    第四步:添加用户、用户组
    • 三节点hadoop用户已经有sudoers权限
    • 三节点hadoop01、hadoop02、hadoop03都执行如下命令
    sudo groupadd myazkaban
    [sudo] hadoop 的密码:
    sudo useradd -g myazkaban tenicrwe
    sudo passwd tenicrwe
    新的 密码:123456
    重新输入新的密码:
    # 将tenicrwe添加附加用户组
    sudo usermod -a -G hadoop tenicrwe
    # 查看用户tenicrwe
    sudo id tenicrwe
    uid=1001(tenicrwe) gid=1001(myazkaban) 组=1001(myazkaban),1000(hadoop)
    
    • exec服务器在执行flow时,会在/bigdata/install/azkaban-exec-server-4.0.0目录创建目录executions,为了解决权限问题,3台节点都需要做如下操作
      • hadoop01节点
      [hadoop@hadoop01 ~]$ cd /bigdata/install/azkaban-exec-server-4.0.0
      [hadoop@hadoop01 azkaban-exec-server-4.0.0]$ mkdir executions
      [hadoop@hadoop01 azkaban-exec-server-4.0.0]$ sudo chown :myazkaban executions/
      
      • hadoop02节点
      [hadoop@hadoop02 ~]$ cd /bigdata/install/azkaban-exec-server-4.0.0
      [hadoop@hadoop02 azkaban-exec-server-4.0.0]$ mkdir executions
      [hadoop@hadoop02 azkaban-exec-server-4.0.0]$ sudo chown :myazkaban executions/
      
      • hadoop03节点
      [hadoop@hadoop03 ~]$ cd /bigdata/install/azkaban-exec-server-4.0.0
      [hadoop@hadoop03 azkaban-exec-server-4.0.0]$ mkdir executions
      [hadoop@hadoop03 azkaban-exec-server-4.0.0]$ sudo chown :myazkaban executions/
      

      说明::myazkaban对应exec的commonprivate.propertiesazkaban.group.name=myazkaban属性

    7. 启动服务
    第一步:启动azkaban exec server
    • hadoop01节点上
    [hadoop@hadoop01 ~]# cd /bigdata/install/azkaban-exec-server-4.0.0/ 
    [hadoop@hadoop01 azkaban-exec-server-4.0.0]$ bin/start-exec.sh
    

    关闭exec server: bin/shutdown-exec.sh

    第二步:激活我们的exec-server
    • 每次启动exec都需要激活
    • hadoop01机器下执行以下命令
    [hadoop@hadoop01 ~]$ cd /export/servers/azkaban-exec-server-4.0.0
    [hadoop@hadoop01 azkaban-exec-server-4.0.0]$ curl -G "hadoop01:$(<./executor.port)/executor?action=activate" && echo {"status":"success"}
    

    其他2个节点也同样操作,就可以启动并激活hadoop02、hadoop03的服务了。

    • 三个节点的exec server都启动后,可以去mysql中确认下,hadoop02执行命令
    [hadoop@hadoop02 azkaban-web-server-4.0.0]$ mysql -uroot -p
    Enter password:
    mysql> use azkaban;
    mysql> show tables;
    mysql> select * from executors;
    +----+---------+-------+--------+
    | id | host    | port  | active |
    +----+---------+-------+--------+
    |  1 | hadoop01| 39157 |      1 |
    |  2 | hadoop02| 41613 |      1 |
    |  3 | hadoop03| 34589 |      1 |
    +----+---------+-------+--------+
    3 rows in set (0.00 sec)
    
    • 发现,确实有3个exec server,active=1,表示已激活
    第三步:启动azkaban-web-server
    • hadoop03节点
    [hadoop@hadoop03 ~]$ cd /export/servers/azkaban-web-server-4.0.0/
    [hadoop@hadoop03 azkaban-web-server-4.0.0]$ bin/start-web.sh
    [hadoop@hadoop03 azkaban-web-server-4.0.0]$ jps
    17298 AzkabanWebServer
    17203 AzkabanExecutorServer
    17322 Jps
    

    关闭web server命令:bin/shutdown-web.sh

    • 宿主机浏览器访问地址:https://hadoop03:8443

      前提:宿主机的hosts文件中配置了hadoop03 ip地址与主机名hadoop03的映射

      • 若浏览器界面出现类似情况,按图操作即可

    • 用户名和密码可以是hadoop03的文件/bigdata/install/azkaban-web-server-4.0.0/conf中指定的用户名及密码,如下
      比如此处使用用户tenicrwe,密码123456

    • 登录后,进入界面

    Azkaban启动停止脚本

     

    我们在上一篇文章中已经安装部署了Azkaban,但是启动的时候要去每个机器上执行一下命令。来回切换机器太麻烦,今天我们输出一个脚本,搞定自动启动停止。

    1 登录到hadoop01上,在~/bin 目录下创建一个azkaban.sh脚本

    [hadoop@hadoop01 ~] cd bin
    [hadoop@hadoop01 ~] vi azkaban.sh
    

    2 编写脚本文件,保持退出

    #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if ((pcount==0)); then
    echo no args;
    exit;
    fi
    
    if ((pcount==1)); then
    echo no second param;
    exit;
    fi
    
    #2 获取启动类型 exec 还是 web
    p1=$1
    p2=$2
    
    if [[ $p1 == "exec" ]]; then
           if [[ $p2 == "start" ]]; then
                   for (( i = 1; i <= 3; i++ )); do
                   echo ====================hadoop$i azkaban exec $p2 ==============================
                   ssh hadoop$i "source /etc/profile;cd /bigdata/install/azkaban-exec-server-4.0.0; bin/start-exec.sh"
                   done
           elif [[ $p2 == "active" ]]; then
                   for (( i =1; i <= 3; i++ )); do
                   echo ====================hadoop$i azkaban exec $p2 ===============================
                   ssh hadoop$i 'source /etc/profile;curl http://hadoop'${i}':$('cat /bigdata/install/azkaban-exec-server-4.0.0/executor.port')/executor?action=activate'
                   done
           elif [[ $p2 == "stop" ]]; then
                   for (( i = 1; i <= 3; i++ )); do
                   echo ====================hadoop$i azkaban exec $p2 ==============================
                   ssh hadoop$i "cd /bigdata/install/azkaban-exec-server-4.0.0/;bin/shutdown-exec.sh"
               done
           fi
    elif [[ $p1 == "web" ]]; then
           if [[ $p2 == "start" ]]; then
                   echo ====================azkaban web $p2 ==============================
                   ssh hadoop3 "source /etc/profile;cd /bigdata/install/azkaban-web-server-4.0.0/; bin/start-web.sh"
           elif [[ $p2 == "stop" ]]; then
                   echo ====================azkaban web $p2 ==============================
                   ssh hadoop3 "source /etc/profile;cd /bigdata/install/azkaban-web-server-4.0.0/; bin/shutdown-web.sh"
           fi
    fi
    

    3 修改脚本权限

    [hadoop@hadoop01 bin] sudo chmod 777 azkaban.sh
    

    4 启动/停止脚本

    • 启动服务
    [hadoop@hadoop01 bin] azkaban.sh exec start
    [hadoop@hadoop01 bin] azkaban.sh exec active
    [hadoop@hadoop01 bin] azkaban.sh web start
    [hadoop@hadoop01 bin] xcall jps
    

    • 停止服务
    [hadoop@hadoop01 bin] azkaban.sh exec stop
    [hadoop@hadoop01 bin] azkaban.sh web stop
    [hadoop@hadoop01 bin] xcall jps
    

     
     
  • 相关阅读:
    query_posts函数使用方法小结|wordpress技巧
    查看服务器被访问最大的ip
    Escape character is ‘^]’什么意思?怎么使用telnet
    telnet安装和使用教程
    开启了wpjam以后网站语言不能设置英文的解决方法
    wordpress获取当前页面链接
    woocommerce面包屑导航breadcrumb的修改
    如何将wordpress的the_title()进行大小写处理
    Sitemap Error : XML declaration allowed only at the start of the document解决方法
    mysql解析binlog日志
  • 原文地址:https://www.cnblogs.com/hanease/p/16218286.html
Copyright © 2020-2023  润新知