Azkaban 阿兹卡班
一、Azkaban的简介
提示:这里可以添加技术概要
Azkaban是由LinkedIn公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以特定顺序运行一组工作和流程,它的配置是通过简单的key:value
对的方式,通过配置其中dependencies
来设置依赖关系。azkaban使用job配置文件
建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪工作流。
二、Azkaban的特点
- 兼容任何版本的hadoop
- 易于使用的web界面
- 简单的工作流的上传
- 方便设置任务之间的关系(
dependencies
) - 调度工作流
三、Azkaban的架构
1. azkabanWebServer
是整个azkaban工作流系统的主要管理者,用户登录认证,负责project管理,定时执行工作流,跟踪工作流执行进度等。
2. azkabanExecutorServer
负责具体的azkabanExecutorServer工作流的提交,执行,通过MySQL数据来协调任务的执行。
3. 关系型数据库(MySQL)
存储大部分执行流状态,azkabanWebServer和azkabanExecutorServer都需要访问数据库。
四、虚拟屏screen的安装与使用
1. 安装虚拟屏screen
首先进入超级管理员root
用户,在管理员端安装虚拟屏软件。
su root #切换用户至root
------------------------------------------
yum -y install screen #安装虚拟屏软件screen
------------------------------------------
su 普通用户名 #切换为普通用户
2. 虚拟屏的常用指令
screen -S 名称 --创建虚拟屏
screen -r 名称 --进入虚拟屏
screen -R 名称 --先试图恢复离线作业,若找不到离线作业,即创建新的screen作业
screen -wipe --清除dead 状态screen
screen -ls --查看所有的screen作业
-------------------------------------------------
Ctrl+a+d --退出虚拟屏
-------------------------------------------------
kill -9 虚拟屏作业编号 --杀死screen作业
五、Azkaban的启动
1. 启动azkabanExecutorServer
- 创建虚拟屏
screen -S azkaban-executor
- 进入根目录
cd /opt/module/azkaban-2.5.0/azkaban-executor-2.5.0/bin/
进入根目录后使用ls
查看当前目录拥有文件
- 运行启动脚本
./azkaban-executor-start.sh
出现如下截图结果,则说明启动成功。但不能结束或关闭该窗口,因此才需要使用到虚拟屏screen。保持该进程持续运行。
如若出现地址已在使用,要么之前启动了没有关闭,要么被其他进程占用端口,导致出现启动异常,解决办法见后面。
- 退出虚拟屏
Ctrl+A+D
2. 启动azkabanWebServer
- 创建虚拟屏
screen -S azkaban-web
- 进入根目录
cd /opt/module/azkaban-2.5.0/azkaban-web-2.5.0/bin/
进入根目录后使用ls
查看当前目录拥有文件
- 运行启动脚本
./azkaban-web-start.sh
结果跟启动azkabanExecutorServer,出现异常的解决办法也形同。不同之处在于端口号port 8443
- 退出虚拟屏
Ctrl+A+D
3. 浏览器进入web管理页面
- 在浏览器中输入网址:
https://192.168.5.100:8443
网址根据自己虚拟机配置的ip地址决定。加上端口号8443即可。 - 输入用户名和密码
username:azkaban
password:azkaban
- 点击Login 登录成功
特殊异常处理【端口号被占用】
异常一:启动azkabanExecutorServer地址在使用。
地址已在使用,是因为端口12321被占用,出现在启动服务的时候报错如截图
解决办法
- 执行
netstat -alnp | grep 12321
查看端口进程
- 执行
kill -9 进程号
如上图所示,杀死端口被占用的进程即可。 - 在azkaban根目录
/bin
重新运行脚本启动./azkaban-executor-start.sh
即可
异常二:启动azkabanWebServer地址在使用。
解决办法
解决办法与上述解决办法类似,不同之处在于被占用的端口号不同,为8443,找到相应的端口被占用的进程,在杀死进程即可,最后重启服务。
六、示例一:创建单工作流任务
步骤一:编辑job文件
编辑job文件,文件以.job
结尾,注意编码格式为utf-8
,command行最后不能有空格。
文件名:hello.job
文件内容:
#hello.job
type=command
command=/home/hadoop/123/azkaban-hello.sh
说明:
- #hello.job 注明文件名
- type 键指定任务类型
- command 键指定需要执行的脚本文件的绝对路径
步骤二:在Linux中编辑被调度的shell脚本并赋予执行权限
被调度的shell脚本名:azkaban-hello.sh
使用vim 创建执行脚本azkaban-hello.sh
vim azkaban-hello.sh
被调度的shell脚本内容:
#!/bin/bash
echo "hello azkaban 666! how are you! i am fine." > /home/hadoop/123/azkaban-first-job.txt
说明:
#!/bin/bash
shell脚本正常声明echo "hello azkaban!"
echo为shell脚本的打印语句>
在此处为重定向的作用,用以将打印的内容重定向写入到文件azkaban-first-job.txt中,如果文件存在则覆盖文件内容,不存在则自动创建该文件并保存写入的内容。
脚本azkaban-hello.sh内容编辑保存退出后,指向chmod语句,为脚本赋予可执行权限
chmod a+x azkaban-hello.sh
步骤三:将job文件压缩为zip压缩包并上传azkaban的web端
将hello.job打包为zip压缩包
步骤四:在azkaban的web端创建project
在创建的project中upload压缩包
点击Execute Flow
或者 un Job
再次点击Execute 执行job,若hell变成绿色背景,则说明执行成功,出现红色背景则说明执行失败。
步骤五:回到虚拟机执行终端,查看文件
使用 ls
指令 查看文件azkaban-first-job.txt是否被创建
使用cat
指令 查看azkaban-first-job.txt文件内容
cat azkaban-first-job.txt
七、示例二:创建前后依赖的工作流任务
后续补充