大数据技术之Hadoop学习(九)——Azkban工作流管理器
目录
一、工作流管理器
1、工作流调度系统背景
2、常用工作流管理器的认识
(1)Oozio
(2)Azkaban
二、Azkaban的概述
1、Azkaban的特点
2、Azkaban组成机构
(1) Relational Database(关系数据库 MySQL)
(2) Azkaban Web Server(Web 服务器)
(3) Azkaban Executor Server(执行服务器)
3、Azkaban的部署模式
(1)solo server mode
(2) two server mode
(3) distributed multiple-executor mode
三、Azkaban的部署
1、下载 Azkaban 源文件
2、Azkaban源文件编译
3、Azkaban安装包获取
4、MySQL配置
5、Azkaban Web 服务配置
(1)SSL创建
(2)Azkaban Web 服务器配置
(3)配置azkaban.properties
(4)配置azkaban-users.xml
(5)配置log4j.properties
6、 azkaban-exec-server配置
7、Azkzban启动测试
(1)启动azkaban-exec-server
(2)启动azkaban-web-server
(3)访问Azkaban UI
四、Azkaban的使用
1、job任务
2、工作流
3、嵌入流
五、案例演示
1、依赖任务调度管理
(1)创建 job 文件
(2)项目创建
(3)项目执行
一、工作流管理器
1、工作流调度系统背景
一个完整的数据分析系统(业务系统)通常都是由大量任务单元组成,如 Shell 脚本程、Java程序、MapReduce 程序和 Hive脚本等。各任务单元之间存在时间先后及依赖,为了将这复杂的执行计划组织起来,需要一个工作流调度系统来调度执行。在没有工作流管理器之前,可以使用Linux自带的crontab工具来定时调度任务,但是它存在如下几问题。
(1)大量的 crontab 任务需要管理;
(2)任务没有按时执行,各种原因失败,需要重试;
(3)多服务器环境下,crontab分散在很多集群上,查看日志就很费时间。
正是由于上述需求以及crontab的功能不足,为了更好地管理和组织这样复杂的执行任务,就需要工作流管理器来对任务进行调度执行。
2、常用工作流管理器的认识
针对这种多任务、可视化调度的调度需求,Apache 以及其他组织提供了一系列工作管理器,包括Oozie、Azkaban、Zeus、Dagobah、Luigi、Pinball和Airflow等。
(1)Oozio
Oozie是Apache 旗下的用于管理 Hadoop 任务的工作流/协调系统。Oozie 工作流中拥有多个Action,如 Hadoop Map/Reduce job 和 Hadoop Pig job 等,所有的 Action 以有向无环图(Direct Acyclic Graph,DAG)的模式部署运行。Oozie 工作流管理器的优点是与 Hadoop 生态圈紧密结合,提供了诸多配置和功能,可以很好地实现 Hadoop工作任务管理;缺点是 Oozie 通过大量的 XML 文件来定义 DAG 依赖,导致了Oozie的功能和配置过于复杂,维护成本较高,且不易二次开发。
(2)Azkaban
Azkaban 是由 LinkedIn 公司开源的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种 KV 文件格式来建立任务之间的依赖关系,并提供一个易于使用的 UI 维护和跟踪工作流。Azkaban 也属于 Hadoop生态圈,它是通过较为简单的 properties 文件来定义 DAG 依赖的,同时 Azkaban 支持可插拔的扩展插件,方便扩展,如支持 pid、hive 等。Azkaban 工作流管理器的特点是所有的任务资源文件都需要打成一个 zip 包上传。当资源文件较大的时候不是太方便,当然也可以进行扩展,如存放在HDFS上,任务实际运行的时候才拉到本地。
(3)Zeus
Zeus是Alibaba 开源的一个完整的 Hadoop 的作业平台,用于从 Hadoop 任务的调试运行到生产任务的周期调度管理。Zeus支持任务执行的整个生命周期。
从功能上来说,包括支持:
a、Hadoop MapReduce任务的调试运行;
b、Hive任务的调试运行;
c、Shell 任务的运行;
d、Hive元数据的可视化查询与数据预览;
e、Hadoop任务的自动调度;
f、完整的文档管理。
这里需要注意,Zeus是针对Hadoop集群任务定制的,通用性不强。Zeus在Github上线时受到青睐,但是由于长期缺乏维护更新,时隔两年,依然仅支持 Hadoop 1.x版本,后期的Zeus 版本也不再开源了。
二、Azkaban的概述
1、Azkaban的特点
Azkaban 是 LinkedIn 公司创建的批处理工作流作业调度程序,用于运行Hadoop作业。Azkaban 通过作业依赖性解决业务调度顺序,并提供易于使用的 UI 来维护和跟踪工作流程,其主要特点如下。
(1)兼容任何版本的 Hadoop;
(2) 易于使用的 Web UI;
(3)简单的Web和 HTTP工作流上传;
(4)支持工作流定时调度;
(5)支持模块化和可插人;
(6)支持身份验证和授权;
(7)支持用户操作跟踪;
(8)提供有关失败和成功的电子邮件提醒;
(9)提供 SLA 警报和自动查杀功能。
2、Azkaban组成机构
(1) Relational Database(关系数据库 MySQL)
Azkaban 通常使用 MySQL 关系数据库进行数据存储,Azkaban Web Server 和 Azkaban Executor Server 都会访问该关系数据库。
(2) Azkaban Web Server(Web 服务器)
Azkaban Web Server是所有Azkaban的主要管理者,它用于处理项目管理、身份验证调度程序和执行监视,同时还可以用作UI。
(3) Azkaban Executor Server(执行服务器)
Azkaban Executor Server 主要用于处理工作流和 jobs 作业任务的实际执行。在最初的Azkaban 版本中,Azkaban Web Server 和 Azkaban Executor Server 是自动部署在同一服务器中的,后来由于功能需求和扩展,将Executor分成了自己独立的服务器。
3、Azkaban的部署模式
作为Hadoop生态圈的一部分,随着大数据开发的普及以及工作流管理器的需求,Azkaban 也受到了越来越多开发者的使用,因此 Azkaban 版本也在持续更新、改进中。在3.x版本中,Azkaban 提供3种部署模式:轻量级的 solo servermode(独立服务器模式)、重量级的 two server mode(双服务器模式)和 distributed multiple-executor mode(分布式多执行器模式)。
具体可前往官方文档查看。
https://azkaban.github.io/azkaban/docs/latest/
https://azkaban.github.io/azkaban/docs/latest/

