0%
Theme NexT works best with JavaScript enabled
在Mac上部署Azkaban,需要踩得坑
一、介绍 1 2 Linkedin开源的一个批量工作流调度器,一个工作流内,多个作业可以按照特定的顺序执行,并且提供可视化Web界面。 在没有Azkaban的情况下,我们也可以做到任务调度,最基础的就是crontab+shell的形式。Azkaban对于调度任务的管理,以及各任务之间的依赖关系,进行了平台化的封装,让我们在任务管理上更加便捷。
二、应用部署 1.前置需要 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 # 编译环境 yum install -y git yum install -y gcc-c++ # MySQL环境 需要有MySQL环境给到我们存储任务调度信息 # 源码包下载 wget https://github.com/azkaban/azkaban/archive/refs/tags/4.0.0.tar.gz mv azkaban-4.0.0.tar.gz azkaban-4.0.0.tar.gz tar -zxvf azkaban-4.0.0.tar.gz # 编译 wget https://services.gradle.org/distributions/gradle-4.6-all.zip vi gradle-wrapper.properties #distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip distributionUrl=gradle-4.6-all.zip ./gradlew build installDist -x test # 4.0.0会报编译依赖下载失败 vi build.gradle 'com.linkedin.pegasus:generator', 'com.linkedin.pegasus:restli-server', 'com.linkedin.pegasus:restli-tools', #修改这三个包的版本为:27.7.18 # 编译后生成的安装包路径 ll azkaban-exec-server/build/distributions/ ll azkaban-web-server/build/distributions/ ll azkaban-db/build/distributions/
2.two-server模式部署 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 # 解压 tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /opt/azkaban tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /opt/azkaban tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C /opt/azkaban # 在MySQL中执行azkaban-db中的create-all-sql-0.1.0-SNAPSHOT.sql CREATE DATABASE azkaban; USE azkaban; CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban'; GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION; SOURCE create-all-sql-0.1.0-SNAPSHOT.sql # web-server设置 vi azkaban-web-server/conf/azkaban.properties executor.port=12321 # 可以不修改,到时候可以看executor-server下的executor.port文件 default.timezone.id=Asia/Shanghai jetty.port=8083 database.type=mysql mysql.port=3306 mysql.host=IPADDRESS mysql.database=azkaban mysql.user=azkaban mysql.password=azkaban mysql.numconnections=100 # 需要注释掉机器资源检查,因为mac没有proc目录 #azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus # 添加用户 vi azkaban-web-server/conf/azkaban-users.xml <azkaban-users> <user username="azkaban" password="azkaban" roles="admin" groups="azkaban"/> <user username="metrics" password="metrics" roles="metrics"/> <user username="admin" password="admin" roles="admin,metrics"/> <role name="admin" permissions="ADMIN" /> <role name="metrics" permissions="METRICS"/> </azkaban-users> # executor-server设置 vi azkaban-executor-server/conf/azkaban.properties jetty.port=8083 default.timezone.id=Asia/Shanghai azkaban.webserver.url=http://IP_ADDRESS:8083 mysql.port=3306 mysql.host=IPADDRESS mysql.database=azkaban mysql.user=azkaban mysql.password=azkaban mysql.numconnections=100
3.启动Azkaban 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cd ./azkaban-executor-server ./bin/start-exec.sh # 修改executor为active use azkaban; update azkaban.executors set active=1; cd ./azkaban-web-server ./bin/start-web.sh # WebUI http://IPADDRESS:8083/ # 激活Executor curl http://${executorHost}:${executorPort}/executor?action=activate
三、任务调度项目操作 1.简单使用 1 2 3 4 5 6 7 8 9 10 11 12 13 # 创建脚本 vi test.sh #!/bin/bash echo `date`"---JobA" >>/tmp/azkaban.log # 创建Job文件 vi test.job #job type=command command=sh /opt/test.sh # 压缩为zip文件 # 在Azkaban上创建Project,上传Zip包
2.带有依赖的Job 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 # 创建Job文件夹 mkdir test_job # 创建project文件 vi flow20.project azkaban-flow-version: 2.0 # 创建flow任务流文件 vi basic.flow nodes: - name: jobA type: command config: command: echo "JobA" - name: jobB type: command config: command: echo "JobB" - name: jobC type: command config: command: echo "JobC" # jobC depends on jobA and jobB dependsOn: - jobA - jobB # 打成Zip包,上传Azkaban调度