开发者学堂课程【Azkaban 大数据调度系统课程精讲: Azkaban--使用实战--多 job 依赖调度】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/721/detail/12880
Azkaban--使用实战--多 job 依赖调度
多 job 依赖调度:
下面学习 job 依赖调度设置,在执行工作流的时候,很多场景需要设置多个 job 或多个模块,这些 job 存在非常明显的依赖关系,
比如做一件事分为 A,B,C 三个步骤,先 A 后 B 最后 C 的执行顺序,这样拥有依赖性的关系,在 Azkaban 中如下配置:
具体操作如下
整个核心的配置就是在需要配置依赖的 job 中,添加一行 dependencies=名字,根据名字去寻找当前工程叫这个名字的 job,并必须先执行,之后再执行其他 job,这样就形成一个依赖关系。
接下来演示具体依赖调度的配置操作步骤:
1、打开参考资料——Azkadan——job 配置模板——foobar
2、创建有依赖关系的多个 job 描述文件
接下来打开 job 配置模板——foobar 文件夹,文件夹下有三个 job 文件需要调度,分别是:foo.job 、bar.job 、itcast.job。
(1) :在foo.job 文件中
type=command
//类型是 command 命令
command=echo foo
//command 命令是用来输出一个字符串 foo
(2) :在 bar.job 文件中命令
type=command
//类型是command命令
dependencies=foo
//当执行 bar.job ,会做一个判断依赖,判断名字为 foo 的 job 是否执行完毕,(即文件中的foo.job 是否执行完毕)如果 foo.job 执行完毕,后面的 job 继续执行,如果没有执行完毕,后面的 job 不再继续执行,这是一个配置依赖的核心选项
command=echo bar
//command 命令是用来输出一个字符串 bar
(3) :在 itcast.job 这个脚本中
type=command
//类型是 command 命令
dependencies=bar
//当执行 itcast.job ,会做一个判断依赖,判断名字为 bar 的 job 是否执行完毕,(即文件中的bar.job 是否执行完毕)如果 bar.job 执行完毕,后面的 job 继续执行,如果没有执行完毕,后面的 job 不再继续执行
command=echo itcast
//command 命令是用来输出一个字 itcast
当这三个配置文件描述好之后,打包成一个压缩包,它们之间就形成
了一种首尾相连的依赖关系:先执行 foo.job,然后执行 bar.job,
最后执行 itcast.job 的关系。
3、将所有 job 资源文件打包成 zip 文件
选中 foo.job 、bar.job 、itcast.job这三个文件右键选择加到压缩档选项,之后选择 zip 格式。
4、通过 Azkaban 的 web 管理平台创建 project 并上传 job 压缩包
打开浏览器 http://node-2:8443/index.进入到 Azkaban 新建一个 web工程,在 Azkadan 强调一个 project 对应一个 zip 的项目压缩包。
(1) :首先创建 project
点击 Azkaban 界面的 Create Project,创建这个工程
(2):上传 zip 包
当前这是一个空工程,点击 Upload 进行执行操作,选择之前依赖的压缩包 dependence.zip 上传到工程里,这样就完成了 zip 上传。
点击 flows 底下的文件,发现如果配置正确的话,就会解析形成工作流,如果工程模块更加复杂,就可以先执行 A,B依赖于 A,C 依赖于 A,D 依赖于 B,D 依赖于 C,就可以形成非常漂亮的工作流。
只要把 dependencies 这个属性描述到位,它们之间就形成了一种首尾相连的依赖关系。
5、工作流的执行与调度
那么配置且上传好文件,接下来就是针对工作流的执行与调度。
点击 Schedule/Execute.Flow
这个工程有两种选择:
1、想要立即手动执行获得效果,选择 Execute。
2、想要配置周期性的任务调度,选择 Schedule。
先点击 Execute,之后点击 Continue,立即执行。观察一下效果:执行的结果是否正确(是否形成依赖关系:先执行foo,再执行 bar,最后执行 itcast),发现效果上并没有形成依赖关系,在一瞬间完成执行,因为这三个 job 的配置极其简单,它们没有做过多的任务,都是输出一句话。
下面验证这三个不是同一时间完成而是相互依赖执行的:
点击 Job List,描绘工作的列表,有三个 job,分别是 foo、bar、itcast。
类型都是 command,根据 Timeline ,发现这三个 job 绝对不是同时执行的,只不过每个执行的时间都很快,所以导致三个文件在一瞬间执行完成。根据 Timeline 的曲线,明确先执行 foo.job,然后执行 bar.job,最后执行 itcast.job的关系。
当点击 每个 job 的Detail ,查看每个 job 执行结果的相关信息,点击 foo 的 Detail,发现 Starting job fool,最后输出 foo,foo 正是 command=echo foo 打印出来的结果,这里做的是非常简单的任务,同样,对于其他的 job,通过此方法也可以验证执行结果的是否正确。
以上就完成了 job 依赖调度。
整个依赖的核心:dependencies 的一个选项,根据 dependencies 后面跟随的名字去寻找当前工程叫这个名字的 job的配置文件,如果有,就形成一种依赖关系,否则就会解析出错。
以上就是 Askaban 针对多 job 依赖的调度配置。