一、Azkaban简介
二、编译Azkaban&&特性了解
1、官网:https://azkaban.github.io/
2、Azkaban是一个批处理工作流作业调度器,由领英创建的运行Hadoop job的;Azkaban通过作业的依赖关系来解决排序问题,并提供一个易于使用的web用户界面来维护和追踪你的工作流。
官方的定义:
官网如下图,是很复杂的,需要编写文件才能阐述出文件的依赖关系:
1、Compatible with any version of Hadoop
能够兼容各种版本的Hadoop
2、Easy to use web UI
轻易使用Web UI
3、Simple web and http workflow uploads
简单的web和http工作流
4、Project workspaces
工作空间
5、Scheduling of workflows
工作流调度
6、Modular and pluginable
模块化和可插拔的
7、Authentication and Authorization
验证和授权
8、Tracking of user actions
追踪用户行为
9、Email alerts on failure and successes
邮件发送不管成功还是失败
10、SLA alerting and auto killing
11、Retrying of failed jobs
失败任务的重试
如上这些是调度系统的最低要求。
from ETL jobs to data analytics products.
Azkaban:调度框架
首先要做ETL --> 做各种维度指标的统计分析,
使用MR实现,shell1
Hive SQL --> shell2
凌晨1店ETL ⇒ ???
SQL ???
解析:
基于Hadoop的离线电商项目分析:第一步做ETL,然后做的是各种维度的坐标统计分析,使用MR实现的,最终底层是shell1,然后使用的是Hive SQL,底层调用的也是shell;比如ETL是凌晨1点开始跑的,我们怎么知道这个ETL作业是多久跑完的呢?
之前是一种预估的方式,凌晨1点的ETL比如在2点之前跑完还是2点之后跑完,这个SQL应该是什么时候开始跑呢,两个shell之间都是有依赖关系的;crontab的方式是一个黑窗口的方式,作业跑多久根本就不知道,除非你去记录这个作业运行多久。
Ozzie(HUE):底层xml,是一个重量级的过程
Azkaban:稍微轻量级一些,还是很难用的,很多配置需要手工开发
以后工作了找到大公司还好,一般都有自己的调度框架,如果是中小型公司的话,基本上就是这两个调度框架Ozzie或者Azkaban各选一个进行使用。
生产上CM,可以在HUE上直接配置Ozzie,底层走的全是xml,页面是支持托拉拽的,是一个重量级的过程;如果没有使用CM,需要去写xml,是一个很痛苦的过程。
1、我们使用的是Azkaban-3.57.0版本,在github上我们不使用pre-release版本,我们使用不带pre的版本;
Azkaban builds use Gradle (downloads automatically when run using gradlew which is the Gradle wrapper) and requires Java 8 or higher.
可以简单的只使用一句话进行编译,跳过测试:
如下是官方给的如何编译Gradle:
# Build Azkaban
./gradlew build
# Clean the build
./gradlew clean
# Build and install distributions
./gradlew installDist
# Run tests
./gradlew test
# Build without running tests
./gradlew build -x test
直接使用这一步命令会出现报错:
1、第一个需要安装git
1、第一种叫:solo-server
2、第二种叫:distributed multiple-executor mode
它的DB需要一个MySQL的主备,多个host的方式会带来更好的健壮性;
Gradle creates .tar.gz files inside project directories. eg. ./azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz. Untar using tar -xvzf path/to/azkaban-*.tar.gz.
编译完成后,在build目录下(/home/hadoop/app/azkaban-3.57.0/azkaban-solo-server/build)会出现一个distributions文件夹:进入这个目录下,会有两个tar.gz的压缩包;我们任意对它进行解压到app目录下去,进入到这个目录中去:
1、编译完成后会有如下两个tar包:
[hadoop@hadoop004 distributions]$ ll
total 46764
-rw-rw-r--. 1 hadoop hadoop 23880355 Jun 11 09:12 azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
-rw-rw-r--. 1 hadoop hadoop 24001460 Jun 11 09:12 azkaban-solo-server-0.1.0-SNAPSHOT.zip
2、路径如下所示:
[hadoop@hadoop004 distributions]$ pwd
/home/hadoop/app/azkaban-3.57.0/azkaban-solo-server/build/distributions
3、将tar包解压到~/app目录下:
4、解压后的目录如下所示:
[hadoop@hadoop004 azkaban-solo-server-0.1.0-SNAPSHOT]$ ll
total 24
drwxr-xr-x. 3 hadoop hadoop 4096 Jun 11 09:12 bin 启动停止脚本目录
drwxr-xr-x. 2 hadoop hadoop 4096 Jun 11 09:12 conf 3个配置文件
drwxr-xr-x. 2 hadoop hadoop 4096 Jun 11 09:12 lib 依赖的jar包
drwxr-xr-x. 3 hadoop hadoop 4096 Jun 11 09:12 plugins 插件
drwxr-xr-x. 2 hadoop hadoop 4096 Jun 11 09:12 sql 一堆SQL,就像Hive在MySQL上的元数据库一样
drwxr-xr-x. 6 hadoop hadoop 4096 Jun 11 09:12 web 最终Web UI的访问页面
1、进入到conf目录下,修改azkaban.properties,修改
azkaban.name=Azkaban
azkaban.label=Ruozedata Azkaban
2、配置Azkaban的user:
增加一列用户信息:
3、开始启动,jps查看就会多出一个进程:
bin/start-solo.sh
[hadoop@hadoop004 bin]$ jps
5689 GradleDaemon
4、日志目录:
存放在在local下面
5、azkaban的默认端口是8081
这个solo模式的一个特性:
1、在windows本地目录下新建两个文件:分别输入如下
flow20.project
azkaban-flow-version: 2.0
basic.flow中输入如下:
nodes:
- name: jobA
type: command
config:
command: echo "This is an echoed text."
2、这两个文件需要放在一个文件夹下面,并且使用zip压缩
1、basic.flow中的代码如下:这个包要写全路径:
nodes:
- name: Hadoop job
type: command
config:
command: hadoop jar /home/hadoop/app/hadoop/share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.16.2.jar wordcount /data/input/ruozeinput.txt /data/ouput7
2、结果运行出来是没问题的,正常的会跑一个yarn
3、再次运行这个作业的时候会报错,提示输出目录已经存在,那我们能不能直接在页面上进行修改呢?
假定有几个流程: a b c d;
既可以单独跑,也可以依赖着跑
以Flow Parameters为例,Add temporary flow parameters that are used to override global settings for each job.
调度系统是给用户使用的:
对于调度系统来说,所有的东西都需要做到托拉拽,要做到jobA、jobB、jobC这三个文件直接通过托拉拽连线的方式实现,这种方式真正的难度在哪里?
比如设计一个Spark作业,名字叫做Spark Plugin,需要哪些必备的参数?