图解实现依赖调度
0、界面上的功能
1、开发规则
step1:需要创建一个project
任何一个工作流都有独立的project进行管理【权限、运行】
step2:需要开发一个工作流
一个工作流里可以有多个job,也可以只有一个job,job就是一个程序
- 工作流的开发规则
Select the archive file of your workflow files that you want to upload.
Currently Azkaban only supports *.zip files.
The zip should contain the *.job files and any files needed to run your jobs.
Job names must be unique in a project.
flow.zip
first.job
second.job
third.job
fourth.job
- 一个
工作流
就是一个.zip
格式的压缩文件
.- zip文件中包含这个工作流的所有job,每个job是一个.job结尾
的文件 - job的名称
在一个工作流中不允许重复
tips:zip文件打开,里面不能包含目录,打开的第一层就是.job文件
- job文件如何开发?
- 使用properties格式进行开发
.job文件中,最常用以及最普遍的方式
- 使用properties格式进行开发
type=command
command={Linux的一条命令}
- command类型的job
- 用于执行Linux中的一条命令
- 为什么?
所有类型的程序都可以通过Linux命令执行
- Hadoop程序:yarn jar xxx.jar mainclass args
- Hive程序:hive -f xxx.sql
- Sqoop程序:sqoop --options-file
- Flume:flume-ng agetn -c -f -n
- Spark程序:spark-submit –jar xxxx.jar –class ……
step3:打包上传
将所有的job进行打包成zip文件,上传到Project中
step4:在project中运行
2、job开发测试
需求:运行MapReduce程序实现wordcount
step1:创建一个project
step2:开发一个工作流,只有一个程序
- 创建一个.job文件,编辑job的功能
type=command
command=yarn jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar wordcount /wordcount/input /wordcount/output8
- 将工作流中所有的job文件打成zip文件
step3:上传这个工作流到Project中
Step4:运行这个工作流
3、工作流开发测试
需求:实现效果如下图
- 如何能决定依赖关系,就是顺序呢?
- dependencies:指定当前job依赖于哪个job
step1:创建project
step2:开发工作流
- joba
type=command
command= flume-ng agent ……
- jobb
type=command
dependencies=joba
command= hdfs dfs -put
- jobc
type=command
dependencies=joba
command= yarn jar
- jobd
type=command
dependencies=joba
command= hive -f
- jobe
type=command
dependencies=jobb,jobc,jobd
command= sqoop --option-file
- dependencies:用于定义依赖关系,也就是执行的先后顺序
tips:如果你想让你的程序能运行Flume、Sqoop、Hive,你必须保证你的所有的Executor节点都有这些工具
step3:上传
step4:运行
4、加入子流:subflow
需求:实现类似于官网效果
- 如果我的工作流中包含子流怎么办?
- type=flow
- dependencies=依赖的job名称
- flow.name:指定工作流的名称
使用最后一个job的名称作为工作流的名称
step1:创建project
step2:开发工作流
- 工作流1
- 工作流2
- 关系:jobb就是工作流2
- jobb
type=flow
dependencies=joba
flow.name=subflow
- 任何一个工作流,使用最后一个job的名称作为工作流的名称
step3:上传
step4:运行