初识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.查看时区
[[email protected] azkaban-web-2.5.0]$ more /etc/sysconfig/clock
ZONE="Asia/Shanghai"
UTC=true
ARC=false
2.修改时区

时区文件都在/usr/share/zoneinfo,复制相应时区覆盖/etc/localtime即可

[[email protected] 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
修改邮件设置(可选)

[email protected]
    mail.host=smtp.126.com
    mail.user= [email protected]
    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

时间: 2024-10-16 01:19:52

初识Azkaban的相关文章

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

初识数组排序!!!!

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

初识操作系统和linux

初识操作系统和linux 1.计算机系统由硬件系统和软件系统两大部分组成:是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动.高速地处理,然后把处理结果输出的现代化智能电子设备. 2.世界上第一台计算机是1946年诞生在美国宾州大学. 3.冯·诺依曼体系结构:1946年数学家冯·诺依曼于提出计算机硬件系统由运算器.控制器.存储器.输入设备.输出设备.摩根定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍.现在计算机技术进本很难遵

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

初识React

原文地址:北云软件-初识React 专注于UI 在MVC分层设计模式中,react常被拿来实现视图层(V).React不依赖于技术栈的其他部分,因此可以方便的在现有项目中尝试用它来实现一个小特性. 虚拟DOM React从DOM中抽象出来,给出一种更简洁的编程模型,且性能表现更好.能够通过NodeJS实现服务端渲染,通过React Native开发原生app. 数据流React实现单向.响应式数据流,减少boilerplate且比传统数据绑定更容易理解. 简洁的组件React的组件都实现了一个r

泛型的几种类型以及初识webform

今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧.首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法:最后简单的认识了webform,实现了一个简单的功能. 一.泛型 定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化.可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念.C#中提供了五种泛型,类,结构,接口,委托和方法.下面举例说明可能更容易理解, class MyStack<T>

最新计算机技术与管理科学应用专家——初识ERB

ERB管理系统:英文全称Enterprise Resource and Behavior,英文简称:ERB,中文名全称:企业资源与行为管理系统.ERB是由理文企业管理顾问有限公司首席管理师,现任商翼ERB企业管理系统项目总监吴志华先生,于2010年9月首先提出的.ERB不再单以供应链管理作为系统应用的基础,而是以企业行为与企业资源规划的最佳结合作为系统应用设计的核心基础,强调企业行为的规划.执行.监督与追溯,强调企业管理水平与员工素养的持续提升:提供企业行为与企业资源管理最佳结合的整体应用解决方

[OpenGL]环境搭建以及OpenGL初识

想往游戏行业发展的话,经常被提及到的就是OpenGL和DirectX,这两者听起来感觉是一门挺高深的技术,今天我也开始摸索学习OpenGL,那么OpenGL到底是什么?它和DirectX有什么区别和联系? OpenGL初识 OpenGL只是一套图形函数库 DirectX包含图形.声音.输入.网络等模块. 但就图形而论,DirectX的图形库性能不如OpenGL,OpenGL稳定,可以跨平台使用,DirectX只支持Windows平台,所以OpenGL还是有它的优势!OpenGL ES是OpenG

初识git

初识git 1 安装git 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Windows这几大平台上正常运行了. 要使用Git,第一步当然是安装Git了.根据你当前使用的平台来阅读下面的文字: 1.1 在Linux上安装Git 首先,你可以试着输入git,看看系统有没有安装Git: ``` $ git The program 'git' is curren