目录
一:Azkaban简介
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
它有如下功能特点:
1、Web用户界面
2、方便上传工作流
3、方便设置任务之间的关系
4、调度工作流
5、认证/授权(权限的工作)
6、能够杀死并重新启动工作流
7、模块化和可插拔的插件机制
8、项目工作区
9、工作流和任务的日志记录和审计
二:Azkaban的部署安装
2.1:安装azkaban
1.在hadoop102上的/opt/module下创建azkaban目录
[root@hadoop102 module]# mkdir azkaban
2.将装有azkaban的tar包的解压到指定的目录,这里我的所有关于azkaban的tar包都放在了/opt/software/Azkaban_tars这个目录下了。然后依次执行下面的内容。
[root@hadoop102 Azkaban_tars]# tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/module/azkaban/
[root@hadoop102 Azkaban_tars]# tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/module/azkaban/
[root@hadoop102 Azkaban_tars]# tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/module/azkaban/
[root@hadoop102 azkaban]# ll
total 4
drwxr-xr-x. 2 root root 4096 Aug 6 09:37 azkaban-2.5.0
drwxr-xr-x. 7 root root 92 Aug 6 09:37 azkaban-executor-2.5.0
drwxr-xr-x. 8 root root 103 Aug 6 09:38 azkaban-web-2.5.0
3.进入解压后的/opt/module/azkaban目录对文件改名
[root@hadoop102 azkaban]# mv azkaban-web-2.5.0/ server
[root@hadoop102 azkaban]# mv azkaban-executor-2.5.0/ executor
4.进入mysql mysql -uroot -p123456
然后执行如下操作目的是执行azkaban内置的脚本然后去创建mysql的表
mysql> create database azkaban;
mysql> use azkaban;
mysql> source /opt/module/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
最后在azkaban下show tables有下面的表说明导入成功了,这时候就可以quit退出mysql了。
mysql> show tables;
±-----------------------+
| Tables_in_azkaban |
±-----------------------+
| active_executing_flows |
| active_sla |
| execution_flows |
| execution_jobs |
| execution_logs |
| project_events |
| project_files |
| project_flows |
| project_permissions |
| project_properties |
| project_versions |
| projects |
| properties |
| schedules |
| triggers |
±-----------------------+
15 rows in set (0.00 sec)
2.2:生成密钥对和证书
1.密钥对和证书的相关内容:
Keytool是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。
-keystore 指定密钥库的名称及位置(产生的各类信息将存在.keystore文件中)
-genkey(或者-genkeypair) 生成密钥对
-alias 为生成的密钥对指定别名,如果没有默认是mykey
-keyalg 指定密钥的算法 RSA/DSA 默认是DSA
2.在hadoop102的/opt/module/azkaban/server目录下执行 keytool -keystore keystore -alias jetty -genkey -keyalg RSA
详情见图片的内容
这是再ls下可以看到当前目录下多了一个keystore文件,这也即是刚才生成的。
2.3:时间同步配置
时间同步配置的原因:azkaban在进行时间调度的时候对时间的要求是要很准确的,随意必须要保证集群的时间是同步的。
1.先配置好服务器节点上的时区,如果在/usr/share/zoneinfo/这个目录下不存在时区配置文件Asia/Shanghai,就要用 tzselect 生成,没有的话请先移步https://www.cnblogs.com/liuxinrong/articles/12739198.html
2.配置完第一步后拷贝该时区文件,覆盖系统本地时区配置,在hadoop集群中都执行一遍如下命令
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2.4:Web server服务器和执行服务器配置
1.进入 azkaban web 服务器安装目录 conf 目录然后编辑azkaban.properties文件
进去以后可以先set nu设置一下行号。
1)第6,7行的内容分别修改为
#默认web server存放web文件的目录
web.resource.dir=/opt/module/azkaban/server/web/
#默认时区,已改为亚洲/上海 默认为美国
default.timezone.id=Asia/Shanghai
2)第11行内容改为
#用户权限管理默认类(绝对路径)
user.manager.xml.file=/opt/module/azkaban/server/conf/azkaban-users.xml
3).17到22行是关于mysql的,注意一下mysql的用户名和密码以及数据库连接IP需要根据你自己的实际情况来配置。
#数据库连接IP
mysql.host=hadoop102
#数据库实例名
mysql.database=azkaban
#数据库用户名
mysql.user=root
#数据库密码
mysql.password=123456
#最大连接数
mysql.numconnections=100
4)32到36行(配置完就可以保存退出了)
#SSL文件名(绝对路径)
jetty.keystore=/opt/module/azkaban/server/keystore
#SSL文件密码
jetty.password=123456
#Jetty主密码与keystore文件相同
jetty.keypassword=123456
#SSL文件名(绝对路径)
jetty.truststore=/opt/module/azkaban/server/keystore
#SSL文件密码
jetty.trustpassword=123456
3.进入/opt/module/azkaban/executor/conf目录编辑azkaban.properties文件
1)第2行时区修改为
default.timezone.id=Asia/Shanghai
2)第8行修改为
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties
3)第13到16行为修改mysql的内容(配置完就可以保存退出了)
mysql.host=hadoop102
mysql.database=azkaban
mysql.user=root
mysql.password=123456
2.web服务器用户配置
在azkaban web服务器安装目录 conf目录(/opt/module/azkaban/server/conf),按照如下配置修改azkaban-users.xml 文件,增加管理员用户。
将<user username="admin" password="admin" roles="admin,metrics"/>
添加到里面后保存退出。
2.5:启动executor服务器和web服务器
1.在executor服务器目录下执行启动命令
[root@hadoop102 executor]# bin/azkaban-executor-start.sh
2.在azkaban web服务器目录下执行启动命令
[root@hadoop102 server]# bin/azkaban-web-start.sh
注意:
1)这里要强调一下关闭的命令不在是对应的stop,而是shutdown
2)azkaban-web-shutdown.sh 和 azkaban-executor-shutdown.sh
3)开启的时候要先启动executor服务器,关闭的时候要先关闭web服务器
注意这两个都是一个阻塞进程,我们可以在启动一个窗口然后jps查看一下进程,可以看到executor和web都已经启动好了
[root@hadoop102 server]# jps
7504 Jps
7478 AzkabanWebServer
7432 AzkabanExecutorServer
3.查看azkaban的web端
在谷歌浏览器中输入 https://hadoop102:8443/
回车进入页面,第一次的话会说不是私密连接,直接忽略就可以了,然后点下下面的高级,点下前往就可以了。
输入账号(admin)和密码(123456)后进入web端
4.首页的页面介绍:
projects:会罗列出来所有的工作流和任务
scheduling:罗列出来所有的定时调度任务
executing:显示正在执行的任务
history:显示已经执行完毕的任务
三:Azkaban的应用案例
3.1:单一的job案例
在讲案例之前我们需要了解一下Azkaba内置的任务类型支持command、java.
1.在windows上新建一个文件我们不妨叫hello.job(注意一定是xxx.job文件,否则无法识别)
在里面输入如下内容
type=command
command=echo ‘hello world’
2.将文件打成zip包(注意一定是zip包,xxx.zip即可,因为azkaban暂不支持其他版本的压缩包)
3.上传并运行
1)通过azkaban的web管理平台创建project并上传job的zip包,首先创建一个project,project名字随便取一个,但是要注意project的名字是不能相同的,下面描述信息可以选填。
2)Create Project后会跳转到uploadf页面,点击右上角的upload上传刚才的zip压缩后文件,然后就可以看到文件已经成功被上传。
3)点击Execute flow执行任务流,由于我们只是一个简单的打印,所以设置的是立即执行。
点击conuinue
4)查看任务的执行情况
我们去details一下看看细节
3.2:调度shell脚本案例
1.在hadoop10的/opt/module/azkaban下新建一个azkaban_job目录,然后在这个目录下创建脚本文件date.sh填入一下内容后保存退出
#!/bin/bash
date >> /opt/module/azkaban/azkaban_job/date.txt
2.在windows里面创建一个test2.job,填入一下内容,因为我们没有对脚本赋予执行权限,所以在这个文件里面用下sh来执行脚本。
type=command
command=sh /opt/module/azkaban/azkaban_job/date.sh
3.将test2.job打成zip压缩包上传至azkaban的web端,这一次我们选择定时执行看一下效果,每分钟执行一次。
在Scheduling里面可以查看定时的任务
在history里面可以看到任务已经成功的定时执行了3次
我们去当时脚本打印时间的目录发现azkaban已经成功的执行了我们的脚本
[root@hadoop102 azkaban_job]# pwd
/opt/module/azkaban/azkaban_job
[root@hadoop102 azkaban_job]# ls
date.sh date.txt
[root@hadoop102 azkaban_job]# cat date.txt
Thu Aug 6 18:16:45 CST 2020
Thu Aug 6 18:17:45 CST 2020
Thu Aug 6 18:18:44 CST 2020
Thu Aug 6 18:19:45 CST 2020
[root@hadoop102 azkaban_job]#
最后就是一个关于关闭定时的任务问题,在Scheduling里面的 Remove schdule可以删除定时的任务。这样的话我们的定时任务就不会再执行了。