(1)solo server mode
在独立服务器模式下,使用的数据库是内嵌的 H2,并且 Web Server(Web服务器)和 Executor Server(执行服务器)都在同一进程中运行。如果只想尝试一下Azkaban的使用,或者是很小规模的测试使用,这种部署模式还是可行的。
(2) two server mode
双服务器模式适用于比较复杂的生产环境,它的数据库会由具有主从设置的 MySQI 实例提供支持。其中,Web 服务器和执行服务器应在不同的进程中运行,以便升级和维护过程中不影响用户。
(3) distributed multiple-executor mode
分布式多执行器模式适用于特别复杂的生产环境,它的数据库同样应该由具有主从设置的 MySQL 实例支持。理想情况下,Web 服务器和执行服务器应在不同的主机中运行,以便升级和维护不影响用户。这种分布式多主机设置的模式为 Azkaban 带来了强大且可扩展的性能。
这里需要注意,H2 是Azkaban 内嵌的数据库,推荐在 solo server mode下使用;而 MySQL 是 Azkaban 到目前为止支持的唯一外部数据库,也更推荐在 two server mode 和 distributed multiple executor mode 下使用。关于其他类型的数据库,最新的官网明中已经说明还在持续探讨和研发中,以后的版本中预计将会支持更多的数据库。
三、Azkaban的部署
不同于其他软件,Azkaban 官方并没有提供 Linux 系统的编译安装包,这个完全需要我们自己根据需求在官网选择指定版本的 Azkaban 源文件,然后进行编译打包。所以,在进行 Azkaban安装配置之前,必须根据需要选择指定的版本进行下载并编译。需要说明的是,Azkaban 编译构建需要使用 Gradle 工具(Linux下运行 Gradle包装器指令 gradlew时会自动下载),并且 Azkaban 3.x需要Java8或更高版本。
1、下载 Azkaban 源文件
Azkaban源文件所在网站
https://github.com/azkaban/azkaban
https://github.com/azkaban/azkaban
安装Git(如果系统中没有)
yum -y install git从GitHub上Azkaban下载源码:
cd /export/softwre
git clone https://github.com/azkaban/azkaban.git
2、Azkaban源文件编译
在/export/software目录下对 Azkaban 的源文件进行解压
tar -zxvf azkaban-3.50.0.tar.gz进入解压后的Azkaban目录,进行编译
cd azkaban-3.50.0
./gradlew build -x test这里需要注意,上述指令会跳过 Azkaban 源文件的测试类部分进行自动编译构建(使用 ./gradlew mild 指令会对整个源文件全部进行编译),整个过程需要联网,如果网络不好会非常耗时连接中断时需要多次重试。执行上述指令进行编译,经过一段时间后必须看到 BUILD SUCCESSFUL 信息才可确定 Azkaban 源文件编译成功,

