数据仓库任务调度器-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

  1. 将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

五、测试报错修改:

此错误不一定会出现,但是如果出现了请先配置了在重复执行上面的任务(只需要操作最后一步调度执行即可)

错误如下

数据仓库调度系统 数仓调度工具_mysql_02


查看日志如下

数据仓库调度系统 数仓调度工具_数据仓库_03


数据仓库调度系统 数仓调度工具_mysql_04

修改如下
在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
编写好后要赋予执行权限,不会调的私信我


编写不易,希望对您有益,期待我们大家在学习中不断精湛,在努力中进步!错误之处还望您能指出,欢迎评论