azkaban的安装、配置与使用详解

1、下载安装包并编译

1.下载如下软件安装包,上传至虚拟机并解压
gradle-5.6.3-all.zip
azkaban-3.84.10.tar.gz tmp
在这里插入图片描述

[root@hadoop100 software]# tar -zxvf azkaban-3.84.10.tar.gz
[root@hadoop100 software]# unzip gradle-5.6.3-all.zip

2.进入azkaban源码的解压包,进行编译

[root@hadoop100 azkaban-3.84.10]# cd /opt/software/azkaban-3.84.10
[root@hadoop100 azkaban-3.84.10]# ./gradlew build installDist -x test

编译成功后在下面三个文件夹中找到如下的三个压缩包
在这里插入图片描述

./azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz
./azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
./azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

创建目录/opt/software/azkaban,将三个压缩包拷贝到里面并解压在这里插入图片描述

[root@hadoop100 software]# mkdir azkaban
[root@hadoop100 software]# cd azkaban/
[root@hadoop100 azkaban]# tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
[root@hadoop100 azkaban]# tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
[root@hadoop100 azkaban]# tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz
[root@hadoop100 azkaban]# mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec
[root@hadoop100 azkaban]# mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web
[root@hadoop100 azkaban]# rm -f *.gz

2、MySQL创建azkaban数据库和用户

  1. 修改MySQL的内存
vi /etc/my.cnf
//在最后一行加入如下的内容,进行修改
max_allowed_packed=1024M
  1. 新建azkaban数据库
mysql> create database azkabandb;
  1. 创建azkaban用户
mysql> create user 'azkaban'@'%' identified by '123456';
  1. 给azkaban用户赋权
mysql> grant select,insert,update,delete,on azkabandb.* to 'azkaban'@'%' with grant option;
  1. 创建azkaban存储在mysql中的元数据表格
    解压1.2中得到的压缩包:azkaban-db-0.1.0-SNAPSHOT.tar.gz
    找到创建元数据表格的脚本:create-all-sql-0.1.0-SNAPSHOT.sql
    在mysql的azkaban库中,执行脚本,进行建表:
mysql> source /opt/software/azkaban/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql

3、配置azkaban-exec

  1. 进入如下的配置文件
cd /opt/software/azkban/azkaban-exec/conf
vi azkaban.properties
  1. 修改时区,将默认地址改为亚洲上海
    在这里插入图片描述
  2. 修改网页服务url的IP地址为本机IP地址
    在这里插入图片描述
  3. 修改azkaban数据库信息(地址为MySQL数据库所在的机器的IP地址,其他是在上面2.3新建的azkaban的用户信息)
  4. 增加端口号12321为指定登录端口在这里插入图片描述
  5. 启动azkaban-exec
[root@hadoop100 azkaban-exec]# bin/start-exec.sh 
[root@hadoop100 azkaban-exec]# jps
2594 AzkabanExecutorServer
2605 Jps
  1. 登录MySQL,查看azkabandb数据库下的executors,此时的用户是未激活状态,如下图active状态为0
    在这里插入图片描述
  2. 激活用户
[root@hadoop100 azkaban-exec]# curl -G "192.168.112.100:12321/executor?action=activate" && echo

在这里插入图片描述

  1. 再次查看executors,active状态为1,表示激活 ,azkaban-exec配置完成
    在这里插入图片描述

4、配置azkaban-web

1.编辑配置文件 azkaban.properties

[root@hadoop100 conf]# cd /opt/software/azkban/azkaban-web/conf
[root@hadoop100 conf]# vi azkaban.propertie
//时区改为亚洲上海
7 default.timezone.id=Asia/Shanghai
//修改azkaban数据库信息
41 mysql.host=192.168.112.108
42 mysql.database=azkabandb
43 mysql.user=azkaban
44 mysql.password=123456
//MinimumFreeMemory限制可用内存需要在6G以上,当不满足条件时将不开启web,这里为了演示将该项删除
48 azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus

在这里插入图片描述
2. 修改azkaban-user.xml

[root@hadoop100 conf]# vi ./azkaban-users.xml

添加一个用户,登录web时使用。设置用户名和密码,注意将用户角色设为admin在这里插入图片描述
3. 启动azkaban-web

[root@hadoop100 azkaban-web]# cd  /opt/software/azkban/azkaban-web
[root@hadoop100 azkaban-web]# ./bin/start-web.sh

4.测试

  1. 在网页输入我们的IP地址和上面设置的8081端口,输入刚才添加的用户和密码
    在这里插入图片描述
  2. 创建项目
    在这里插入图片描述
  3. ①创建文件azkaban.project:
    编辑内容:azkaban-flow-version: 2.0
    ②创建任务文件:One.flow
    编辑内容:
//文件要用notepad++修改为Unix格式,编写语言为YAML,只能用空格
//将两个文件打成.zip压缩包,作为要上传的文件
nodes:
  - name: firstJob
    type: command
    config:
      command: echo "hello world"
  1. 上传文件,即可执行任务
    在这里插入图片描述
  2. 点击Excete Flow执行任务
    在这里插入图片描述

5、案例演示

  1. condition和脚本的使用
//①创建任务文件
nodes: 
  - name: jobA
    type: command
    config:
      command: sh jobA.sh
   - name: jobB
     type: command
     dependsOn:
       - jobA
     config:
       command: sh jobB.sh
     condition: ${jobA:wk} == 1 	#符合此条件,则执行jobB
//②创建脚本jobA.sh
#!/bin/base
echo "do jobA.sh"
wk= 'date +%w'
echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE
//③创建脚本jobB.sh
#!/bin/bash
echo "do jobB"
//④创建项目问价
azkaban-flow-version: 2.0
  1. dependsOn和one_success的使用
    depends表示依赖于后面所列出来的job的结果
    one_success表示,只要有一个成功即执行后面的任务
nodes:
  -name: jobA
   type: command
   config:
     conmand: sh jobA.sh
  -name: jobB
   type: command
   config:
     conmand: sh jobB.sh
  -name: jobC
   type: command
   dependsOn:
     - jobA
     - jobB
   config:
     conmand: sh jobC.sh
   condition: one_success
  1. 操作Hbase数据库
//创建hbase.sh脚本
list_namespace
exit
//创建任务文件
nodes:
  - name: jobhbase
    type: command
    config:
      command: hbase shell hbase.sh
  1. 操作hive数据库
//创建myhive.sql脚本
create database if not exists exam202106;
user exam202106;
drop table if exists azinfo;
create table azinfo(id int,name string) 
row format delimited fields terminated by ',';
load data inpath '/opt/azkaban/info.txt' into table azinfo;
drop table if  exists azres;
create table azres as select * from azinfo;
//创建任务文件
nodes:
  - name: hivedemo
    type: command
    config:
      command: hive -f myhive.sql
  1. 执行Java代码
//创建任务文件,Xms和Xmx分别问最小值和最大值,kgc kb11为传入的两个参数
nodes:
  - name: javaJob
    type: javaprocess
    config:
      Xms: 100M
      Xmx: 200M
      java.class: nj.zb.kb11.TestJavaProcess kgc kb11
  1. 通过API操作spark
    在这里插入图片描述
//创建任务文件(代码全类名+代码jar包)
nodes:
  - name: jobspark
    type: command
    config:
      command: spark-submit --class nj.zb.kb11.AzkabanSparkDemo ./azkabandemo-1.0-SNAPSHOT.jar