任务调度器Azakaban3.80.1详细教程

Azkaban

简介

Azkaban是一个分布式工作流管理器,被LinkedIn用来解决Hadoop的作业依赖性问题。我们从ETL作业到数据分析产品中也有许多工作需要按照顺序运行。

使用场景

在大数据业务处理场景中,经常有这样的分析场景:

任务A:将收集到的数据通过一系列的规则进行清洗,然后存入Hive表a中。

任务B:将Hive中已存在的b表和c表进行关联得到表d。

任务C:将A任务得到的表a与B任务得到的表d进行关联得到分析的结果表e。

任务D:最后将Hive中得到的表e通过sqoop导入到关系型数据库MySQL中供web端查询使用。

在以上任务中,存在依赖关系:

A,B <= C  <= D

即任务D依赖于任务C,任务C依赖于任务A与任务B。

这个时候需要操作者在调用时重点关注依赖关系,防止程序运行异常或者数据错误。如果依赖关系越来越多,越来越繁杂,那么出现问题的可能性将会大幅度增加。

使用Azkaban时,操作者通过定义job之间的依赖关系,就可以达到job有序进行的效果。具有复杂的依赖关系的jobs再也不用手工去进行干预。

关键组件

AzkabanWebServer

主要负责项目管理、用户登录权限认证、定时执行工作任务、跟踪提交任务执行的流程、访问历史执行任务、保存执行计划的状态等。

AzkabanExecutorServer

主要负责工作流程的提交、执行、检索和更新当前正在执行计划的数据,处理执行计划的日志。

关系型数据库

保存工作流中的元数据信息

安装步骤

环境说明

Cent OS 7.9.2009

编译源码

下载源码Source code (tar.gz)

解压并重命名:

tar -zxf azkaban-3.80.1.tar.gz -C ./
mv azkaban-3.80.1.tar.gz azkaban

使用gradle命令打包:

cd azkaban
./gradlew distTar

在用户家目录新建azkabanApp目录,将编译好的文件复制过来:

mkdir ~/azkabanApp
cd ~/azkabanApp
cp azkaban/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz ./
cp azkaban/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz ./
cp azkaban/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz ./

解压并重命名:

tar -zxf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ./
tar -zxf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ./
tar -zxf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C ./
mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web
mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec
mv azkaban-db-0.1.0-SNAPSHOT azkaban-db

数据库

安装mysql5.7,过程略。本文中是在CentOS中安装运行Azkaban,在Windows中安装Mysql。远程连接Mysql时,需要对Mysql用户配置可远程连接

进入mysql数据,执行:

# 这里的123456为你给新增权限用户设置的密码,%代表所有主机,也可以具体到你的主机ip地址
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
# 从mysql数据库的grant表中重新加载权限数据
flush privileges; 

新建azkaban数据库,注意字符集选择latin1,如果用utf-8,会因为索引字节过长而报错。

将azkaban-db中的create-all-sql-0.1.0-SNAPSHOT.sql在mysql数据库中运行,得到所有表:

SSL配置

进入azkaban-web目录,创建ssl配置:

cd ~/azkabanApp/azkaban-web
keytool -keystore keystore -alias jetty -genkey -keyalg RSA

两次密码输入一致,中间信息可以不用输入,直接回车,最后确认的时候输入Y

此时就会在azkaban-web下多出一个keystore文件。

AzkabanWebServer

修改azkaban-web/config/azkaban.properties配置文件:

# Azkaban Personalization Settings
# 服务器UI上显示的名字
azkaban.name=Azkaban
# 描述
azkaban.label=My Local Azkaban
# webui颜色
azkaban.color=#FF3601
# 默认路由
azkaban.default.servlet.path=/index
# web目录
web.resource.dir=/home/hadoop/azkabanApp/azkaban-web/web/
# 默认时区,用于任务调度定时
default.timezone.id=Asia/Shanghai
# 用户权限管理类
user.manager.class=azkaban.user.XmlUserManager
# 用户配置文件
user.manager.xml.file=/home/hadoop/azkabanApp/azkaban-web/conf/azkaban-users.xml
# 全局配置文件
executor.global.properties=/home/hadoop/azkabanApp/azkaban-web/conf/global.properties
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
jetty.keystore=/home/hadoop/azkabanApp/azkaban-web/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/home/hadoop/azkabanApp/azkaban-web/keystore
jetty.trustpassword=azkaban
jetty.ssl.port=8443
# Azkaban Executor settings
# mail settings
mail.sender=
mail.host=
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# executor 服务器端口
executor.port=12312
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.21
mysql.database=azkaban
mysql.user=root
mysql.password=root
mysql.numconnections=100
#Multiple Executor
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1

