Azkaban - 入门教程

一、简介

1、介绍

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

官网地址https://azkaban.github.io/

2、工作流调度系统

1)一个完整的数据分析系统通常都是由大量任务单元组成: Shell 脚本程序,Java程序,MapReduce程序、Hive脚本等

2)各任务单元之间存在时间先后及前后依赖关系

3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;

例如,有这样一个需求,某个业务系统每天产生 20G 原始数据,每天都要对其进行处理。

处理步骤如下所示:

  1. 通过Hadoop先将原始数据上传到HDFS上(HDFS的操作);

  2. 使用MapReduce对原始数据进行清洗(MapReduce的操作);

  3. 将清洗后的数据导入到hive表中(hive的导入操作);

  4. 对Hive中多个表的数据进行JOIN处理,得到一张hive的明细表(创建中间表);

  5. 通过对明细表的统计和分析,得到结果报表信息(hive的查询操作);

3、特点

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

4、架构

  1. AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者, 用户登录认证、负责project 管理、定时执行工作流、跟踪工作流执行进度等一 系列任务。

  2. AzkabanExecutorServer:负责具体的工作流的提交、执行,通过mysql数据库来协调任务的执行。

  3. 关系型数据库(MySQL):存储大部分执行流状态,AzkabanWebServer 和 AzkabanExecutorServer 都需要访问数据库。

二、安装与启动

1、准备工作

(1)上传并解压

下载地址http://azkaban.github.io/downloads.html 将Azkaban Web 服务器、Azkaban 执行服务器、Azkaban 的sql执行脚本上传到/opt/software目录下,并解压

a) azkaban-web-server-2.5.0.tar.gz

b) azkaban-executor-server-2.5.0.tar.gz

c) azkaban-sql-script-2.5.0.tar.gz

(2)执行sql脚本

创建azkaban数据库,并将解压的脚本导入到azkaban数据库。

(3)生成密钥对和证书

Keytool是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

-keystore 指定密钥库的名称及位置(产生的各类信息将存在.keystore文件中)

-genkey(或者-genkeypair) 生成密钥对

-alias 为生成的密钥对指定别名,如果没有默认是mykey

-keyalg 指定密钥的算法 RSA/DSA 默认是DSA

在web目录下进行创建

2、修改配置文件

(1)修改web服务器配置

1)在server/conf目录,修改azkaban.properties文件

......

#默认web server存放web文件的目录

web.resource.dir=/opt/module/azkaban/server/web/

#默认时区,已改为亚洲/上海 默认为美国

default.timezone.id=Asia/Shanghai

#Azkaban UserManager class

user.manager.class=azkaban.user.XmlUserManager

#用户权限管理默认类(绝对路径) user.manager.xml.file=/opt/module/azkaban/server/conf/azkaban-users.xml

#Loader for projects #global配置文件所在位置(绝对路径)

executor.global.properties=/opt/module/azkaban/executor/conf/global.pro perties azkaban.project.dir=projects

#数据库类型

database.type=mysql

#端口号

mysql.port=3306

#数据库连接IP

mysql.host=hd01

#数据库实例名

mysql.database=azkaban

#数据库用户名

mysql.user=root

#数据库密码

mysql.password=root

#最大连接数

mysql.numconnections=100

Velocity dev mode

velocity.dev.mode=false

Azkaban Jetty server properties.

Jetty服务器属性.

#最大线程数

jetty.maxThreads=25

#Jetty SSL端口

jetty.ssl.port=8443

#Jetty端口

jetty.port=8081

#SSL文件名(绝对路径)

jetty.keystore=/opt/module/azkaban/server/keystore

#SSL文件密码

jetty.password=123456

#Jetty主密码与keystore文件相同

jetty.keypassword=123456

#SSL文件名(绝对路径)

jetty.truststore=/opt/module/azkaban/server/keystore

#SSL文件密码

jetty.trustpassword=123456

Azkaban Executor settings

executor.port=12321

........

2)修改用户配置

在server/conf目录,修改azkaban-users.xml文件

<azkaban-users>

<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />

<user username="metrics" password="metrics" roles="metrics"/>

<user username="admin" password="admin" roles="admin,metrics"/>

<role name="admin" permissions="ADMIN" />

<role name="metrics" permissions="METRICS"/>

</azkaban-users>

(2)执行服务器配置

修改executor/conf目录下的azkaban.properties

#Azkaban

#时区

default.timezone.id=Asia/Shanghai

Azkaban JobTypes Plugins

#jobtype 插件所在位置

azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects executor.global.properties=/opt/module/azkaban/executor/conf/global.properties azkaban.project.dir=projects

database.type=mysql

mysql.port=3306

mysql.host=192.168.10.139

mysql.database=azkaban

mysql.user=root

mysql.password=root

mysql.numconnections=100

Azkaban Executor settings

#最大线程数

executor.maxThreads=50

#端口号(如修改,请与web服务中一致)

executor.port=12321

#线程数

executor.flow.threads=30

