大数据技术-Azkaban学习笔记

Azkaban安装Linux集群版

官网下载地址https://github.com/azkaban/azkaban/tags

上传tar包

image-20220404223611320

新建一个文件夹,将tar包都解压到该目录下

tar -zxvf azkaban-db-3.84.4.tar.gz -C /opt/module/azkaban/
tar -zxvf azkaban-exec-server-3.84.4.tar.gz -C /opt/module/azkaban/
tar -zxvf azkaban-web-server-3.84.4.tar.gz -C /opt/module/azkaban/

修改默认文件名,方便快捷启动

mv azkaban-exec-server-3.84.4 azkaban-exec
mv azkaban-web-server-3.84.4 azkaban-web

image-20220404223911858

配置MySQL

创建Azkaban数据库,存放Azkaban元数据信息

mysql> create database azkaban;

创建azkaban用户并赋予权限

# 设置密码有效长度4位及以上
mysql> set global validate_password_length=4;
# 设置密码策略最低级别
mysql> set global validate_password_policy=0;
# 创建azkaban用户,任何主机都可以访问Azkaban,密码是azkaban
mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
# 赋予azkaban用户增删改查权限
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;

创建azkaban表,使用azkaban自带的数据库脚本生成数据

# 创建azkaban表
mysql> use azkaban;
mysql> source /opt/module/azkaban/azkaban-db-3.84.4/create-all-sql-3.84.4.sql
# 退出mysql
mysql> quit;

image-20220404224706288

更改MySQL包大小,防止azkaban连接MySQL阻塞

vim /etc/my.cnf
# 在[mysqld]下面加一行max_allowed_packet=1024M
[mysqld]
max_allowed_packet=1024M

image-20220404224755973

重启MySQL

systemctl restart mysqld

配置Executor Server

Azkaban Executor Server 处理工作流和作业的实际执行

编辑azkaban.properties

vim /opt/module/azkaban/azkaban-exec/conf/azkaban.properties

image-20220404225540290

同步azkaban-exec到所有节点

xsync /opt/module/azkaban/azkaban-exec

启动executor server

必须进入到azkaban-exec路径,分别在三台机器上启动

image-20220404225901619

bigdata100> bin/start-exec.sh
bigdata102> bin/start-exec.sh
bigdata104> bin/start-exec.sh

如果在azkaban-exec目录下出现executor.port文件,则说明启动成功

image-20220404230216106

激活executor

bigdata100> curl -G "bigdata100:12321/executor?action=activate" && echo
bigdata102> curl -G "bigdata102:12321/executor?action=activate" && echo
bigdata104> curl -G "bigdata104:12321/executor?action=activate" && echo

如果三台服务器都提示如下,则说明激活成功

image-20220404230356962

配置Web Server

Azkaban Web Server处理项目管理,身份验证,计划和执行触发

编辑azkaban.properties

vim /opt/module/azkaban/azkaban-web/conf/azkaban.properties

image-20220404230853748

StaticRemainingFlowSize:正在排队的任务数

CpuStatus:CPU占用情况

MinimumFreeMemory:内存占用情况。测试环境,必须将MinimumFreeMemory删除掉,否则它会认为集群资源不够,不执行

修改azkaban-users.xml文件,添加czs用户

vim /opt/module/azkaban/azkaban-web/conf/azkaban-users.xml

image-20220404231058290

启动web server

必须进入到主节点的azkaban-web路径启动

bigdata100> bin/start-web.sh

image-20220404231235988

访问主节点的8081端口,并用czs账号登录

image-20220404231358112

Azkaban基本使用

第一个Hello World

在自己机器上,新建一个azkaban.project文件,编辑内容如下

说明使用azkaban2.0语法

azkaban-flow-version: 2.0

新建basic.flow文件,内容如下

name:job名称

type:job类型,command表示执行作业的方式为命令

config:job配置

nodes:
  - name: jobA
    type: command
    config:
      command: echo "Hello World"

将azkaban.project和basic.flow文件压缩到一个zip文件夹,文件夹必须是英文

image-20220404232020699

image-20220404232057029

在WebServer新建项目

image-20220404232351693

给项目名称命名和添加项目描述

image-20220404232442214

上传压缩的文件夹

image-20220404232536327

执行任务流

image-20220404232617478

image-20220404232714208

image-20220404232656942

在日志中,查看运行结果

image-20220404232751392

image-20220404233003699

作业依赖操作

目标:JobA和JobB执行完毕之后,才能执行JobC

azkaban.project

azkaban-flow-version: 2.0

编写basic.flow

nodes:
  - name: jobC
    type: command
    # jobC 依赖 JobA和JobB
    dependsOn:
      - jobA
      - jobB
    config:
      command: echo "I’m JobC"

  - name: jobA
    type: command
    config:
      command: echo "I’m JobA"

  - name: jobB
    type: command
    config:
      command: echo "I’m JobB"

将azkaban.project和basic.flow文件压缩到一个zip文件夹,文件夹必须是英文

image-20220404233311234

重复上述第一个hello world操作

image-20220404233441448

image-20220404233522647

image-20220404233553687

image-20220404233633978

image-20220404233805773

自动失败重试操作

目标:如果执行任务失败,需要重试3次,重试的时间间隔10000ms

azkaban.project

azkaban-flow-version: 2.0

编写basic.flow

retries重试次数

retry.backoff:重试的时间间隔

nodes:
  - name: JobA
    type: command
    config:
      command: sh /not_exists.sh
      retries: 3
      retry.backoff: 10000

将azkaban.project和basic.flow文件压缩到一个zip文件夹,文件夹必须是英文

image-20220404235208666

重复上述第一个hello world操作

