Azkaban部署与入门(3.X)
Azkaban简介
Azkaban 一个批量工作流任务调度器,使用Java语言开发。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流,当然Azkaban也可以使用API,来调用相应的操作和任务。
Azkaban 的优点:
- 提供功能清晰,简单易用的Web UI界面
- 提供job配置文件快速建立任务和任务之间的依赖关系
- 提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop
- 基于Java开发,代码结构清晰,易于二次开发
Azkaban 有三种安装部署方式:
- solo server model(单服务模式):该模式中 webServer 和 executorServer 运行在同一个进程中,进程名是AzkabanSingleServer。可以使用自带的H2数据库或者配置mysql数据。该模式适用于小规模的使用。此模式合适个人试用使用。它也可以用在小规模的使用案例中。
- two server model(2个服务模式):数据库为mysql,采用主从设置进行备份,管理服务器(webServer)和执行服务器(executorServer)在不同进程中运行,这种模式下,管理服务器和执行服务器互不影响。适用在较重的生成环境中。
- multiple-executor(分布式多服务模式):存放元数据的数据库为mysql,采用主从设置进行备份,管理服务器(webServer)和执行服务器(executorServer)在不同进程中运行。多个 Executor 模式为最重的生产环境。
- Azkaban安装部署:
在集群环境下一般使用多服务器模式,two server和multiple-executor模式安装配置差不多,本文安装配置的是two server模式。solo模式安装比较简单,如果想要安装配置solo模式可以去官网查看。
- 安装前准备
- 在Vmware上安装linux环境
- 在linux上安装JDK1.8
- 在linux上安装MySQL
- 下载
在Azkaban的GitHub上下载Azkaban的安装包,本文下载的是Azkaban3.80.0版本,下载在/usr/local目录下,命令如下代码 1所示。
git clone https://github.com/azkaban/azkaban.git |
- 编译
进入到刚刚下载完的Azkaban的目录下,执行命令./gradlew distTar,如图 1所示。
图 1 编译Azkaban安装包
- 拷贝
新建文件夹来存放azkaban-3.8的安装文件,将第3步编译好的Azkaban相关的安装包拷贝到新建文件azkaban-3.80.0,如代码 2所示。
cp azkaban/azkaban-exec-server/build/distributions/azkaban-exec-server-3.80.0-1-g94ddcf2.tar.gz azkaban-3.80.0/ cp azkaban/azkaban-web-server/build/distributions/azkaban-web-server-3.80.0-1-g94ddcf2.tar.gz azkaban-3.80.0/ cp azkaban/azkaban-db/build/distributions/azkaban-db-3.80.0-1-g94ddcf2.tar.gz azkaban-3.80.0/ |
- 解压 重命名
解压第4步拷贝到的安装包,为了方便后面的操作,重命名解压后的文件,如代码 3所示。
cd /usr/local/azkaban-3.80.0/ tar –zxvf azkaban-db-3.80.0-1-g94ddcf2.tar.gz tar –zxvf azkaban-exec-server-3.80.0-1-g94ddcf2.tar.gz tar –zxvf azkaban-web-server-3.80.0-1-g94ddcf2.tar.gz #重命名 mv azkaban-db-3.80.0-1-g94ddcf2.tar.gz azkaban-db mv azkaban-exec-server-3.80.0-1-g94ddcf2.tar.gz azkaban-web-server mv azkaban-exec-server-3.80.0-1-g94ddcf2.tar.gz azkaban-exec-server |
- 创建Azkaban元数据库
登录linux的mysql,创建Azkaban数据库,并导入相应的数据表,如代码 4所示。
mysql> create database azkaban; Query OK, 1 row affected (0.00 sec) mysql> use azkaban; Database changed mysql> source /usr/local/azkaban-3.80.0/azkaban-db/create-all-sql-3.80.0-1-g94ddcf2.sql |
创建的表如图 2所示。
图 2 全部表名
- 创建SSL配置
为了后期可以使用Azkaban的API,需要配置SSL配置。使用keytool创建SSL配置,keytool是JDK提供的一个工具,输入如下代码 5命令。
[email protected]:/usr/local/azkaban-3.80.0# find / -name keytool /usr/local/jdk1.8.0_51/bin/keytool /usr/local/jdk1.8.0_51/jre/bin/keytool |
执行命令创建SSL配置,命令如代码 6所示,在配置SLL时,要注意的是密令的密码,三次的密码都一样的,本人设置的是123456,后面配置azkaban.properties时,需要输入这些密码。
[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# keytool -keystore keystore -alias jetty -genkey -keyalg RSA |
- 配置azkaban.properties ,添加mysql驱动
拷贝 azkaban-solo-server-3.80.0-1-g94ddcf2.tar.gz 到 azkaban-3.48.0 目录下,解压并重命名,如代码 7所示。
cp /usr/local/azkaban/azkaban-solo-server/build/distributions/azkaban-solo-server-3.80.0-1-g94ddcf2.tar.gz /usr/local/azkaban-3.80.0 |
将azkaban-solo-server下的conf plugins 和sql文件夹拷贝到azkaban-exec-server,如代码 8所示。
cd /usr/local/azkaban-3.80.0/azkaban-solo-server cp -a conf/ plugins/ sql/ /usr/local/azkaban-3.80.0/azkaban-exec-server |
配置/usr/local/azkaban-3.80.0/azkaban-web-server/conf/azkaban.properties文件,如下表 1所示,红色文字部分是在原文件下修改的部分。
# Azkaban Personalization Settings azkaban.name=Kang azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=/usr/local/azkaban-3.80.0/azkaban-web-server/web default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=/usr/local/azkaban-3.80.0/azkaban-exec-server/conf/azkaban-users.xml # Loader for projects executor.global.properties=/usr/local/azkaban-3.80.0/azkaban-web-server/conf/global.properties azkaban.project.dir=projects #database.type=h2 #h2.path=./h2 #h2.create.tables=true database.type=mysql mysql.port=3306 mysql.host=192.168.128.200 mysql.database=azkaban mysql.user=hive mysql.password=hive mysql.numconnections=100 # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.port=8081 # Azkaban Executor settings executor.port=12321 # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban plugin settings azkaban.jobtype.plugin.dir=/usr/local/azkaban-3.80.0/azkaban-exec-server/plugins/jobtypes # Number of executions to be displayed azkaban.display.execution_page_size=16 azkaban.use.multiple.executors=true # Azkaban Ramp Feature Configuration #Ramp Feature Related azkaban.ramp.enabled=true azkaban.ramp.status.polling.enabled=true azkaban.ramp.status.polling.interval.min=30 azkaban.ramp.status.push.interval.threshold=15 azkaban.ramp.status.pull.interval.threshold=100 # Azkaban Jetty server properties. jetty.use.ssl=true jetty.maxThreads=25 jetty.ssl.port=8443 jetty.keystore=/usr/local/azkaban-3.80.0/azkaban-web-server/keystore jetty.password=123456 jetty.keypassword=123456 jetty.truststore=/usr/local/azkaban-3.80.0/azkaban-web-server/keystore jetty.trustpassword=123456 |
需要注意的是,有几个文件是配置成绝对路径的,需要添加jetty的配置文件。
在conf目录下添加log4j.properties,如代码 9所示。
[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server/conf# touch log4j.properties [email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server/conf# vim log4j.properties log4j.rootLogger=INFO,C log4j.appender.C=org.apache.log4j.ConsoleAppender log4j.appender.C.Target=System.err log4j.appender.C.layout=org.apache.log4j.PatternLayout log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n |
添加MySQL驱动,在azkaban-exec-server目录下创建文件夹:mkdir extlib,将lib目录下的mysql驱动复制到extlib目录下,如代码 10所示。
[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# mkdir extlib [email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# cp lib/mysql-connector-java-5.1.28.jar extlib/ #拷贝azkaban-web-server目录下的conf和extlib到azkaban-exec-server目录下 [email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# cp -a conf/ extlib/ ../azkaban-exec-server |
- 启动,先启动exec-server(执行器),然后启动web-server(web服务)
启动exec-server命令如代码 11所示。
[email protected]:/usr/local/azkaban-3.80.0/azkaban-exec-server# bin/start-exec.sh #指定executor [email protected]:/usr/local/azkaban-3.80.0/azkaban-exec-server# curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo #关闭执行器 [email protected]:/usr/local/azkaban-3.80.0/azkaban-exec-server# bin/shutdown-web.sh |
启动web-server命令如代码 12所示。
[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# bin/start-web.sh [email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# bin/shutdown-web.sh |
然后,Jps查看相应的进程有没有开启,如果发现如所示的,代表开启成功。如果无法显示下面进程,或者无法打开web页面,可以在azkaban-xxx-server的目录下,查看相应的开机日志,如图 3所示。
图 3 java程序
- Azkaban使用
在谷歌浏览器上输入https://node200:8443/,登录账号和密码都是azkaban。在界面上创建job工程,目前azkaban仅支持job文件,但需要解压成zip形式才能在azkaban上运行。
-
创建Project
- 上传zip文件
本文测试的文件是Hive的测试文件,如表 2所示。
# hivef.job type=command command=/usr/local/apache-hive-1.2.2-bin/bin/hive -f '/opt/test/test.sql' |
test.sql文件的代码,如表 3所示。
drop table if exists student; create table student(id int,name string,sex string,age int,deparment string) row format delimited fields terminated by ','; load data local inpath '/opt/test/student.txt' into table student; create table student_copy as select * from student; insert overwrite directory '/aztest/hiveoutput' select count(1) from student_copy; !hdfs dfs -cat /aztest/hiveoutput/000000_0; drop database azkaban cascade; |
student.txt文件,如表 4所示。
1,zhangsan,nan,18,jishu 2,lishi,nv,19,chanpin 3,wangwu,nan,29,yunying |
上传文件的操作如图 4所示。
图 4 上传文件截图
- 运行hivejob测试文件
运行hivejob测试文件,点击Execute,如下图 5所示,左边的Schedule是进行一些定时时间等配置的调试。
图 5 运行hive文件
- 运行脚本
任务正在运行,如图 6所示。
图 6 任务运行截图
在任务运行前,需要保证hadoop和hive在集群上有安装,hadoop是开启状态。
如果出现一直在Running或Preparing态,有可能是跑任务的时候,内存不足。需要修
改exec-server/plugins/jobtypes/commonprivate.properties文件,添加memCheck.enabled=false这一行,关闭内存检测。
任务运行成功,如下图 7所示。
图 7 任务成功截图
- 使用Azkaban API运行
通过curl进行的示例调用,显示success代表连接成功,这样也可以找到当前网页的session.id如下代码 13所示。
[email protected]:/usr/local# curl -k -X POST --data "action=login&username=azkaban&password=azkaban" https://localhost:8443 { "session.id" : "03b7dd5c-501d-495b-a0a6-3b449a3e7c1f", "status" : "success" |
创建新项目的ajax API。注意:在上传任何项目zip文件之前,应首先通过此API创建项目。代码操作如代码 14所示。
[email protected]:/usr/local# curl -k -X POST --data "session.id=03b7dd5c-501d-495b-a0a6-3b449a3e7c1f&name=aaaaa&description=11" https://localhost:8443/manager?action=create {"path":"manager?project=aaaaa","action":"redirect","status":"success"} |
如图 8所示,创建aaaaa,描述11的项目已经创建成功。这里只是验证这个API可以测通使用,具体的操作细节(设置cron时间,运行zip任务等)可以依照官网的命令来执行。
图 8 项目创建成功截图