3、Azkaban安装包获取
编译成功后 压缩包在各个组件的build/distributions目录里:
azkaban-db/build/distributions
azkaban-web-server/build/distributions
azkaban-exec-server/build/distributions
azkaban-solo-server/build/distributions分别在/export/servers/ 目录下创建 azkaban 子目录
mkdir -p /export/servers/azkaban解压安装包
执行如下命令,将上面4个安装包解压到 /export/servers/azkaban/ 目录下
cd /export/servers/azkaban/tar -zxvf /export/software/azkaban-3.50.0/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz -C ./tar -zxvf /export/software/azkaban-3.50.0/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ./tar -zxvf /export/software/azkaban-3.50.0/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ./tar -zxvf /export/software/azkaban-3.50.0/azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ./修改目录名称
为了以后操作方便,将解压安装包产生的4个目录名字中的版本号去掉。
mv azkaban-db-0.1.0-SNAPSHOT azkaban-db
mv azkaban-solo-server-0.1.0-SNAPSHOT azkaban-solo-server
mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec-server
mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web-server
4、MySQL配置
安装数据库可以参考这一篇文章
https://blog.csdn.net/weixin_63507910/article/details/128632422
https://blog.csdn.net/weixin_63507910/article/details/128632422
1、MySQL安装配置
MariaDB 是替换相同 MySQL 版本的二进制代码,是 MySQL 中的增强型替代品。系统中已经安装了MariaDB。
设置开机自启
systemctl enable mariadb 打开数据库服务
systemctl start mariadb 2、设置root密码与授权
如果root密码没有设置过,需要执行下列命令,将数据库超级用户 root 密码设置为 123456
mysql
mysql>use mysql;
mysql>update user set Password=PASSWORD('123456') where user='root';
mysql>grant all PRIVILEGES on *.* to 'root'@'% ' identified by '123456' with grant option;
mysql>FLUSH PRIVILEGES;
mysql>quit修改密码后,数据库的登录命令如下:
mysql -uroot -p123456创建Azkaban数据库及用户
mysql -uroot -p123456
MariaDB>CREATE DATABASE azkaban;3、Azkaban数据库表初始化
连接azkaban数据库
MariaDB>use azkaban;创建数据库表
MariaDB[azkaban]>source /export/servers/azkaban/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql;显示创建的所有对象
MariaDB[azkaban]>show tables这时可以看到刚才创建的所有azkaban数据库表。退出数据库
MariaDB[azkaban]>quit