3、启动服务

注意: 先执行executor,再执行web,避免Web Server会因为找不到执行器启动失败。

启动Executor服务器

/opt/module/azkaban/executor/bin/azkaban-executor-start.sh

启动Web服务器

/opt/module/azkaban/server/bin/azkaban-web-start.sh

4、访问

https://服务器IP地址:8443,即可访问 azkaban 服务了。

三、实战案例

1、入门案例

输出:HelloWord

(1)创建 .job文件

第一个入门案例

type=command

command= echo 'hello word azkaban'

(2)打包成zip文件

(3)上传文件

创建项目

上传文件

(4)执行任务

绿色表示执行成功

(5)查看日志

点击details

2、相对文件案例

(1)编写一个shell文件

hello.sh

echo 'Hello Word Lisi'

(2)编写job文件

type=command

command=sh hello.sh

(3)打包

将shell文件和job文件打包成一个zip文件

(4)上传执行

(5)查看日志

3、邮件通知

(1)修改配置文件

修改server/conf目录下的azkaban.properties 文件

......

mail settings

发送者

mail.sender=xxx@qq.com

smtp地址

mail.host=smtp.qq.com

邮箱用户名(邮箱)

mail.user=xxx@qq.com

邮箱密码(一般为授权码)

mail.password=eqewq22312

job.failure.email=

job.success.email=

lockdown.create.projects=false

cache.directory=cache

(2)在执行任务时配置邮箱通知

4、多工作流案例

例如:实现如图案例

(1)创建job文件

dependencies:需要依赖的job

job-1

type=command

command= echo '我是 job-1'

job-2

type=command

dependencies=job-1

command=echo '我是 job-2'

job-3

type=command

dependencies=job-1

command=echo '我是 job-3'

job-4

type=command

dependencies=job-2,job-3

command=echo '我是 job-4'

(2)打包zip文件并上传

(3)执行查看结果

发现job2和job3是同时执行的

5、执行Java任务

(1)编写Java代码

java 复制代码
public class Main {
    public static void main(String[] args) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("/opt/datas/test.txt");
            fos.write("hello world azkaban".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

(2)编译

(3)编写job文件

type=javaprocess

java.class=com.hk.Main

#classpath=./*

classpath=AzKaban-demo-1.0-SNAPSHOT.jar

(4)打包

将jar包和job文件一起打包

(5)执行查看结果

6、HDFS任务

案例:在hdfs上创建一个azkaban文件夹

(1)编写job文件

type=command

command=hadoop fs -mkdir /azkaban

(2)创建项目并上传文件

(3)启动hadoop

(4)执行任务查看结果

7、MapReduce任务

(1)编写job

type=command

command=hadoop jar /opt/module/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /azkaban/input /azkaban/output

(2)创建项目并上传文件

(3)上传文件到hdfs的/azkaban/input目录下

hdfs dfs -put hello.txt /azkaban/input

(4)执行并查看结果

8、Hive 任务

(1)创建hive的sql脚本

vim student.sql

use default;

drop table student;

create table student(id int, name string)

row format delimited fields terminated by ',';

load data local inpath '/opt/module/datas/student.txt' into table student;

insert overwrite local directory '/opt/module/datas/student'

row format delimited fields terminated by ','

select * from student;

(2)创建job文件

type=command

command=hive -f /opt/module/azkaban/jobs/student.sql

(3)上传后运行查看结果

cat /opt/module/datas/student/000000_0

1001,lisi

1002,wangwu

9、job传参

(1)修改hello_word案例

(2)修改为接收外部参数

(3)执行的时候点击 Flow Parameters

(4)给参数赋值

(5)执行查看输出结果

相关推荐
清 晨2 小时前
海外社媒内容审核加强跨境卖家如何避免限流
大数据·人工智能·矩阵·新媒体运营·内容营销
盟接之桥2 小时前
打破全球供应链“黑盒”:盟接之桥®如何用标准化EDI重塑中国制造的数据主权与交付底气
大数据·网络·人工智能·汽车·制造
jedi-knight2 小时前
Qwen3.5-27B 64K-Tools:一个面向本地部署的改进版大模型
大数据·数据库·人工智能
江瀚视野2 小时前
三亚首启两大创新店态,名创优品战略突围的逻辑何在?
大数据·人工智能
2501_933329553 小时前
企业媒体发布技术化转型:Infoseek舆情系统架构分析与应用实践
大数据·人工智能·自然语言处理·数据库开发
衫水3 小时前
企业级 Text-to-SQL 完整执行流程
大数据·数据库·sql
HUGu RGIN3 小时前
探索Spring Cloud Config:构建高可用的配置中心
大数据·elasticsearch·搜索引擎
isNotNullX3 小时前
2026年国产数据同步工具对比评测:DataX、Canal、Flink CDC与FineDataLink深度横评
大数据·flink
武子康4 小时前
大数据-273 Spark MLib-决策树分类算法详解:ID3、C4.5、CART 与剪枝原理
大数据·后端·spark