image-20220404235301393

image-20220404235338184

image-20220404235355039

image-20220404235521111

手动失败重试操作

目标:JobA->JobB(依赖于A)->JobC->JobD->JobE->JobF。生产环境中任何Job都有可能挂掉,可以根据需求执行想要执行的Job

azkaban.project

azkaban-flow-version: 2.0

编写basic.flow

retries重试次数

retry.backoff:重试的时间间隔

nodes:
  - name: JobA
    type: command
    config:
      command: echo "This is JobA."

  - name: JobB
    type: command
    dependsOn:
      - JobA
    config:
      command: echo "This is JobB."

  - name: JobC
    type: command
    dependsOn:
      - JobB
    config:
      command: echo "This is JobC."

  - name: JobD
    type: command
    dependsOn:
      - JobC
    config:
      command: echo "This is JobD."

  - name: JobE
    type: command
    dependsOn:
      - JobD
    config:
      command: echo "This is JobE."

  - name: JobF
    type: command
    dependsOn:
      - JobE
    config:
      command: echo "This is JobF."

将azkaban.project和basic.flow文件压缩到一个zip文件夹,文件夹必须是英文

image-20220404235706559

重复上述第一个hello world操作

image-20220404235741944

image-20220404235818759

image-20220405000024458

image-20220405000128967

JavaProcess作业类型操作

JavaProcess类型可以运行一个自定义主类方法,type类型为javaprocess,可用的配置为

  • Xms:最小堆
  • Xmx:最大堆
  • classpath:类路径
  • java.class:要运行的Java对象,其中必须包含Main方法
  • main.args:main方法的参数

创建一个azkaban的maven工程

image-20220405001035466

创建测试类

public class AzTest {
    public static void main(String[] args) {
        System.out.printf("this is azkaban java process test");
    }
}

打成jar包

maven的pom文件添加如下内容,然后maven package

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

image-20220405001131412

新建basic.flow文件

azkaban-flow-version: 2.0

新建basic.flow文件

Xms:最小堆

Xmx:最大堆

java.class:要运行的Java对象,其中必须包含Main方法

nodes:
  - name: test_java
    type: javaprocess
    config:
      Xms: 96M
      Xmx: 200M
      java.class: czs.study.azkaban.AzTest

将azkaban.project和basic.flow文件压缩到一个zip文件夹,文件夹必须是英文

image-20220405002059846

image-20220405001411989

重复上述第一个hello world操作

image-20220405002215125

Azkaban条件工作流

条件工作流功能允许用户自定义执行条件来决定是否运行某些Job。条件可以由当前Job的父Job输出的运行时参数构成,也可以使用预定义宏。在这些条件下,用户可以在确定Job执行逻辑时获得更大的灵活性,例如,只要父Job之一成功,就可以运行当前Job

运行时参数操作

基本原理:父Job将参数写入JOB_OUTPUT_PROP_FILE环境变量所指向的文件,子Job使用 ${jobName:param}来获取父Job输出的参数并定义执行条件,支持的条件运算符如下:

==	等于
!=	不等于
>	大于
>=	大于等于
<	小于
<=	小于等于
&& 与
||	或
!	非

目标:JobA执行一个shell脚本,JobB执行一个shell脚本,但JobB不需要每天都执行,而只需要每个周一执行。

新建JobA.sh

#!/bin/bash
echo "do JobA"
wk=`date +%w`
echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE

新建JobB.sh

#!/bin/bash
echo "do JobB"

新建condition.flow

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

将JobA.sh、JobB.sh、condition.flow和azkaban.project打包成condition.zip

image-20220405003419301

创建condition项目->上传condition.zip文件->执行作业

image-20220405002926180

预定义宏操作

Azkaban中预置了几个特殊的判断条件,称为预定义宏,预定义宏会根据所有父Job的完成情况进行判断,再决定是否执行。可用的预定义宏如下:

  • all_success: 表示父Job全部成功才执行(默认)
  • all_done:表示父Job全部完成才执行
  • all_failed:表示父Job全部失败才执行
  • one_success:表示父Job至少一个成功才执行
  • one_failed:表示父Job至少一个失败才执行

目标:JobA执行一个shell脚本,JobB执行一个shell脚本,JobC执行一个shell脚本,要求JobA、JobB中有一个成功即可执行

新建JobA.sh

#!/bin/bash
echo "do JobA"

新增JobC.sh

#!/bin/bash
echo "do JobC"

新建macro.flow

nodes:
 - name: JobA
   type: command
   config:
     command: sh JobA.sh

 - name: JobB
   type: command
   config:
     command: sh JobB.sh

 - name: JobC
   type: command
   dependsOn:
     - JobA
     - JobB
   config:
     command: sh JobC.sh
   condition: one_success

JobA.sh、JobC.sh、macro.flow、azkaban.project文件,没有JobB.sh,打包

image-20220405003337518

创建macro项目->上传macro.zip文件->执行作业

image-20220405003608325

image-20220405003643034

Azkaban邮件告警

QQ邮箱开启SMTP服务

进入QQ邮箱-账号即可看到,一定要记住生成的授权码

image-20220405003922680

在azkaban-web节点上,编辑azkaban.properties

vim /opt/module/azkaban/azkaban-web/conf/azkaban.properties

image-20220405004405161

保存并重启web-server

bigdata100> bin/shutdown-web.sh
bigdata100> bin/start-web.sh

image-20220405004512055

编写basic.flow

nodes:
  - name: jobA
    type: command
    config:
      command: echo "This is an email test."

将azkaban.project和basic.flow压缩成email.zip

image-20220405004837319

测试邮箱告警效果

image-20220405004756560

image-20220405004823915

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值