暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

大数据组件:工作流任务调度管理(二)AzKaban集群部署

畅谈Fintech 2022-01-30
604


上一节我们概述了工作流调度任务知识和管理工具等。包括crontab命令、Oozie、Azkaban、Airflow、DolphinScheduler框架等。

这节我们详细讲解目前市场上使用比较多的工作流任务调用管理工具AzKaban。




一、Azkaban架构

‍‍‍
1、架构组件
我们先来看一下AzKaban的架构组件:由三个组件构成。


  • AzKabanWebServer

    AzkabanWebServer是整个Azkaban工作流系统的主要管理者,包括用户登录认证、project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。

  • AzKabanExecutorServer
    负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行。
  • MySQL
    存储大部分执行流状态,WebServer和ExecutorServer都需要访问数据库。


2、架构部署

我们根据集群的配置情况做如下部署:

node节点都是hadoop3.0平台

组件

Node01

Node02

Node03

AzkabanWebServer



AzkabanExecutorServer

mysql








二、Azkaban源码编译


AzKaban的jar包我们通过官网提供的源码来编译。源码编译需要在linux平台上执行编译。用到以下几个工具:
  • Azkaban source code

  • git

  • jdk

  • gradle


1、Azkaban源码下载

这里我们下载最近的latest4.0.0版本源码。



把下载好的tar包上传到hadoop-node01这台机器上。目录如下:


