azkaban

azkaban

1、azkaban概述

工作流调度系统

2、常见的任务调度

1、简单的任务调度:直接使用linux的crontab来定义

2、复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban、Cascading、Hamake

3、ooize和azkaban对比

1、功能上:
两者均可以调度mapreduce,pig,java,脚本工作流任务
两者均可以定时执行工作流任务

2、传参数:
Azkaban支持直接传参,例如${input}
Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}

3、定时执行
Azkaban的定时执行任务是基于时间的
Oozie的定时执行任务基于时间和输入数据

4、azkaban特点

1)Web用户界面
2)方便上传工作流
3)方便设置任务之间的关系
4)调度工作流
5)认证/授权(权限的工作)
6)能够杀死并重新启动工作流
7)模块化和可插拔的插件机制
8)项目工作区
9)工作流和任务的日志记录和审计

5、集群搭建

1、上传包:azkaban-db-3.84.4.tar.gz,azkaban-exec-server-3.84.4.tar.gz,azkaban-web-server-3.84.4.tar.gz

2、解压:先创建文件夹mkdir /opt/module/azkaban,然后解压ls /opt/software/azkaban*.tar.gz | xargs -n1 tar zxC /opt/module/azkaban -f

3、初始化mysql:
登录:mysql -uroot -p000000
mysql> CREATE DATABASE azkaban;
mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY '000000';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
mysql> use azkaban;
mysql> source /opt/module/azkaban/azkaban-db-3.84.4/create-all-sql-3.84.4.sql
mysql> quit;

4、修改mysql配置
sudo vim /etc/my.cnf
max_allowed_packet=1024M

5、重启mysql
sudo systemctl restart mysqld

6、设置Executor Server
vim /opt/module/azkaban/azkaban-exec-server-3.84.4/conf/azkaban.properties
...
default.timezone.id=Asia/Shanghai
...
azkaban.webserver.url=http://hadoop102:8081
...
database.type=mysql
mysql.port=3306
mysql.host=hadoop102
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
executor.metric.reports=true
executor.metric.milisecinterval.default=60000

7、设置Web Server
vim /opt/module/azkaban/azkaban-web-server-3.84.4/conf/azkaban.properties
...
default.timezone.id=Asia/Shanghai
...
database.type=mysql
mysql.port=3306
mysql.host=hadoop102
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
...
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus

8、修改azkaban-users.xml文件(在web文件下)
vim /opt/module/azkaban/azkaban-web-server-3.84.4/conf/azkaban-users.xml
<azkaban-users>
  <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
  <user password="metrics" roles="metrics" username="metrics"/>
  <user password="123456" roles="metrics,admin" username="atguigu"/>

  <role name="admin" permissions="ADMIN"/>
  <role name="metrics" permissions="METRICS"/>
</azkaban-users>

9、同步azkaban至另外两个节点

10、激活executor server(三台):
cd /opt/module/azkaban/azkaban-exec-server-3.84.4
bin/start-exec.sh
目录下出现executor.port文件,说明启动成功
激活命令:
curl -G "hadoop102:$(<./executor.port)/executor?action=activate" && echo
curl -G "hadoop103:$(<./executor.port)/executor?action=activate" && echo
curl -G "hadoop104:$(<./executor.port)/executor?action=activate" && echo
三台机器均会出现{"status":"success"}提示

11、在102启动web server
cd /opt/module/azkaban/azkaban-web-server-3.84.4
bin/start-web.sh

12、访问http://hadoop102:8081,并用atguigu,123456用户登陆

6、范例

1、入门案例
1、新建文件:first.project,写入:
azkaban-flow-version: 2.0

2、新建文件:basic.flow,写入:
nodes:
  - name: jobA
    type: command
    config:
      command: echo "This is an echoed text."

3、将两个文件打包到一起(必须zip)

4、在web页面新建工程并上传zip文件


5、执行
2、有依赖的
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"
3、全局变量
config:
  words.to.print: "This is for test!"

nodes:
  - name: jobA
    type: command
    config:
      command: echo ${words.to.print}
4、子工作流
nodes:
  - name: jobC
    type: command
    # jobC 依赖embedded_flow
    dependsOn:
      - embedded_flow
    config:
      command: echo "I’m JobC"

  - name: embedded_flow
    type: flow
    config:
      prop: value
    nodes:
      - name: jobB
        type: noop
        dependsOn:
          - jobA

      - name: jobA
        type: command
        config:
          command: pwd
5、java代码
1、新建java程序
package com.atguigu;

public class AzTest {
    public static void main(String[] args) {
        System.out.println("This is for testing!");
    }
}

2、打包成jar包

3、testJava.flow
nodes:
  - name: test_java
    type: javaprocess
    config:
      Xms: 96M
      Xmx: 200M
      java.class: com.atguigu.AzTest

4、将Jar包、flow文件和project文件打包成zip,上传到集群并执行
6、条件工作流
nodes:
 - name: JobA
   type: command
   config:
     command: sh /opt/module/write_to_props.sh

 - name: JobB
   type: command
   dependsOn:
     - JobA
   config:
     command: echo "This is JobB."
   condition: ${JobA:param1} == "AAA"

 - name: JobC
   type: command
   dependsOn:
     - JobA
   config:
     command: echo "This is JobC."
   condition: ${JobA:param1} == "BBB"
7、根据执行是否失败来判断下一个任务执行
nodes:
  - name: JobA
    type: command
    config:
      command: sh /opt/module/write_to_props.sh

  - name: JobB
    type: command
    dependsOn:
      - JobA
    config:
      command: echo "This is JobB."
    condition: ${JobA:param1} == "AAA"

  - name: JobC
    type: command
    dependsOn:
      - JobA
    config:
      command: echo "This is JobC."
    condition: ${JobA:param1} == "BBB"

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

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

  - name: JobF
    type: command
    dependsOn:
      - JobB
      - JobC
      - JobD
      - JobE
    config:
      command: echo "This is JobF."
condition: all_done


说明:
1)	all_success: 全部成功(默认)
2)	all_done:全部完成
3)	all_failed:全部失败
4)	one_success:至少一个成功
5)	one_failed:至少一个失败

7、邮件报警

1、web端配置文件
vim /opt/module/azkaban/azkaban-web-server-3.84.4/conf/azkaban.properties

#这里设置邮件发送服务器,需要 申请邮箱,切开通stmp服务,以下只是例子
mail.sender=atguigu@126.com
mail.host=smtp.126.com
mail.user=atguigu@126.com
mail.passwd=password

#这里设置工作流成功或者失败默认向哪里发送服务
job.failure.email=atguigu@126.com
job.success.email=atguigu@126.com
2、重启web服务

3、修改工作流文件flow
nodes:
  - name: jobA
    type: command
    config:
      command: echo "This is an echoed text."
      failure.emails: atguigu@126.com
      success.emails: atguigu@126.com
      notify.emails: atguigu@126.com 

8、电话报警


9、YAML语法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值