数据仓库任务调度器-Azkaban | 入门<集群安装级测试>
文章目录
- 数据仓库任务调度器-Azkaban | 入门<集群安装级测试>
- 一、任务调度器的用途
- 二、常用任务调度器的比较
- 三、Azkaban集群模式的安装
- 四、Helloworld任务调度测试
- 五、测试报错修改:
- 关于azkaban的azkaban-exec的集群启动、激活、关闭脚本如下
安装包获取链接:https://pan.baidu.com/s/1bpM8oZHiIEqe8-m8wAgEcA?pwd=1111
提取码:1111
一、任务调度器的用途
在一个完整的大数据项目中,我们的整个项目往往是由多个任务单元组成,我这里以数据仓库为例:
1、在整个数据仓库的执行流程中我们涉及到大量的Shell脚本程序、Hive脚本程序、MR程序、Java程序等
2、在1的基础上,数据仓库的执行流程中脚本之间存在着前后的相互依赖关系,例如:生成数据—>flume监控数据---->将数据导入到hdfs—>将数据加载到数据仓库等等一系列的操作,都有着前后的依赖关系。
如果这些任务调度让人来手动进行的话容易产生错误,并且效率非常低下,完全不符合企业生产的需要,所以我们将会使用工作流程调度系统来为我们执行调度任务
二、常用任务调度器的比较
- 1 简单任务调度:可以直接使用linux的Crontab
- 2 复杂任务调度:可以使用Ooize、Azkaban、Airflow等
- 比较:Crontab 常用语调度周期性被执行的指令,不适用于实现多个调度的依赖关系;Oozie的功能非常强大,但是Oozie若不是在CHD环境下的hue的话,需要编写大量的XML文件来实现调度功能,不便于管理和功能实现;Airflow是基于python脚本实现的,功能也非常强大,同时实现也并不是非常复杂,但是由于本人目前还没有开始python的学习,此内容在后期更新;
- 今日重点:Azkaban 定义了一种 KV 文件格式来建立任务之间的依赖关系,更利于在一个工作流内以一个特定的顺序运行一组工作和流程。,并提供一个易于使用的 web 用户界面维护和跟踪你的工作流。
三、Azkaban集群模式的安装
- 3.1 azkaban组件:azkaban-web、azkaban-exec、azkaban依赖数据库
- 3.2 集群安装部署
bigdata01 | bigdata02 | bigdata03 |
Azkaban-web | ||
Azkaban-exec | Azkaban-exec | Azkaban-exec |
- 3.3 安装
- 3.3.1 上传安装包并解压
1)上传jar包:将上面下载三个jar包全部上传到服务器(虚拟机)中的一台,我这里是bigdata01下的/opt/soft/azkaban/目录下.
[root@bigdata01 azkaban]# pwd
/opt/soft/azkaban
[root@bigdata01 azkaban]# ll
-rw-r–r–. 1 root root 6433 Sep 27 09:40 azkaban-db-3.84.4.tar.gz
-rw-r–r–. 1 root root 16175002 Sep 27 09:40 azkaban-exec-server-3.84.4.tar.gz
-rw-r–r–. 1 root root 20239974 Sep 27 09:40 azkaban-web-server-3.84.4.tar.gz
- 2)解压jar包:将上面上传的三个jar包解压到安装目录,我这里是/opt/module/azkaban目录下
[root@bigdata01 azkaban]# tar -zvxf azkaban-db-3.84.4.tar.gz -C /opt/module/azkaban/
[root@bigdata01 azkaban]# tar -zvxf azkaban-exec-server-3.84.4.tar.gz -C /opt/module/azkaban/
[root@bigdata01 azkaban]# tar -zvxf azkaban-web-server-3.84.4.tar.gz -C /opt/module/azkaban/
- 3)修改名字:在安装目录下对解压后的安装包进行修改名字(可以不修改,修改只是为了后期操作方便)
mv azkaban-exec-server-3.84.4/ azkaban-exec
mv azkaban-web-server-3.84.4/ azkaban-web
- 3.3.2 为Azkaban配置mysql (以下命令均在mysql中操作)
1) 在mysql中创建数据库azkaban
CREATE DATABASE azkaban;
2)创建用户azkaban并且赋予权限
创建azkaban用户
%是主机,百分号说明任意主机都可以连接、123456是用户azkaban的专属密码
CREATE USER 'azkaban'@'%' IDENTIFIED BY '123456';
赋予权限
GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
3)通过加载azkaban数据库管理信息创建Azkaban表(该文件在azkaban安装目录下的azkaban-db下的create-all-sql-3.84.4.sql)
use azkaban;
source /opt/module/azkaban/azkaban-db-3.84.4/create-all-sql-3.84.4.sql
此时azkaban库下面会出现大量关于azkaban的表
4)在mysql配置文件my.cnf中添加max_allowed_packet=1024M
通常在 /etc/my.cnf 或者./usr/my.cnf,如果都不在,建议使用find -name my.cnf进行查找
- 3.3.3 配置Azkaban-exec
1)配置azkaban.properties,此文件在azkaban-exec/conf目录下
修改(主机名,密码等以自己配置的为准):
default.timezone.id=Asia/Shanghai
azkaban.webserver.url=http://bigdata01:8081
database.type=mysql
mysql.port=3306
mysql.host=bigdata01
mysql.database=azkaban
mysql.user=azkaban
mysql.password=123456
并且加入:
executor.port=12321
- 将azkaban分发到集群中的其他节点
scp -r /opt/module/azkaban/azkaban-exec bigdata02://opt/module/azkaban/
scp -r /opt/module/azkaban/azkaban-exec bigdata03://opt/module/azkaban/
- 3.3.4 配置Azkaban-web
1)配置azkaban.properties,此文件在azkaban-web/conf目录下
default.timezone.id=Asia/Shanghai
database.type=mysql
mysql.port=3306
mysql.host=bigdata01
mysql.database=azkaban
mysql.user=azkaban
mysql.password=123456
下面这条配置删除了MinimumFreeMemory,因为它默认6G,在学习环境下我们通常不满足,它会直接不执行azkaban
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
说明
:
StaticRemainingFlowSize:正在排队的任务数;
CpuStatus:CPU 占用情况;
MinimumFreeMemory:内存占用情况。测试环境,必须将 MinimumFreeMemory 删除掉,否则
它会认为集群资源不够,不执行。
- 2)配置azkaban-users.xml,此文件也在azkaban-web/conf目录下添加自己配置用户权限,在进入Azkaban的web页面是需要
<azkaban-users>
<user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
<user password="metrics" roles="metrics" username="metrics"/>
<user password="123456" roles="admin" username="root"/>
<role name="admin" permissions="ADMIN"/>
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
四、Helloworld任务调度测试
- 1 .启动azkaban-exec
分别在集群中的所有安装azkaban-exec的azkaban-exec的bin目录下启动
bin/start-exec.sh
- 2 .激活azkaban-exec,不激活azkaban-web无法启动
在每个节点都执行如下指令:
curl -G “bigdata01:12321/executor?action=activate” && echo
curl -G “bigdata02:12321/executor?action=activate” && echo
curl -G “bigdata03:12321/executor?action=activate” && echo
- 3 .启动azkaban-web
在bigdata01节点的azkaban-web的bin目录下启动
bin/start-web.sh
- 4 .访问http://bigdata01:8081并使用在azkaban-users.xml中配置的用户名和密码登录
- 5 .在windows环境下,新建一个文件夹helloworld(必须是英文),并且在文件夹中创建文件helloworld.project,且编辑以下内容,该文件作用是采用新的 Flow-API 方式解析 flow 文件。
azkaban-flow-version: 2.0
- 6 .在文件夹中创建文件helloworld.flow,编辑如下内容
nodes:
- name: jobA
type: command
config:
command: echo "Hello World"
说明
(1)Name:job 名称
(2)Type:job 类型。command 表示你要执行作业的方式为命令
(3)Config:job 配置
- 7 .将文件夹helloworld进行压缩
- 8 . 进入到azkaban的web页面
1)创建项目
2)创建完成
3)点击Executor Flow进行执行任务调度
4)左上角显示SUCCEEDED且任务名显示为绿色表示执行完成
9 .停止azkaban-web
在安装目录下执行
bin/shutdown-web.sh
- 10 .停止azkaban-exec
在每个节点下的安装目录下执行
bin/shutdown-exec.sh
五、测试报错修改:
此错误不一定会出现,但是如果出现了请先配置了在重复执行上面的任务(只需要操作最后一步调度执行即可)
错误如下:
查看日志如下:
修改如下
在azkaban-exec的conf目录下修改azkaban.properties文件将azkaban.jobtype.plugin.dir=plugins/jobtypes修改为具体的路径
azkaban.jobtype.plugin.dir=/opt/module/azkaban/azkaban-exec/plugins/jobtypes
添加下面这一条
azkaban.native.lib=false
重新启动azkaban-exec,激活azkaban-execa,启动zkaban-web,再次进入web并且执行上面的helloworld案例操作
关于azkaban的azkaban-exec的集群启动、激活、关闭脚本如下
vim azkaban-exec.sh
#! /bin/bash
case $1 in
"start"){
for i in bigdata01 bigdata02 bigdata03
do
ssh $i "/opt/module/azkaban/azkaban-exec/bin/start-exec.sh"
done
};;
"curled"){
for i in bigdata01 bigdata02 bigdata03
do
ssh $i "curl -G "$i:12321/executor?action=activate" && echo"
done
};;
"stop"){
for i in bigdata01 bigdata02 bigdata03
do
ssh $i "/opt/module/azkaban/azkaban-exec/bin/shutdown-exec.sh"
done
};;
esac
执行指令:azkaban-exec.sh start/curled/stop
编写好后要赋予执行权限,不会调的私信我
编写不易,希望对您有益,期待我们大家在学习中不断精湛,在努力中进步!错误之处还望您能指出,欢迎评论