欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

分布式任务调度框架 Azkaban —— Flow 1.0 的使用

程序员文章站 2022-05-15 14:57:43
一、简介 Azkaban 主要通过界面上传配置文件来进行任务的调度。它有两个重要的概念: Job : 你需要执行的调度任务; Flow :一个获取多个 Job 及它们之间的依赖关系所组成的图表叫做 Flow。 目前 Azkaban 3.x 同时支持 Flow 1.0 和 Flow 2.0,本文主要讲 ......

一、简介

azkaban 主要通过界面上传配置文件来进行任务的调度。它有两个重要的概念:

  • job: 你需要执行的调度任务;
  • flow:一个获取多个 job 及它们之间的依赖关系所组成的图表叫做 flow。

目前 azkaban 3.x 同时支持 flow 1.0 和 flow 2.0,本文主要讲解 flow 1.0 的使用,下一篇文章会讲解 flow 2.0 的使用。

二、基本任务调度

2.1 新建项目

在 azkaban 主界面可以创建对应的项目:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

2.2 任务配置

新建任务配置文件 hello-azkaban.job,内容如下。这里的任务很简单,就是输出一句 'hello azkaban!'

#command.job
type=command
command=echo 'hello azkaban!'

2.3 打包上传

hello-azkaban.job 打包为 zip 压缩文件:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

通过 web ui 界面上传:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

上传成功后可以看到对应的 flows:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

2.4 执行任务

点击页面上的 execute flow 执行任务:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

2.5 执行结果

点击 detail 可以查看到任务的执行日志:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用
分布式任务调度框架  Azkaban —— Flow 1.0 的使用

三、多任务调度

3.1 依赖配置

这里假设我们有五个任务(taska——taske),d 任务需要在 a,b,c 任务执行完成后才能执行,而 e 任务则需要在 d 任务执行完成后才能执行,这种情况下需要使用 dependencies 属性定义其依赖关系。各任务配置如下:

task-a.job :

type=command
command=echo 'task a'

task-b.job :

type=command
command=echo 'task b'

task-c.job :

type=command
command=echo 'task c'

task-d.job :

type=command
command=echo 'task d'
dependencies=task-a,task-b,task-c

task-e.job :

type=command
command=echo 'task e'
dependencies=task-d

3.2 压缩上传

压缩后进行上传,这里需要注意的是一个 project 只能接收一个压缩包,这里我还沿用上面的 project,默认后面的压缩包会覆盖前面的压缩包:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

3.3 依赖关系

多个任务存在依赖时,默认采用最后一个任务的文件名作为 flow 的名称,其依赖关系如图:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

3.4 执行结果

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

从这个案例可以看出,flow1.0 无法通过一个 job 文件来完成多个任务的配置,但是 flow 2.0 就很好的解决了这个问题。

四、调度hdfs作业

步骤与上面的步骤一致,这里以查看 hdfs 上的文件列表为例。命令建议采用完整路径,配置文件如下:

type=command
command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop fs -ls /

执行结果:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

五、调度mr作业

mr 作业配置:

type=command
command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop jar /usr/app/hadoop-2.6.0-cdh5.15.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.2.jar pi 3 3

执行结果:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

六、调度hive作业

作业配置:

type=command
command=/usr/app/hive-1.1.0-cdh5.15.2/bin/hive -f 'test.sql'

其中 test.sql 内容如下,创建一张雇员表,然后查看其结构:

create database if not exists hive;
use hive;
drop table if exists emp;
create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) row format delimited fields terminated by '\t';
-- 查看 emp 表的信息
desc emp;

打包的时候将 job 文件与 sql 文件一并进行打包:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

执行结果如下:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

七、在线修改作业配置

在测试时,我们可能需要频繁修改配置,如果每次修改都要重新打包上传,这会比较麻烦。所以 azkaban 支持配置的在线修改,点击需要修改的 flow,就可以进入详情页面:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

在详情页面点击 eidt 按钮可以进入编辑页面:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

在编辑页面可以新增配置或者修改配置:

分布式任务调度框架  Azkaban —— Flow 1.0 的使用

附:可能出现的问题

如果出现以下异常,多半是因为执行主机内存不足,azkaban 要求执行主机的可用内存必须大于 3g 才能执行任务:

cannot request memory (xms 0 kb, xmx 0 kb) from system for job
分布式任务调度框架  Azkaban —— Flow 1.0 的使用

如果你的执行主机没办法增大内存,那么可以通过修改 plugins/jobtypes/ 目录下的 commonprivate.properties 文件来关闭内存检查,配置如下:

memcheck.enabled=false

更多大数据系列文章可以参见 github 开源项目大数据入门指南