5、Azkaban Web 服务配置
(1)SSL创建
在目录 /export/servers/azkaban/azkaban-web-server 下执行如下命令,生成 SSL 密匙库文件
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
可以参照下面的创建过程
输入密钥库口令: 123456
再次输入新口令: 123456
您的名字与姓氏是什么?[Unknown]: 回车
您的组织单位名称是什么?[Unknown]: 回车
您的组织名称是什么?[Unknown]: 回车
您所在的城市或区域名称是什么?[Unknown]: 回车
您所在的省/市/自治区名称是什么?[Unknown]: 回车
该单位的双字母国家/地区代码是什么?[Unknown]: cn
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?[否]: 是输入 的密钥口令(如果和密钥库口令相同, 按回车): Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
(2)Azkaban Web 服务器配置
进入azkaban-web-server目录
cd /export/servers/azkaban/azkaban-web-server创建子目录 extlib、logs
mkdir extlib
mkdir logs复制子目录 plugins、conf
cp -r /export/servers/azkaban/azkaban-solo-server/plugins ./
cp -r /export/servers/azkaban/azkaban-solo-server/conf ./
确保存在以下几个目录

(3)配置azkaban.properties
cd /export/servers/azkaban/azkaban-web-server/conf
vi azkaban.properties
具体配置如下。
Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/export/servers/azkaban/azkaban-web-server/web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/export/servers/azkaban/azkaban-web-server/conf/azkaban-users.xml
# Loader for projects
executor.global.properties=/export/servers/azkaban/azkaban-web-server/conf/global.properties
azkaban.project.dir=projects
database.type=MariaDB
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=true
jetty.maxThreads=25
jetty.port=8081
jetty.ssl.port=8443
jetty.keystore=keystore
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=keystore
jetty.trustpassword=123456
# Azkaban Executor 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=/export/servers/azkaban/azkaban-web-server/plugins/jobtypes
(4)配置azkaban-users.xml
(5)配置log4j.properties
vi log4j.properties具体配置如下
log4j.rootLogger=INFO, Console
log4j.logger.azkaban=INFO, server
log4j.appender.server=org.apache.log4j.RollingFileAppender
log4j.appender.server.layout=org.apache.log4j.PatternLayout
log4j.appender.server.File=logs/azkaban-webserver.log
log4j.appender.server.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS Z} %5p [%c{1}] [%t] [Azkaban] %m%n
log4j.appender.server.MaxFileSize=102400MB
log4j.appender.server.MaxBackupIndex=2
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS Z} %5p [%c{1}] [%t] [Azkaban] %m%n
6、 azkaban-exec-server配置
创建子目录 logs
mkdir logs这里可以从刚配置好azkaban-web-server下将conf、plugins、extlib拷贝过来
cd /export/servers/azkaban/azkaban-exec-server/cp -r /export/servers/azkaban/azkaban-web-server/conf/ ./
cp -r /export/servers/azkaban/azkaban-web-server/plugins/ ./
cp -r /export/servers/azkaban/azkaban-web-server/extlib/ ./配置azkaban.properties
cd /export/servers/azkaban/azkaban-exec-server/conf
vi azkaban.properties这里只需要将jetty移除,参照以下代码
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081然后在末尾添加以下代码
# Azkaban Executor settings
executor.port=12321
executor.maxThreads=50
executor.flow.threads=30
azkaban.executor.runtimeProps.override.eager=false
azkaban.properties完整配置如下
# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/export/servers/azkaban/azkaban-web-server/web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/export/servers/azkaban/azkaban-exec-server/conf/azkaban-users.xml
# Loader for projects
executor.global.properties=/export/servers/azkaban/azkaban-exec-server/conf/global.properties
azkaban.project.dir=projects
database.type=MariaDB
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
# Azkaban Executor settings
executor.port=12321
# 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=/export/servers/azkaban/azkaban-exec-server/plugins/jobtypes
# Azkaban Executor settings
executor.port=12321
executor.maxThreads=50
executor.flow.threads=30
azkaban.executor.runtimeProps.override.eager=false
7、Azkzban启动测试
(1)启动azkaban-exec-server
cd /export/servers/azkaban/azkaban-exec-server启动
bin/start-exec.sh关闭
bin/shutdown-exec.sh