AzkabanExecutorServer

修改azkaban-exex/config/azkaban.properties配置文件:

# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/home/hadoop/azkabanApp/azkaban-web/web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/home/hadoop/azkabanApp/azkaban-web/conf/azkaban-users.xml
# Loader for projects
executor.global.properties=/home/hadoop/azkabanApp/azkaban-web/conf/global.properties
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
# Where the Azkaban web server is located
azkaban.webserver.url=http://192.168.1.43:8081
# mail settings
mail.sender=
mail.host=
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.21
mysql.database=azkaban
mysql.user=root
mysql.password=root
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30
executor.port=12321

启动与关闭

启动

先启动AzkabanExecutorServer再启动AzkabanWebServer

进入azkaban-exec,执行./bin/start-exec.sh

cd azkaban-exec
./bin/start-exec.sh

进入azkaban-web,执行./bin/start-web.sh

cd azkaban-web
./bin/start-web.sh

关闭

先关闭AzkabanWebServer再关闭AzkabanExecutorServer

进入azkaban-web,执行./bin/shutdown-web.sh

cd azkaban-web
./bin/shutdown-web.sh

进入azkaban-exec,执行./bin/shutdown-exec.sh

cd azkaban-exec
./bin/shutdown-exec.sh

查看程序状态

jps查看正在运行的程序:

如果有一个程序启动失败,可以在azkaban-web/logs或者azkaban-exec/logs中查看日志。

常见问题

AzkabanWebServer启动失败,日志报错:

打开数据库中executors表,找到port12321的记录,将active字段从0改为1:

重新启动AzkabanWebServer

使用

浏览器打开http://${yourServerIp}:8081/

Azkaban中的projectmermaid flowchatjob之间的关系:

  • 一个project中可以包含多个mermaid flowchat
  • 一个mermaid flowchat包含多个job
  • jobAzkaban中运行的一个进程,可以是简单的linux命令、shell脚本等等
  • 一个job可以依赖于另外几个job,多个job之间的依赖关系组成mermaid flowchat,也就是任务流

设计流程

根据文本开始的使用场景描述,我们可以抽象成4个job,分别是job1、job2、job3、job4。每个job都执行一个shell脚本。

job4依赖job3的结果,job3依赖job1与job2的结果。

创建项目

点击创建项目,输入项目名称与描述。注意不能为中文,否则报错:

因为mysqlazkaban数据库的字符集为latin1,所以不能用中文。

编写脚本

在用户家目录创建projectShell文件夹,用来存放测试shell脚本:

mkdir ~/projectShell
cd projectShell

创建四个脚本文件:

vim job1.sh

#!/bin/bash
echo "开始执行 job1 ... ..."
echo "正在执行 job1 ... ..."
echo "执行完成 job1 ... ..."
vim job2.sh

#!/bin/bash
echo "开始执行 job2 ... ..."
echo "正在执行 job2 ... ..."
echo "执行完成 job2 ... ..."
vim job3.sh

#!/bin/bash
echo "开始执行 job3 ... ..."
echo "正在执行 job3 ... ..."
echo "执行完成 job3 ... ..."
vim job4.sh

#!/bin/bash
echo "开始执行 job4 ... ..."
echo "正在执行 job4 ... ..."
echo "执行完成 job4 ... ..."

编写job

job格式:

文件后缀为job

type=command
command=需要执行的脚本或命令

每一个脚本命令都编写一个job,如job1.job:

type=command
command=sh /home/hadoop/projectShell/job1.sh

创建Flow

将上述4个job文件打包成zip格式的压缩包。

在项目内点击Upload,上传压缩包:

上传完成后就会出现job的树形图:

Azkaban 默认 Flow 是以最后一个没有依赖的 job的名字命名的。

执行Flow

点击执行Flow:

可以看到job的执行依赖关系;左下角Schedule为创建定时规则,定时运行;右下角为直接运行。

点击Execute后在Job List中可以看到每个job的运行情况;通过Timeline可以看到运行顺序;通过Details中的Log可以看到每个job运行的日志。

job2的log:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值