AZKABAN分享

目录

是什么

怎么安装

怎么用

1 启动 

2 网站 

3 上传zip及效果演示

4 在我们系统中的应用 EMR

怎么实现的(源码)

主要模块

执行流程

部分源码分析

优缺点



是什么

工作流引擎,调度平台,类似oozie

Linkedin开源

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

怎么安装

1 下载并且编译

主项目git clone https://github.com/azkaban/azkaban.git

需要编译,到目录下,执行以下的命令

 ./gradlew distTar -x test

 

2 主要包含三个部分

Azkaban Web服务器,Azkaban执行服务器 ,MySQL数据库

azkaban-web-server-2.5.0.tar.gz

azkaban-executor-server-2.5.0.tar.gz

3 安装配置,很长

3.1 azkaban web服务器安装
解压azkaban-web-server-2.5.0.tar.gz

  命令: tar –zxvf azkaban-web-server-2.5.0.tar.gz

将解压后的azkaban-web-server-2.5.0 移动到 azkaban目录中,并重新命名 webserver

  命令: mv azkaban-web-server-2.5.0 ../azkaban

       cd ../azkaban

       mv azkaban-web-server-2.5.0  server

3.2 azkaban 执行服务器安装

解压azkaban-executor-server-2.5.0.tar.gz

命令:tar –zxvf azkaban-executor-server-2.5.0.tar.gz

将解压后的azkaban-executor-server-2.5.0 移动到 azkaban目录中,并重新命名 executor

命令:mv azkaban-executor-server-2.5.0  ../azkaban

cd ../azkaban

mv azkaban-executor-server-2.5.0 executor

azkaban脚本导入

解压: azkaban-sql-script-2.5.0.tar.gz

命令:tar –zxvf azkaban-sql-script-2.5.0.tar.gz

将解压后的mysql 脚本,导入到mysql中:

进入mysql:

mysql> create database azkaban;

mysql> use azkaban;

mysql> source/home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql;

3.3 生成keysotre的密码和相应信息的密钥库

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

一路默认,最后要输入 jetty的密钥口令,也可以直接回车

最好copy一下: mv keystore /opt/module/azkaban/server

3.4 配置时间

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

怎么用

1 启动 

 启动 web:

webserver/bin目录下,执行

nohup bin/azkaban-web-start.sh 1>/tmp/azstd.out 2>/tmp/azerr.out 

启动:server:

bin/ azkaban-executor-start.sh

默认不是activate 所以: http://192.168.64.131:12321/executor?action=activate

2 网站 

https://4.0.70.175:8083/index

3 上传zip及效果演示

a1.job:

type=command

command=echo 666

a2.job:

type=command

command=echo 888

dependencies=a1

 

hive.job:

type=command

command=chmod -R 777 /user/azkaban/exec-server/executions

command.1=echo 666

command.2=su hdfs -c 'hive -f hive.sql'

 

hive.sql:

show databases;

4 在我们系统中的应用 EMR

api: https://azkaban.readthedocs.io/en/latest/ajaxApi.html

 

怎么实现的(源码)

主要模块

Azkaban的执行代码主要分为四大模块:

(1)azkaban-webserver:主要提供web界面展示和接收http请求的模块
(2)azkaban-execserver:具体执行任务的模块
(3)azkaban-common:公共模块,提供访问数据库,告警等公共类
(4)azkaban-plugins:插件模块,主要包含hive、spark、mr、java等模块

执行流程

总体说明:

Azkaban WebServer需要根据Executor Server的运行状态信息,选择一个合适的Executor Server来运行WorkFlow,然后会将提交到队列中的WorkFlow调度到选定的Executor Server上运行。

从调度层面来看,Azkaban WebServer与Executor Server之间的交互方式非常简单,是通过REST API的方式来进行交互,基本的模式是,Azkaban WebServer根据调度的需要,主动调用Executor Server暴露的REST API来获取相应的资源信息,比如Executor Server的状态信息、分配WorkFlow到指定Executor Server上运行,等等。 

1 提交任务

 这个可以通过网页和api方式实现,因为太简单,就不说了。

2 选择执行器

选择执行器的原则

  1. 能够运行WorkFlow的剩余容量,数值越大越优先
  2. 剩余内存用量,数值越大越优先
  3. 最近分配Flow的时间,数值越大越优先
  4. CPU使用用量,数值越小越优先

基于上面4个指标,创建了4个比较器,使用FactorComparator来表示,对需要比较的一组Executor Server,使用这4个比较器进行比较,通过加权后得到一个得分值,根据该得分值选定Executor Server。

3 执行器执行

执行器收到任务的指令后,先到数据库查询相应的信息,然后就可以开始执行了。

 

4 部分源码分析

时间有限,水平也有限,只看一下azkaban是怎么执行java类的。

先了解一下结构 JavaJob --> JavaProcessJob --> ProcessJob ,箭头是继承

1 通过看配置文件 java/private.properties,我们知道jobtype=javaJob的,是通过JavaJob这个类来执行的

jobtype.class=azkaban.jobtype.JavaJob

2 根据常识,我们认为,这个类,应该是用 run方法去执行。但是 javaJob和和javaProcessJob都没有重写此方法,所以就是执行ProcessJob的run方法了。

3 在ProcessJob的run中,我们看到这一句:commands=getCommandList(),说明他是在构造一个命令,同时我们发现 JavaProcessJob重写了此方法,但是JavaJob没有,说明会用到 JavaProcessJob 里面的 getCommandList。

4 我们又发现 JavaProcessJob 里的 getCommandList 有一句 command+=getJavaClass(); 而且我的 javaJob是有重写这个方法的,所以实际这句会执行 JavaJobRunnerMain.class.getName().

5 JavaJobRunnerMain的构造方法中,调用了 runMethod。而,runMethod里就是传说中的java的反射,然后就把用户的自定义的类给拿到并且执行了。

 

优缺点

azkabançé¨ç½²ä»¥åç®å使ç¨

我们 hadoop 2.73支持

daemon指后台运行

和oozie相比较轻量级

使用过程中,发现有一些不太友好的地方:

1 一个项目只能上传一个zip

2 运行的日志不太好获取,api偏少,查询方法也较为单一

3 用户管理做得不好,目前emr使用的方式是配置一个azkaban用户,每次都是用这个用户去执行作业,导致界面上看到全是azkaban。

参考了:

https://www.cnblogs.com/znicy/p/5742711.html

http://ju.outofmemory.cn/entry/352718

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值