文章目录
1、简介
Azkaban 是由 Linkedin 公司推出的一个批量工作流任务调度器,主要用于在一个工作流
内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的 key:value 对的方式,通
过配置中的 dependencies 来设置依赖关系。Azkaban 使用 job 配置文件建立任务之间的依赖
关系,并提供一个易于使用的 web 用户界面维护和跟踪你的工作流
2、Azkaban特点
兼容任何版本的 hadoop
易于使用的 Web 用户界面
简单的工作流的上传
方便设置任务之间的关系
调度工作流
模块化和可插拔的插件机制
认证/授权(权限的工作)
能够杀死并重新启动工作流
有关失败和成功的电子邮件提醒
3、ooize 和 azkaban 特性对比
4、安装流程(确保时间同步)
下面的test为主机名
1.解压安装包,并将所有文件放入/usr/azkaban下
tar -zxvf azkaban-web-server-2.5.0.tar.gz tar -zxvf azkaban-sql-script-2.5.0.tar.gz tar -zxvf azkaban-jobtype-2.5.0.tar.gz tar -zxvf azkaban-hdfs-viewer-2.5.0.tar.gz tar -zxvf azkaban-executor-server-2.5.0.tar.gz
2.将表结构导入到mysql数据库中
mysql> create database azkaban; mysql> use azkaban; mysql> source /usr/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql; mysql> create user 'hive' identified by 'hive';(创建hive用户的两步是之前装hive就有的用户,仅做参考) mysql> grant all privileges on *.* to 'hive' with grant option; mysql> flush privileges;
3.生成keystore文件
在/usr/azkaban/azkaban-web-2.5.0 路径下输入如下命令keytool -keystore keystore -alias jetty -genkey -keyalg RSA
输入密钥库口令: password (jetty.password 的值) 再次输入新口令: password 您的名字与姓氏是什么? [Unknown]: zhang 您的组织单位名称是什么? [Unknown]: dove 您的组织名称是什么? [Unknown]: dove 您所在的城市或区域名称是什么? [Unknown]: shanghai 您所在的省/市/自治区名称是什么? [Unknown]: shanghai 该单位的双字母国家/地区代码是什么? [Unknown]: china CN=zhang, OU=dove, O=dove, L=shanghai, ST=shanghai, C=china是否正确? [否]: y 输入 <jetty> 的密钥口令 (jetty.trustpassword) (如果和密钥库口令相同, 按回车):
会生成一个 keystore 文件,然后执行如下命令移动到bin目录下
mv ./keystore ./bin/
4.配置azkaban.properties文件(cd /usr/azkaban/azkaban-web-2.5.0/conf)
#修改的配置,主要是路径 web.resource.dir=./../web/ default.timezone.id=Asia/Shanghai user.manager.xml.file=./../conf/azkaban-users.xml executor.global.properties=./../conf/global.properties #数据库部分修改或添加 database.type=mysql mysql.port=3306 mysql.host=test mysql.database=azkaban mysql.user=hive mysql.password=hive mysql.numconnections=100 #添加或修改 jetty.maxThreads=25 jetty.ssl.port=8443 jetty.port=8081 jetty.keystore=keystore jetty.password=password jetty.keypassword=password jetty.truststore=keystore jetty.trustpassword=password
5.配置azkaban.properties文件(cd /usr/azkaban/azkaban-executor-2.5.0/conf)
#修改配置 default.timezone.id=Asia/Shanghai azkaban.jobtype.plugin.dir=./../plugins/jobtypes executor.global.properties=./../conf/global.properties #修改数据库账号密码和host database.type=mysql mysql.port=3306 mysql.host=test mysql.database=azkaban (这个原先是 azkaban2 ) mysql.user=hive mysql.password=hive mysql.numconnections=100
6.在/usr/azkaban/azkaban-executor-2.5.0目录下
mkdir -p plugins/jobtypes
7.启动 Web Server和 Executor Server
在home目录执行(执行不了就去对应的bin目录执行)
./bin/azkaban-executor-start.sh .bin/azkaban-web-start.sh
8.https://test:8443端口访问并输入azkaban/azkaban (账号密码在 /usr/azkaban/azkaban-web-2.5.0/conf/azkaban-users.xml)
5、案例实操
1)、单job工作流(指定目录创建目录)
①、创建 job 描述文件(记住后面不要接空格)
#command.job
type=command
command=mkdir /usr/azkaban/test_azkaban
②、将 job 资源文件打包成 zip 文件
③、通过 azkaban 的 web 管理平台创建 project 并上传 job 的 zip 包
先创建一个project,右上角Create Project(建议命名project_1),然后点击右上角Upload把zip文件上传
④、启动执行该 job
点击项目内的Execute FLow即可执行,点击后左边的Schedule是定时,这边不用定时直接点击右边Execute即可执行
⑤、查看结果
再看看虚拟机内是否已经有此目录文件,确认结果
2)、多job工作流(依赖关系)
只有当第一个执行完后第二个才可以执行,这边用的是先创建目录再在此目录下创建文件
具体操作和单job一样,只是描述文件不同,两个文件同时压缩即可
# foo.job
type=command
command=mkdir /usr/azkaban/az
# bar.job
type=command
dependencies=foo
command=touch /usr/azkaban/az/test.txt
3)、MapReduce任务(wordcount)
①、创建描述文件
# foo.job
type=command
command=yarn jar 1.jar wordcount /input /output
代码里1是jar包的名
②、将jar包和描述文件一起打包
③、执行,操作同1)
注意:确保hdfs上有input目录且该目录下有待处理的文件
4)、hive任务
①、创建 job描述文件和hive脚本
hive.sql
use default;
drop table if exists aztest;
drop table if exists azres;
create external table aztest(id int, name string)
row format delimited fields terminated by '\t'
location '/Azkaban';
create table azres as select * from aztest;
insert overwrite directory '/Azkaban/hiveoutput' select count(1) from aztest;
hive.job
# hive.job
type=command
command=/usr/local/soft/hive-1.2.1/bin/hive -f 'hive.sql'
hdfs上的路径里要有数据,上面是在/Azkaban下放置了student表
②、将所有job资源文件(sql+job)打到一个zip包中
③、在azkaban的web管理界面创建工程并上传zip包并启动任务