2、下载git
直接在hadoop-node01机器上安装执行;
    sudo yum install -y git
    3、下载gradle

    gradle官网下载,这里我自己有6.6这个版本。



    上传到hadoop-node01机器上。目录如下:


    2、编译
    先到azkaban目录下,执行
      ./gradlew build

      我这里构建的过程中报错了。原因是网络问题一些依赖包下载不了。
      编译的顺序是
        # Build Azkaban
        ./gradlew build


        # Clean the build
        ./gradlew clean


        # Build and install distributions
        ./gradlew installDist


        # Run tests
        ./gradlew test


        # Build without running tests
        ./gradlew build -x test
        下面我们拿之前编译好的的3.8.4这个版本,继续讲解。
        3、打包到集群
        把3.8.4三个包上传到hadoop-node01机器上;
        其中:一个是db包里面包含所有创建azkaban数据的文件,另外两个是web以及exec包文件。




        三、mysql安装搭建


        源码编译完成,我们开始搭建部署AzKaban集群三大部件,第一个是mysql的安装和配置。由于之前讲解hive的时候我们已经安装和配置了mysql。
        1、创建azkaban数据库
          mysql> create database azkaban;
          2、创建azkaban用户配置权限
          赋予给用户(azkaban)数据库(azkaban)下的所有权限
            #设置密码策略等级低模式以及长度
            set global validate_password_length=6
            set global validate_password_policy=0
            #创建azkaban用户,并设置密码
            CREATE USER 'azkaban'@'%' IDENTIFIED BY 'XXXXXX';
            #赋予用户权限
            GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;

            3、导入azkaban表

            我们刚才上传azkaban-db的路径是/opt/module/azkaban

            里面包含一个创建所有SQL的脚本

            我们执行脚本
              mysql> source /opt/module/azkaban/azkaban-db/create-all-sql-3.84.4.sql
              然后查看表
                mysql> show tables;
                +-----------------------------+
                | Tables_in_azkaban |
                +-----------------------------+
                | QRTZ_BLOB_TRIGGERS |
                | QRTZ_CALENDARS |
                | QRTZ_CRON_TRIGGERS |
                | QRTZ_FIRED_TRIGGERS |
                | QRTZ_JOB_DETAILS |
                | QRTZ_LOCKS |
                | QRTZ_PAUSED_TRIGGER_GRPS |
                | QRTZ_SCHEDULER_STATE |
                | QRTZ_SIMPLE_TRIGGERS |
                | QRTZ_SIMPROP_TRIGGERS |
                | QRTZ_TRIGGERS |
                | active_executing_flows |
                | active_sla |
                | execution_dependencies |
                | execution_flows |
                | execution_jobs |
                | execution_logs |
                | executor_events |
                | executors |
                | project_events |
                | project_files |
                | project_flow_files |
                | project_flows |
                | project_permissions |
                | project_properties |
                | project_versions |
                | projects |
                | properties |
                | ramp |
                | ramp_dependency |
                | ramp_exceptional_flow_items |
                | ramp_exceptional_job_items |
                | ramp_items |
                | triggers |
                | validated_dependencies |
                +-----------------------------+
                35 rows in set (0.00 sec)
                4、修改mysql配置文件
                这里修改mysql配置文件my.conf主要是对防止Azkaban链接mysql阻塞,修改包的大小为1024M。
                  [qiusheng@node01 azkaban]$ sudo vim /etc/my.cnf
                  [mysqld]
                  21 # Azkaban packet
                   22 max_allowed_packet=1024M
                  5、重启mysql服务
                    [qiusheng@node01 azkaban]$ sudo systemctl restart mysqld
                    这样我们就完成了mysql这部分的搭建和配置。



                    四、AzKabanExecutorServer配置


                    ExecutorServer负责具体的工作流的提交、执行。目录结构非常清晰:bin、conf、lib、plugins 4个目录。
                    1、修改azkaban.properties
                      #1、修改时区
                      7 #default.timezone.id=America/Los_Angeles
                      8 default.timezone.id=Asia/Shanghai
                      #2、修改webserver.url
                      22 #azkaban.webserver.url=http://localhost:8081
                      23 azkaban.webserver.url=http://node01:8081
                      #3、修改mysql的host等
                      46 #mysql.host=localhost
                       47 mysql.host=node01
                      #4、添加metric属性
                      55 executor.metric.reports=true
                      56 executor.metric.milisecinterval.default=60000
                      #5、添加executor.port
                      57 #add azkan Executor port
                       58 executor.port=12333
                      2、分发到node02、03节点
                      分发脚本文件,把文件分发到3台机器上。
                        [qiusheng@node01 azkaban-exec]$ xsync__nodes.sh opt/module/azkaban/azkaban-exec/
                        =============== node01 ===============
                        sending incremental file list
                        sent 1,937 bytes received 23 bytes 3,920.00 bytes/sec
                        total size is 17,750,582 speedup is 9,056.42
                        =============== node02 ===============
                        sending incremental file list
                        sent 17,759,162 bytes received 1,154 bytes 35,520,632.00 bytes/sec
                        total size is 17,750,582 speedup is 1.00
                        =============== node03 ===============
                        sending incremental file list
                        sent 17,759,162 bytes received 1,154 bytes 11,840,210.67 bytes/sec
                        total size is 17,750,582 speedup is 1.00


                        3、启动ExecutorServer
                        /opt/module/azkaban/azkaban-exec目录下执行启动脚本
                          [qiusheng@node01 azkaban-exec]$ bin/start-exec.sh
                          查看azkaban-exec目录多出来几个文件;
                          • executor.port

                            12333是我们前面配置azkaban.properties中executor.port的值

                            [qiusheng@node01 azkaban-exec]$ cat executor.port
                            12333
                            • currentpid

                              10652是AzkabanExecutorServer进程id

                              [qiusheng@node01 azkaban-exec]$ jps
                              10652 AzkabanExecutorServer
                              10733 Jps
                              4、激活ExecutorServer
                              我们查看executors表,active列这里显示0,表示没有激活ExecutorServer
                                mysql> select * from executors;
                                +----+--------+-------+--------+
                                | id | host | port | active |
                                +----+--------+-------+--------+
                                | 1 | node01 | 12333 | 0 |
                                +----+--------+-------+--------+
                                1 row in set (0.00 sec
                                接下来我们来激活,当启动AzkabanExecutorServer后,默认是没有激活状态,需要手动激活。
                                激活的原理是向ExecutorServer服务url提交发送一个get请求。这里使用curl命令行发送一个get请求,服务的usl是域名node01端口是12333。
                                  [qiusheng@node01 azkaban-exec]$ curl -G "node01:12333/executor?action=activate" && echo
                                  {"status":"success"}
                                  检查是否激活的方法有两个:
                                  • 返回激活的响应码

                                    返回success;

                                  • 在数据库表中查看是否激活

                                    active字段显示1

                                      mysql> select * from executors;
                                      +----+--------+-------+--------+
                                      | id | host | port | active |
                                      +----+--------+-------+--------+
                                      | 1 | node01 | 12333 | 1 |
                                      +----+--------+-------+--------+
                                      1 row in set (0.00 sec)
                                    5、其他节点的启动和激活
                                    完成其他Node02、03节的启动和激活。
                                    Node02
                                      [qiusheng@node02 azkaban-exec]$ bin/start-exec.sh
                                      [qiusheng@node01 azkaban-exec]$ curl -G "node02:12333/executor?action=activate" && echo
                                      {"status":"success"}
                                      Node03
                                        [qiusheng@node03 azkaban-exec]$ bin/start-exec.sh
                                        [qiusheng@node01 azkaban-exec]$ curl -G "node03:12333/executor?action=activate" && echo
                                        {"status":"success"}
                                        mysql查看
                                          mysql> select * from executors;
                                          +----+--------+-------+--------+
                                          | id | host | port | active |
                                          +----+--------+-------+--------+
                                          | 1 | node01 | 12333 | 1 |
                                          | 2 | node02 | 12333 | 1 |
                                          | 3 | node03 | 12333 | 1 |
                                          +----+--------+-------+--------+
                                          3 rows in set (0.00 sec)
                                          这样我们就完成了整个AzKabanExecutorServer集群的配置部署。





                                          五、AzKabanWebServer配置


                                          接下来我们配置AzKabanWebServer
                                          1、修改azkaban.properties
                                          和ExecutorServer的配置文件一样,修改时区、mysql的host;
                                            #1、修改时区
                                            7 #default.timezone.id=America/Los_Angeles
                                              8 default.timezone.id=Asia/Shanghai
                                            #2、修改mysql的host等
                                            46 #mysql.host=localhost
                                            47 mysql.host=node01
                                            还需要修改一个executorselector.filters参数值,当配置多executor的时候,才需要配置这个参数值,是过滤器作用来确定是哪个executor来执行。
                                               49 azkaban.use.multiple.executors=true
                                               50 azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus

                                              三个参数值分别是:StaticRemainingFlowSize、MinimumFreeMemory

                                              CpuStatus,由于MinimumFreeMemory至少需要节点6G以上的内存。我们集群资源不满足这个条件,故删除它。

                                              2、修改azkaban-users.xml文件
                                              这个文件的作用是添加用户、组以及配置权限。

                                              azkaban-web/conf/azkaban-users.xml

                                                <azkaban-users>
                                                <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
                                                <user password="metrics" roles="metrics" username="metrics"/>
                                                  <user password="tigerWang" roles="admin" username="tigerWang"/>
                                                <role name="admin" permissions="ADMIN"/>
                                                <role name="metrics" permissions="METRICS"/>
                                                </azkaban-users>

                                                3、启动WebServer
                                                进入/opt/module/azkaban/azkaban-web/conf/bin目录,执行
                                                  [qiusheng@node01 bin]$ ./start-web.sh

                                                  4、测试访问azkaban

                                                  我们先启动Hadoop集群,包括Kafka集群、Zookeeper集群.

                                                  然后访问http://node01:8081,查看集群状态是否已经正常启动。


                                                  然后三台节点都启动AzKabanExecutorServer、最后在Node01节点在启动AzKabanWebServer服务。

                                                  • Node01节点进程

                                                    [qiusheng@node01 azkaban-web]$ jps
                                                    11248 NodeManager
                                                    12402 Jps
                                                    11510 QuorumPeerMain
                                                    11944 Kafka
                                                    11385 JobHistoryServer
                                                    10890 DataNode
                                                    12266 AzkabanExecutorServer
                                                    10763 NameNode
                                                    12060 Application
                                                    12381 AzkabanWebServer
                                                    • Node02节点进程

                                                      [qiusheng@node02 azkaban-exec]$ jps
                                                      12336 AzkabanExecutorServer
                                                      11633 QuorumPeerMain
                                                      11218 NodeManager
                                                      11091 ResourceManager
                                                      10886 DataNode
                                                      12040 Kafka
                                                      12155 Application
                                                      12447 Jps
                                                      • Node03节点进程

                                                        [qiusheng@node03 azkaban-exec]$ jps
                                                        12649 Application
                                                        12985 Jps
                                                        11978 NodeManager
                                                        12154 QuorumPeerMain
                                                        12554 Kafka
                                                        11757 DataNode
                                                        11839 SecondaryNameNode
                                                        12847 AzkabanExecutorServer

                                                        访问http://node01:8081,并用"tigerWang"用户登陆


                                                        登录成功后,界面如下:


                                                        到这我们就完成了整个AzKaban集群架构的部署了。







                                                        总结:

                                                        1. AzKaban架构原理、组件、部署;

                                                        2. mysql部署;

                                                        3. AzKabanExecutorServer部署;

                                                        4. AzKabanWebServer部署;

                                                        5. 验证测试集群部署。




                                                        参考:
                                                        1、https://azkaban.github.io






                                                        文章转载自畅谈Fintech,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                        评论