启动一次后的目录下已经增加了多个文件,其中最主要的是 executorServerLog__*.out 日志文件和logs目录下的日志文件,通过这两个日志文件都可以查看 Azkaban Executor 服务器的启动情况。关于executorServerLog_*.out日志文件和 logs 目录下的日志文件的主要区别是,Azkaban Executor 服务每启动一次(不论成功与否),都会新生成一个带有日期的 executorServerLog__*.out日志文件来记录当前启动过程的日志信息,并且这个日志文件是Azkaban 内部自带生成的;而 Azkaban Executor 服务不论启动多少次(不论成功与否)。都只会在 logs 目录下生成一个日志文件,然后每新启动一次服务都会将之前的日志文件清除再重新写人新的日志信息,并且这个日志文件路径和名称是由开发者配置的 log4j.properties 决定的。
(2)启动azkaban-web-server
cd /export/servers/azkaban/azkaban-web-server启动
bin/start-web.sh关闭
bin/shutdown-web.sh

(3)访问Azkaban UI
https://localhost:8443
https://localhost:8443 这里需要注意第一次访问 UI 可能会出现警告,这里需要接受风险即可。

四、Azkaban的使用
Azkaban本质是一个工作流管理器,用于对jobs工作任务的调度管理。
1、job任务
Azkaban是对job进行调度管理的,而每一个job任务都是编写在一个后缀名为.job的文本文件中,在该job文件中还可以定义job任务类型、将要运行的任务、依赖的其他job以及job 运行需要的相关参数。单个job 任务定义的示例,具体如下所示。
# foo.job
type=command
command=echo "Hello World"
在上述示例中,job 的 type 类型为 command,而 command 命令参数后指定输出 Hello World信息,输出的相关信息可在 Azkaban Web UI的日志中查看。
| 参数名 | 属性 |
|---|---|
| type | job执行的任务类型 |
| command | 表示要执行的 shell 指令 |
| dependencies | 用于 job 之间建立依赖关系,被依赖的 job 先执行 |
| retries | 将为失败的 job 自动尝试重启的次数 |
| retry.backoff | 每次尝试重启之间的毫秒时间 |
| working.dir | 覆盖执行的工作目录。默认情况下,这是包含正在运行的 job 文件的目录 |
| env.property | 设置环境变量 |
| failure. emails | 以逗号分隔的电子邮件列表,以便在失败时通知 |
| success.emails | 以逗号分隔的电子邮件列表,以便在成功时通知 |
| notify.emails | 以逗号分隔的电子邮件列表,在成功或失败期间通知 |
| 参数名 | 属性 |
|---|---|
| azkaban.job.attempt | 作业的尝试编号。从0开始,每次重试都会递增 |
| azkaban.job.id | job 名称 |
| azkaban.ow.flowid | 执行 job 的工作流名称 |
| azkaban.flow.execid | 分配给正在运行的流的执行标识 |
| arkaban.flow.projectid | 分配给执行项目的标识 |
| azkaban.Now.projectversion | 项目上传版本 |
| azkaban.flow.uuid | 分配给流程执行的唯一标识符 |
| azkaban.fow.start.timestamp | 自纪元开始时间以来的毫秒数 |
| azkaban.flow.start.year | 工作流开始执行的年份 |
| azkaban.flow.start.month | 工作流开始执行的月份 |
| azkaban.flow.start.day | 工作流开始执行的当月的某一天 |
| azkaban.flow.start.hour | 工作流开始执行的一天的某个小时 |
| azkaban.flow.start.minute | 工作流开始执行的分钟 |
| azkaban.flow.start.second | 工作流开始执行的秒数 |
| azkaban.flow.start.milliseconds | 工作流开始执行的毫秒数 |
| azkaban.flow.start.timezone | 工作流开始执行的时区设置 |
需要注意的是,对于 emails 邮件属性,Azkaban 将会从整个工作流中的最后一个job 配置中检索此属性,而配置在工作流中其他 job 的所有邮件属性都将被忽略。
2、工作流
工作流是指具有依赖关系的一组 jobs 任务,被依赖的 job 任务会先执行,想要建立 job 之间的依赖关系需要使用 dependencies 参数,具体示例如下所示。
foo.job 任务文件:
#foo.job
type=command
command=echo foo
bar.job 任务文件:
#bar.job
type=command
dependencies=foo
command=echo bar
上述示例定义了 foojob 和 bar.job 两个任务文件,在 bar.job 中定义了 dependencies=foo 表示 bar.job 依赖于 foo.job,所以 foo.job 会先执行。需要注意的是,可以在 dependencies 后面通过逗号分隔来依赖多个 job,同时要避免循环依赖。工作流会为每一个没有被依赖的job任务创建一个工作流名称,这个工作流名称和没有被依赖的 job 任务同名。如上述示例中,bar.job 依赖于 foo.job,而 bar.job 没有被依赖,所以该过程就会创建一个名为 bar 的工作流。
3、嵌入流
工作流还可以穿插到其他流的某个节点上作为嵌人流。要创建嵌人流,只需创建一个 job 文件,其中设置 type=flow 和 flow.name 为被嵌人流的名称即可,具体示例如下。
# baz.job
type=flow
flow.name=bar
上述示例定义一个baz.job,在该 job 文件中通过 type=flow 和 flow.name=bar 设置嵌人了一个 bar 工作流,从而形参了一个嵌入流。需要说明的是,一个工作流可以在.job文件通过参数设置,实现多次嵌人使用。
五、案例演示
1、依赖任务调度管理
(1)创建 job 文件
创建两个job文件,分别为foo.job和bar.job,代码如下:
#foo.job
type=command
command=echo "hello foo"#bar.job
type=command
command=echo "hello bar"
dependencies=foo
这里需要注意,Azkaban UI 目前仅支持 zip 格式的压缩包,所有需要将两个文件打包成 zip格式,以工作流 bar 命名。
(2)项目创建
登录网址后,点击右上角的 create project 创建一个项目,该窗口会要求创建项目名称和描述。

