Azkaban 大数据 任务调度

参考视频:尚硅谷大数据Azkaban 3.x教程(全新发布)_哔哩哔哩_bilibili

目录

Azkaban: 是一个定时、批量工作流任务调度器(工作流程调度,定时调度)

常见的开源调度系统:

 比较:

特点:

三个关键组件

  1  AzkabanWebServer :

  2  AzkabanExecutorServer :

  3  Mysql :

部署:

       1 上传jar包,解压

        2 安装mysql数据库

        3 修改mysql的配置文件                

        4 配置Executor Server:

         5 Executor Server启动,激活:         

        6 配置 Web Server 

        7 修改azkaban-users.xml文件 ,用于用户管理

        8 启动web server

访问WebUI:

配置介绍

条件工作流

        运行时参数案例

预定义宏:

定时调度

邮件报警,电话报警:

Azkaban多Excutor模式注意事项


Azkaban: 是一个定时、批量工作流任务调度器(工作流程调度,定时调度)

常见的开源调度系统:

        简单单一的任务调度: Linux的Crontab

        复杂的任务调度: Ooize ,Azkaban, Airflow(python写的), DolphinScheduler

 比较:

        Ooize 相比Azkaban 是一个重量级的任务调度系统,功能全面,但配置使用更加复杂。如果可以不在意某些功能的缺失,轻量级调度器Azkaban是很不错的选择

        Ooize : CDH平台下的平台调度器,借助可视化的HUE使用比较友好

        Azkaban:简单易用

        Airflow : python开发调度的,具备一定的python基础

        DolphinScheduler: 现在比较好的,可视化的操作,比较方便

特点:

    1 兼容任何版本的hadoop

    2 易于使用的web用户界面

    3 简单的工作流上传

    4 方便设置任务之间的关系

    5 调度工作流

    6 模块化和可插拔的插件机制

    7 认证/授权

    8 能够杀死并重新启动工作流

    9 有关失败和成功的电子邮件提醒

三个关键组件

  1  AzkabanWebServer :

        是Azkaban工作流系统的主要管理者,作用:用户认证,负责project管理,定时执行工作流,跟踪工作流执行进度等等

  2  AzkabanExecutorServer :

        负责具体的工作流的提交、执行,他们通过mysql数据库来协调任务的执行

  3  Mysql :

        存储大部分执行流状态等信息

部署:

       1 上传jar包,解压

                里面mysql脚本包,excecutor包(集群部署多个服务器),web包.

                安装顺序: mysql -> excecutor -> web

        2 安装mysql数据库

                刷mysql脚本里的 create-all-sql-3.xxxx.sql 脚本

        3 修改mysql的配置文件                
sudo vim /etc/my.cnf

# mysqld下面加一行 , 更改mysql包大小,防止Azkaban连接Mysql阻塞,重启mysql
max_allowed_packet=1024M


# 重启mysql
sudo systemctl restart mysqld
        4 配置Executor Server

                编辑executor解压包下conf里的 azkaban.properties , 同步其他节点

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



# 配置时区
default.timezone.id=Asia/Shanghai

# webserver的连接 
azkaban.webserver.url=http://hadoop102:8081

# executor的端口,不配会随机值,不便于管理
executor.port=12321

# 配置数据库信息
mysql.port=3306
mysql.host=
mysql.database=
mysql.user=
mysql.password=
         5 Executor Server启动,激活:         
# 最好进入azkaban/azkaban-exec下执行,启动server
# 如果 azkaban-exec 下面出现executor.port文件,说明启动成功。或者数据库表(executors)里查看
bin/start-exec.sh

# 激活
curl -G "hadoop102:12321/executor?action=activate" && echo

jps 查看
        6 配置 Web Server 

        编辑 web解压包下conf的azkaban.properties        

default.timezone.id=Asia/Shanghai

#mysql的数据库信息
mysql...

# 集群可不做修改,单机MininumFreeMemory可能保留的内存过多导致无法启动,去掉
# StaticRemainingFlowSize 正在排队的任务数
# MininumFreeMemory 内存占用最小保留
# CpuStatus cpu占用情况
azkaban.executorselector.filters=StaticRemainingFlowSize,MininumFreeMemory,CpuStatus
        7 修改azkaban-users.xml文件 ,用于用户管理

        可以不配,默认是 azkaban azkaban

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

        8 启动web server
bin/start-web.sh

访问WebUI:

         http://hadoop:8081(/index)  ,并用atguigu登录

配置介绍

azkaban.project  : azkaban描述flow的版本语法,一种是yml,一种是properties。2.0是第二代(yml),第一代是properties

azkaban-flow-version: 2.0 

asd.flow, *.flow:  Azkaban内置的任务类型支持:commond,java

nodes:
    - name: jobC  (job的名称)
      type: command (job类型,command表示要执行作业的方式是命令)
      config: (job 的配置)
        command: sh .../xxx.sh
        retries: 3 (失败重试3次,还可以手动)
        retry.backoff: 10000(失败重试间隔时间 10s) 
      dependsOn: (依赖jobA 和jobB) 
        - jobA
        - jobB

    - name: jobA  
      type: command 
      config: 
        command: curl -H "Accept: */*" -H "Content-type:application/json;charset=UUTF-8" -X POST http://ddfw.chinaoly.com:6605/mvs

    - name: jobB  (jar包和flow文件,project文件打包成一个)
      type: javaprocess(javaprocess 类型)
      config: 
        Xms: 96M (最小堆)
        Mmx: 200M (最大堆)
        java.class: com.chinaoly.Main (要运行的java对象,其中必须包含Main方法)
        # classpath: (类路径,不配置则是flow文件所在的节点)
        # main.args: (main方法的参数,不配则没有)

将azkaban.project和flow文件打包成一个zip文件,名称必须是英文

条件工作流

        允许用户自定义执行条件来决定是否运行某些job,条件可以是由当前job的父job输出的运行时参数构成,也可以使用预定义宏。

        运行时参数案例

                1 父job将参数写入 JOB_OUTPUT_PROP_FILE环境变量所指向的文件

                2 子job使用 ${jobName.param} 来获取父job输出的参数并定义执行条件

        

#       ==  !=  >  >=  <  <=  &&  ||  ! 

jobA.sh:
#!/bin/bash
echo "do A"
wk='date +%w' (今天周几,eg: 周日0,周一-周六(1-6))
echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE

jobB.sh
#!/bin/bash
echo "do B"

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

预定义宏:

        azkaban中预置了几个特殊的判断条件,成为预定义宏

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

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 jobA.sh 
    condition: one_success 

定时调度

eg:离线任务定时调度

页面配置

邮件报警,电话报警:

        没看,有需要自己再看视频吧~

Azkaban多Excutor模式注意事项

        azkaban多excutor模式 是在集群中多个节点部署excutor,这种模式下,web server会根据策略选取一个excutor去执行任务。

        如:command命令中启动脚本,选取的机器上是否真得存在呢?

        解决方法:

        1 在excutor所在节点都部署任务所需要的脚本和应用

        2 指定哪个excutor执行。

                2.1 去azkaban数据库找excutors表, id,host,post,active中找到需要执行excutor的服务器的id(这张表的id是自增主键)

                2.2 web页面 -> projects -> 找到相应的flow任务 -> 绿色的Execute Flow按钮 -> Flow Parameters -> 加属性 Name:useExecutor    Value :id的值

你可能感兴趣的:(大数据)