初识Azkaban
先说下hadoop 内置工作流的不足
(1)支持job单一
(2)硬编码
(3)无可视化
(4)无调度机制
(5)无容错机制
在这种情况下Azkaban就出现了
1)Azkaban是什么
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
2)Azkaban的功能特点
①Web用户界面
②方便上传工作流
③方便设置任务之间的关系
④工作流调度
⑤认证/授权
⑥能够杀死并重新启动工作流
⑦模块化和可插拔的插件机制
⑧项目工作区
⑨工作流和任务的日志记录和审计
3)Azkaban的架构
MySQL实例 – Azkaban使用MySQL来存储项目和执行
Azkaban Web服务器 – Azkaban使用Jetty作为Web服务器,用作控制器以及提供Web界面
Azkaban执行服务器 – Azkaban执行服务器执行提交工作流
4)Azkaban三种运行模式
①solo server mode
H2
web server和executor server运行在一个进程里
②two server mode
MySQL(主从结构)
web server和executor server运行在不同的进程
③multiple executor mode
MySQL(主从结构)
web server和executor server运行在不同的进程
executor server有多个
Azkaban 安装部署
系统时区配置
1.查看时区
[xxx@single azkaban-web-2.5.0]$ more /etc/sysconfig/clock
ZONE="Asia/Shanghai"
UTC=true
ARC=false
2.修改时区 时区文件都在/usr/share/zoneinfo,复制相应时区覆盖/etc/localtime即可 [lijia@single azkaban-web-2.5.0]$ ll /usr/share/zoneinfo
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
*修改web server 和excutor server 都需要配置时区,必须和系统时区一致 default.timezone.id=Asia/Shanghai
安装mysql
配置mysql
下载mysql数据脚本
wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-sql-script-2.5.0.tar.gz
tar -zxvf azkaban-sql-script-2.5.0.tar.gz –C ~/azkaban/
创建用户、分配权限并执行脚本 mysql –uroot –pxxxx
创建数据库: CREATE DATABASE azkaban;
创建用户名:CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban'
分配权限:GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,INDEX ON `azkaban`.* TO 'azkaban'@'%' WITH GRANT OPTION;
flush privileges;
quit;
通过azkaban账号登录mysql:mysql –uazkaban –pazkaban
Use azkaban;
source ~/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
Azkaban Web Server 安装
1.下载安装包 wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-web-server-2.5.0.tar.gz
tar –zxvf azkaban-web-server-2.5.0.tar.gz –C ~/azkaban/
2.上传依赖包 上传mysql驱动包至 ~/azkaban/azkaban-web-2.5.0/extlib/ 3.生成jetty ssl所需密钥文件 keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password: mysteel
What is your first and last name?
[Unknown]: mysteel
What is the name of your organizational unit?
[Unknown]: mysteel
What is the name of your organization?
[Unknown]: mysteel
What is the name of your City or Locality?
[Unknown]:SH
What is the name of your State or Province?
[Unknown]:SH
What is the two-letter country code for this unit?
[Unknown]:CN
Is CN=mysteel, OU= mysteel, O= mysteel, L=SH, ST=SH, C=CN correct?
[no]: yes
Enter key password for < mysteel >
(RETURN if same as keystore password): mysteel
注意:这里keystore的密码为mysteel,key的密码为mysteel可自行修改 最后将生成的keystore文件放到 Azkaban安装目录中~/azkaban/azkaban-web-2.5.0/ (也可通过修改配置文件改变其默认存放地址)
4.修改配置文件 (conf/azkaban.propreties)
修改首页样式及时区信息 azkaban.name=Job Tasks
azkaban.label=mysteel workflow
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai
修改mysql连接,可自行修改 database.type=mysql
mysql.port=3306
mysql.host=192.168.200.184
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
修改 Jetty 服务器属性,包括 keystore 的相关配置 jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=keystore
jetty.password=mysteel
jetty.keypassword= mysteel
jetty.truststore=keystore
jetty.trustpassword= mysteel
修改邮件设置(可选) mail.sender=xxxxxxx@mysteel.com
mail.host=smtp.126.com
mail.user= xxxxxxx@mysteel.com
mail.password=xxx (注:发送邮箱的密码)
5.用户及权限配置
进入 azkaban web 服务器 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>
Azkaban Executor Server安装
1.下载安装包 wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-executor-server-2.5.0.tar.gz
tar –zxvf azkaban-executor-server-2.5.0.tar.gz –C ~/azkaban/
2.修改配置文件 (conf/azkaban.propreties) 修改时区信息 default.timezone.id=Asia/Shanghai
修改mysql连接,可自行修改 database.type=mysql
mysql.port=3306
mysql.host=192.168.200.184
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
配置端口,默认就好 executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
在web server 的azkaban.properties配置executor的连接,特别注意,如果两个server不是在一台主机上,web server 需要配置executor.host # Azkaban Executor settings
executor.port=12321
executor.host=ip/hostname
启动验证 启动web server ~/azkaban/azkaban-web-2.5.0/bin/azkaban-web-start.sh(azkaban-web-shutdown.sh停止)
访问 https://ip:8443 出现界面安装成功
启动 executor server ~/azkaban/azkaban-executor-2.5.0/bin/azkaban-exec-start.sh(azkaban-executor-shutdown.sh 停止
Azkaban web server插件安装
为了后边插件的安装,需要在${AZKABAN_WEB_SERVER}/plugins/目录下创建viewer目录,用来安装各种viewer插件。当安装好一个插件后需要重启服务,让插件生效。
安装HDFS Viewer插件
1.解压插件
1.解压插件 在viewer目录中解压azkaban-hdfs-viewer-2.5.0.tar.gz,得到azkaban-hdfs-viewer-2.5.0目录,将其更名为hdfs。最终,这个插件的目录路径是:${AZKABAN_WEB_SERVER}/plugins/viewer/hdfs。
2.配置HDFS Viewer
修改${AZKABAN_WEB_SERVER}/plugins/viewer/hdfs/conf/plugin.properties。根据应用场景修改proxy.user。需要注意的是配置viewer.external.classpaths并没有任何效果,不知是bug还是我用错了,以至于需要使用下面的步骤来配置
3.增加依赖jar包
这个版本的Azkaban无法找到Hadoop2中的相关依赖jar,而HDFS Viewer需要以下依赖:
commons-cli-1.2.jar,hadoop-auth-2.5.1.jar,hadoop-common-2.5.1.jar
hadoop-hdfs-2.5.1.jar,protobuf-java-2.5.0.jar
注:这么做的缺点是以后hadoop如果升级,要将这些jar更新
4.查看效果
注意:如果hadoop集群已经有了用户及权限验证,需要配置代理用户等信息,具体请参考官方文档(http://azkaban.github.io/azkaban/docs/latest/#hadoopsecuritymanager)
安装Job Summary插件
1.解压插件 在viewer目录中解压azkaban-jobsummary-2.5.0.tar.gz,得到azkaban-jobsummary-2.5.0目录,将其更名为job summary。最终,这个插件的目录路径是 ${AZKABAN_WEB_SERVER}/plugins/viewer/jobsummary
2.配置Job Summary 默认情况下不用做任何改到,如果需要修改 ${AZKABAN_WEB_SERVER}/plugins/viewer/jobsummary/conf/plugin.properties。
3.查看效果
安装Reportal插件
Reportal插件的安装不仅是要在Azkaban Web Server上进行(Viewer插件),也需要在Azkaban Executor Server上进行(Jobtype插件)。本小节主要是说明如何在前者上的安装;后者上的安装参考Azkaban Executor Server的安装和部署。
1.解压插件 由于azkaban-reportal-2.5.0.tar.gz中不仅包含Viewer插件,还包含Jobtype插件,所以先在一个临时目录中解压这个包,然后将解压得到的viewer/reportal/目录拷贝到上步中的viewer目录下。最终这个插件的目录路径为: ${AZKABAN_WEB_SERVER}/plugins/viewer/reportal。
2.配置Reportal Viewer 修改${AZKABAN_WEB_SERVER}/plugins/viewer/reportal/conf/plugin.properties。由于Web Server和Executor Server是分开部署,不能使用本地文件存储report任务的结果,而是用hdfs存储: reportal.output.filesystem=hdfs
3.效果
配置成功后,首页导航栏会出现Reportal链接
Azkaban Executor Server 插件安装
进入${AZKABAN_EXECUTOR_SERVER}/plugins目录,在该目录下解压azkaban-jobtype-2.5.0.tar.gz得到目录:azkaban-jobtype-2.5.0。将该目录更名为jobtypes。这个目录用来存放之后安装的所有插件,与Web Server中的viewer目录类似。每次插件的安装配置需要重启Executor Server。
1.修改配置文件 修改common.properties 修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/common.properties,设置hadoop.home和hive.home,与你的环境变量HADOOP_HOME和HIVE_HOME分布保持一致。例如: hadoop.home=/usr/local/hadoop
hive.home=/opt/hive
修改commonprivate.properties 修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties,同样需要设置hadoop.home和hive.home。另外修改jobtype.global.classpath。例如: hadoop.home=/usr/local/hadoop
hive.home=/opt/hive
jobtype.global.classpath=${hadoop.home}/etc/hadoop,${hadoop.home}/share/hadoop/common/*,${hadoop.home}/share/hadoop/common/lib/*,${hadoop.home}/share/hadoop/hdfs/*,${hadoop.home}/share/hadoop/hdfs/lib/*,${hadoop.home}/share/hadoop/yarn/*,${hadoop.home}/share/hadoop/yarn/lib/*,${hadoop.home}/share/hadoop/mapreduce/*,${hadoop.home}/share/hadoop/mapreduce/lib/*
2.安装Hive插件
在上步中hive插件已经被安装了,这里主要是如何配置hive插件。
配置
在配置之前需要注意的是,azkaban默认hive aux lib的目录是$HIVE_HOME/aux/lib,所以请在$HIVE_HOME目录下创建相应的目录,或者修改下面提到的两个配置文件中的hive.aux.jars.path和hive.aux.jar.path为你期望的路径,此外我在这两个属性值都加上file://,来指定使用本地文件。
修改private.properties
修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/private.properties,如下:
jobtype.classpath=${hive.home}/conf,${hive.home}/lib/*
hive.aux.jar.path=file://${hive.home}/aux/lib
jobtype.classpath与${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中的jobtype.global.classpath一起组合成hive任务的classpath。所以这两个属性如何赋值,可以灵活设置,保证classpath是你要的即可。
修改plugin.properties
修改${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/plugin.properties,如下:
hive.aux.jars.path=file://${hive.home}/aux/lib
源码的修改与编译
这个版本的Azkaban中的${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/azkaban-jobtype-2.5.0.jar有bug,在Hadoop2.5.1上(其他2.x未验证),运行hive任务会抛出如下异常:
Exception in thread "main" java.lang.NoSuchMethodError:
org.apache.hadoop.hive.shims.HadoopShims.usesJobShell()Z
at azkaban.jobtype.HadoopSecureHiveWrapper.runHive(HadoopSecureHiveWrapper.java:148)
at azkaban.jobtype.HadoopSecureHiveWrapper.main(HadoopSecureHiveWrapper.java:115)
解决办法是修改
${AZKABAN_PLUGINS_SOURCE}/plugins/jobtype/src/azkaban/jobtype/HadoopSecureHiveWrapper.java,找到如下代码片段:
if (!ShimLoader.getHadoopShims().usesJobShell()) {
}
将其中的if条件去掉,也就是删除两行。然后进入
${AZKABAN_PLUGINS_SOURCE}/plugins/hadoopsecuritymanager/目录,运行:
sudo ant
再进入${AZKABAN_PLUGINS_SOURCE}/plugins/jobtype,同样运行:
sudo ant
成功后会生成${AZKABAN_PLUGINS_SOURCE}/dist/jobtype/jars/azkaban-jobtype-2.5.0-rc3.jar,使用这个jar来替换${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive/azkaban-jobtype-2.5.0.jar。
安装Reportalhive插件
1.解压部署
解压azkaban-reportal-2.5.0.tar.gz, 将jobtypes/reportalhive/拷贝到${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes目录。完整的目录路径是:${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/reportalhive。
2.更新依赖jar
在Reportalhive插件根目录下的azkaban-hadoopsecuritymanager-2.2.jar和azkaban-jobtype-2.1.jar两个jar和当前版本不一致。需要用hive插件中的对应jar(${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/hive)来替换掉这两个jar,否则在运行report任务时会如下报错:
Exception in thread "main" java.lang.ClassNotFoundException: azkaban.jobtype.ReportalHiveRunner
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at azkaban.jobtype.HadoopJavaJobRunnerMain.getObject(HadoopJavaJobRunnerMain.java:299)
at azkaban.jobtype.HadoopJavaJobRunnerMain.(HadoopJavaJobRunnerMain.java:146)
at azkaban.jobtype.HadoopJavaJobRunnerMain.main(HadoopJavaJobRunnerMain.java:76)
${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/reportalhive/lib/azkaban-reportal-2.5.jar也有bug,
需要修改
${AZKABAN_PLUGINS_SOURCE}/plugins/reportal/src/azkaban/jobtype/ReportalHiveRunner.java文件,找到如下代码片段:
if (!ShimLoader.getHadoopShims().usesJobShell()) {.
}
删除if条件,然后进入${AZKABAN_PLUGINS_SOURCE}/plugins/reportal,运行sudo ant生成${AZKABAN_PLUGINS_SOURCE}/dist/reportal/jars/azkaban-reportal-2.5.jar,用这个jar来替换掉${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/reportalhive/lib/azkaban-reportal-2.5.jar,否则在运行report任务时会报如下错误:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hive.shims.HadoopShims.usesJobShell()Z
at azkaban.jobtype.HadoopSecureHiveWrapper.runHive(HadoopSecureHiveWrapper.java:148)
at azkaban.jobtype.HadoopSecureHiveWrapper.main(HadoopSecureHiveWrapper.java:115)
3.配置Reportalhive
配置plugin.properties
可以注释掉hive.home,因为我们在${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/common.properties和${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中已经配置过了,其他修改的属性:
hive.aux.jars.path=file://${hive.home}/aux/lib
hadoop.dir.conf=${hadoop.home}/etc/Hadoop
hive.aux.jars.path - 使用本地的hive aux lib,如果使用hdfs,将file改为hdfs即可
hadoop.dir.conf - hadoop2的配置目录与hadoop1不一样,请注意修改
配置private.properties
同上,可以注释掉hive.home,其他修改的属性:
jobtype.classpath=${hadoop.home}/conf,${hadoop.home}/lib/*,${hive.home}/lib/*,./lib/*
hive.aux.jars.path=file://${hive.home}/aux/lib
hadoop.dir.conf=${hadoop.home}/etc/hadoop
jobtype.classpath - 与hive插件的配置不一样,需要将插件本身的lib目录加入到classpath,以使用azkaban-reportal-2.5.jar,否则会报错。
jobtype.global.classpath - 已在${AZKABAN_EXECUTOR_SERVER}/plugins/jobtypes/commonprivate.properties中定义,可以注释掉。
hive.classpath.items - 未用,也可以注释掉。
4.效果
Ajax API适用
http://azkaban.github.io/azkaban/docs/latest/#ajax-api
Web 界面操作
http://azkaban.github.io/azkaban/docs/latest/#using-azkaban
初识Azkaban的更多相关文章
- 从源码看Azkaban作业流下发过程
上一篇零散地罗列了看源码时记录的一些类的信息,这篇完整介绍一个作业流在Azkaban中的执行过程,希望可以帮助刚刚接手Azkaban相关工作的开发.测试. 一.Azkaban简介 Azkaban作为开 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
随机推荐
- python多行字符串
Python中如何处理长代码格式化问题,如何提高格式化输出的长字符串的可读性? 当我们需要格式化输出一个很长的字符串的时候,都写在一行显得很难看,而且可读性也很差:当我们使用链式的语法写代码的时候常常 ...
- 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器
企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...
- .NET 程序集单元测试工具 SmokeTest 应用指南
Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试.一般地我们使用脚本来实现Smoke Test的自动化,可借用虚拟机的snapshot机 ...
- 【.NET深呼吸】如何反序列化动态JSON
.net本身除了支持SOAP.XML.二进制等序列化和反序列化,后来也加入了对JSON的序列化的支持.然而,在实际开发中,常常会遇到结构不确定的JSON对象,这些对象可能是其他代码动态生成的,你事先无 ...
- 快速打造跨平台开发环境 vagrant + virtualbox + box
工欲善其事必先利其器,开发环境 和 开发工具 就是 我们开发人员的剑,所以我们需要一个快并且好用的剑 刚开始做开发的时候的都是把开发环境 配置在 自己的电脑上,随着后面我们接触的东西越来越多,慢慢的电 ...
- JavaScript知识点总结(命名规范,变量的作用域)
命名规范 有人说JavaScript的宽容性是这个语言最糟糕的方面之一.比如说想把2个数字加在一起,JavaScript会把其中一个数字解析成字符串,那么就会得到一个奇怪的字符串,而不是2个数字的和. ...
- docker进入后台运行的容器
转载请注明出处 我们运行docker容器的时候,使用了-d参数,把容器在后台运行后. 这个时候,我们使用docker ps命令,我们就可以知道哪些程序在后台运行. 我们要怎么进入到docker ...
- Centos 上 Tengine安装
安装步骤: 1.系统环境 1.1 更新系统 [root@centos ~]# yum update -y 1.2 查看环境 [root@centos ~]# cat /etc/redhat-relea ...
- 欢迎阅读daxnet的新博客:一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...
- HTML5 网络拓扑图整合 OpenLayers 实现 GIS 地图应用
在前面<百度地图.ECharts整合HT for Web网络拓扑图应用>我们有介绍百度地图和 HT for Web 的整合,我们今天来谈谈 OpenLayers 和 HT for Web ...