项目创建成功后,点击 Upload,上传本次项目所需要的 zip 压缩包。

(3)项目执行
点击项目名后的 Execute Flow 执行当前项目。

这里 Schedule 用于进行任务定时执行设置,Execute 用于任务的立即执行。这里点击 Schedule ,对其进行配置。 其中五个选项分别表示,分钟、小时、某个月的哪一天、某个月,某一天的哪周。

关于配置规则右边有明确的说明。
| 时间取值 | 说明 |
|---|---|
| * | 任何值 |
| , | 逗号可以分隔多个时间点,如20,40 |
| - | 用来设定时间区域 |
| / | 表示间隔时间 |
| 1-7 | 该数值会随着时间设置选中区域不同而不同,从而限定可选值。例如鼠标在Day of Week 框,则显示可取值 1~7;而当鼠标在 Month 框,则显示可取值1~12 |
| ? | 表示为空。Quart时间表达式不支持同时指定 day-of-week 和day-of-month,所以其中一个必须为“?” |
配置完后,点击右下角的 Schedule ,会出现一个 Flow Scheduled 的提示框,然后点击Continue 跳转到定时任务界面。

然后点击顶部的Executing选项,会看到正在执行和最近执行完毕两个选项,因为本次任务简单,所有过程短暂。

从上图可以看出,已经执行了两次,这里点击 Execution Id(执行ID)进入查看任务详情。
参考书籍
《Hadoop大数据技术原理与应用》
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
