Azkaban

    技术2023-12-02  104

    文章目录

    一、Azkaban概述1.1 为什么需要工作流调度系统1.2 Azkaban特点1.3 常见工作流调度系统1.4 Azkaban的架构1.5 启动Azkaban 二、Azkaban实战2.1 Hello World2.2 传参2.3 调度Shell脚本2.4 设置通知邮箱2.5 多任务工作流配置2.6 java操作任务2.7 HDFS操作任务2.8 MapReduce任务2.9 Hive脚本任务

    一、Azkaban概述

    Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies来设置依赖关系。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

    1.1 为什么需要工作流调度系统

    一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,MapReduce程序、hive脚本等;各任务单元之间存在时间先后及前后依赖关系;为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。

    1.2 Azkaban特点

    兼容任何版本的Hadoop易于使用的Web用户界面简单的工作流的上传方便设置任务之间的关系调度工作流模块化和可插拔的插件机制认证/授权(权限的工作)能够杀死并重新启动工作流有关失败和成功的电子邮件提醒

    1.3 常见工作流调度系统

    简单的任务调度:直接使用crontab实现;复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban等。

    1.4 Azkaban的架构

    Azkaban由三个关键组件构成:

    AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。AzkabanExecutorServer:负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行。关系型数据库(MySQL):存储大部分执行流状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。

    1.5 启动Azkaban

    启动executor服务器:

    [root@hadoop100 executor]# bin/azkaban-executor-start.sh

    启动web服务器:

    [root@hadoop100 executor]# bin/azkaban-web-start.sh

    Azkaban Web页面:

    二、Azkaban实战

    2.1 Hello World

    ①创建job描述文件

    type=command command=echo 'this is my first job'

    ②将job资源文件打包成zip文件

    目前,Azkaban上传的工作流文件只支持xxx.zip文件。zip应包含xxx.job运行作业所需的文件和作业文件(文件名后缀必须以.job结尾,否则无法识别),作业名称在项目中必须是唯一的。

    ③通过Azkaban的web管理平台创建project并上传job的zip包 ④启动执行该job 设置定时任务: ⑤执行成功 Job Log: Flow Log:

    2.2 传参

    ①创建job描述文件

    type=command command=echo ${param}

    ②打包上传执行任务并添加参数

    2.3 调度Shell脚本

    ①创建job描述文件

    type=command command=sh p1.sh

    ②创建Shell脚本p1.sh

    date >> /root/datas/date.log

    ③打包执行任务

    2.4 设置通知邮箱

    ①配置server下的配置文件azkaban.properties ②添加发送成功通知邮箱

    2.5 多任务工作流配置

    ①创建有依赖关系的多个job描述

    #first.job type=command command=echo 'this is my first job' #second.job type=command command=echo 'this is my second job' dependencies=first #third.job type=command command=echo 'this is my third job' dependencies=first #fourth.job type=command command=echo 'this is my fourth job' dependencies=second,third

    ②打包上传执行任务

    2.6 java操作任务

    ①编写java程序

    public class AzkabanTest { public void run() throws IOException { OutputStream os = new FileOutputStream("/root/datas/output.log"); os.write("this is a java progress".getBytes()); os.close(); } public static void main(String[] args) throws IOException { AzkabanTest test = new AzkabanTest(); test.run(); } }

    ②将java程序打成jar包,创建lib目录,将jar放入lib内

    ③编写job文件

    #azkabanJava.job type=javaprocess java.class=com.hucheng.AzkabanTest classpath=/opt/module/azkaban/lib/*

    ④打包上传执行任务

    [root@hadoop100 datas]# cat output.log this is a java progress

    2.7 HDFS操作任务

    ①编写job文件

    #hdfs.job type=command command=/opt/module/hadoop-2.7.2/bin/hadoop fs -mkdir /azkaban

    ②打包上传执行任务

    2.8 MapReduce任务

    ①编写job文件

    #mapreduce.job type=command command=/opt/module/hadoop-2.7.2/bin/hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /test/hello.txt /output

    ②打包上传执行任务

    2.9 Hive脚本任务

    ①编写job文件

    #hive.job type=command command=/opt/module/hive-1.2.1/bin/hive -e "select * from stu;"

    ②打包上传执行任务

    Processed: 0.015, SQL: 9