azkaban 学习日志

Azkaban是一款由LinkedIn开发的开源工作流调度器,它提供了直观的Web UI,支持job配置文件定义任务依赖。文章详细介绍了Azkaban的特性、架构、三种部署模式,并通过实例讲解了HDFS、MAPREDUCE、HIVE任务调度以及定时任务的配置和执行。


azkaban 封装了crontab。

1. azkaban简介

  • 是由领英退出的一款开源免费的工作流调度器软件

1.1 特点

- 功能强大  可以调度几乎所有软件的执行(command)
- 配置简单  job配置文件
- 提供了web页面使用
- java语言开发 源码清晰可见  可以进行二次开发

1.2 架构

在这里插入图片描述
- web服务器 :对外提供web服务 用户在页面上进行项目的相关管理
- executor服务器:负责具体的工作流的调度提交。
- 数据库:用于保存工作流相关信息(比如:mysql)

1.3 Azkaban 三种部署模式

1. solo server mode 该模式中 webServer 和 executorServer 运行在同一个进程中,进程名是
AzkabanSingleServer。使用自带的 H2 数据库。这种模式包含 Azkaban 的所有 特性,但一般用来学习和测试。

2. two-server mode 该模式使用 MySQL 数据库, Web Server 和 Executor Server 运行在不同 的进程中。

3. multiple-executor mode 该模式使用 MySQL 数据库, Web Server 和 Executor Server 运行在不同 的机器中。且有多个 Executor Server。该模式适用于大规模应用。


2–azkaban–介绍、架构、部署模式

  • Azkaban是由linkedin(领英)公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
  • azkaban的特点
    • · 提供功能清晰,简单易用的Web UI界面
      · 提供job配置文件快速建立任务和任务之间的依赖关系
      · 提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop
      基于Java开发,代码结构清晰,易于二次开发
  • azkaban的架构
    • mysql服务器: 存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等
    • AzkabanWebServer:对外提供web服务,使用户可以通过web页面管理。职责包括项目管理、权限授权、任务调度、监控executor。
    • AzkabanExecutorServer:负责具体的工作流的提交、执行。
  • 部署模式
    • solo server mode
    • tow-server mode
    • multiple-executor mode

3–azkaban–安装部署–源码编译

  • 依赖网速
  • 可以直接使用提供好的编译后的软件。

04–azkaban–安装部署–solo server模式安装–azkaban使用初体验

  • 解压配置
    mkdir /export/servers/azkaban
    tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz –C /export/servers/azkaban/

vim conf/azkaban.properties

  default.timezone.id=Asia/Shanghai #修改时区

vim plugins/jobtypes/commonprivate.properties
添加:

  `memCheck.enabled=false`
  azkaban默认需要3G的内存,剩余内存不足则会报异常
  • 启动
    cd azkaban-solo-server-0.1.0-SNAPSHOT/
    bin/start-solo.sh
    注:启动/关闭必须进到azkaban-solo-server-0.1.0-SNAPSHOT/目录下。
  • 8081
  • 必须在azkaban的根目录下 bin/start-solo.sh
  • 在使用azkaban的时候,编写xxx.job配置文件,在文件中,不能出现无意义的空格
  • 可以构建有依赖关系的job

05–azkaban–安装部署–two server模式安装–服务器配置上

  • 节点规划
    角色 HOST
    MySQL node-1
    web‐server和exec‐server不同进程 Node-2
  • mysql配置初始化
    node03:
    mkdir /export/servers/azkaban
    tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz –C /export/servers/azkaban/
    Mysql上创建对应的库、增加权限、创建表
    mysql> CREATE DATABASE azkaban_two_server; #创建数据库
    mysql> use azkaban_two_server;
    mysql> source /export/servers/azkaban/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql; #加载初始化sql创建表
  • web-server服务器配置
      node02:
      mkdir /export/servers/azkaban
      tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz –C /export/servers/azkaban/
      tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz –C /export/servers/azkaban/
      
 - 生成ssl证书:
         keytool -keystore keystore -alias jetty -genkey -keyalg RSA
         运行此命令后,会提示输入当前生成keystore的密码及相应信息,输入的密码请记住(所有密码统一以123456输入)。
         完成上述工作后,将在当前目录生成keystore证书文件,将keystore拷贝到 azkaban web服务器根目录中。
         如: cp keystore azkaban-web-server-0.1.0-SNAPSHOT/
         配置conf/azkaban.properties:

      # Azkaban Personalization Settings
      azkaban.name=Test
      azkaban.label=My Local Azkaban
      azkaban.color=#FF3601
      azkaban.default.servlet.path=/index
      web.resource.dir=web/
      default.timezone.id=Asia/Shanghai # 时区注意后面不要有空格
      
      # Azkaban UserManager class
      user.manager.class=azkaban.user.XmlUserManager
      user.manager.xml.file=conf/azkaban-users.xml
      
      # Azkaban Jetty server properties. 开启使用ssl 并且知道端口
      jetty.use.ssl=true
      jetty.ssl.port=8443
      jetty.maxThreads=25
      
      # Azkaban Executor settings  指定本机Executor的运行端口
      executor.host=localhost
      executor.port=12321
      
      #  KeyStore for SSL ssl相关配置  注意密码和证书路径
      jetty.keystore=keystore
      jetty.password=123456
      jetty.keypassword=123456
      jetty.truststore=keystore
      jetty.trustpassword=123456
      
      # Azkaban mysql settings by default. Users should configure their own username and password.
      database.type=mysql
      mysql.port=3306
      mysql.host=node-1
      mysql.database=azkaban_two_server
      mysql.user=root
      mysql.password=hadoop
      mysql.numconnections=100
      
      #Multiple Executor 设置为false
      azkaban.use.multiple.executors=true
      #azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus 
      azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
      azkaban.executorselector.comparator.Memory=1
      azkaban.executorselector.comparator.LastDispatched=1
      azkaban.executorselector.comparator.CpuUsage=1
      
      添加azkaban.native.lib=false 和 execute.as.user=false属性:
      mkdir -p plugins/jobtypes
      vim commonprivate.properties
      azkaban.native.lib=false
      execute.as.user=false
      memCheck.enabled=false
  • exec-server服务器配置
    配置conf/azkaban.properties:
 # Azkaban Personalization Settings
  azkaban.name=Test
  azkaban.label=My Local Azkaban
  azkaban.color=#FF3601
  azkaban.default.servlet.path=/index
  web.resource.dir=web/
  default.timezone.id=Asia/Shanghai
  
  # Azkaban UserManager class
  user.manager.class=azkaban.user.XmlUserManager
  user.manager.xml.file=conf/azkaban-users.xml
  
  # Loader for projects
  executor.global.properties=conf/global.properties
  azkaban.project.dir=projects
  
  # Where the Azkaban web server is located
  azkaban.webserver.url=https://node-2:8443
  
  # Azkaban mysql settings by default. Users should configure their own username and password.
  database.type=mysql
  mysql.port=3306
  mysql.host=node03
  mysql.database=azkaban_two_server
  mysql.user=root
  mysql.password=hadoop
  mysql.numconnections=100
  
  # Azkaban Executor settings
  executor.maxThreads=50
  executor.port=12321
  executor.flow.threads=30

06–azkaban–安装部署–two server模式安装–服务器配置下

  • mysql 配置初始化
  • webserver服务器配置
  • exec-server服务器配置
  • 集群启动
    • 在exec根目录下启动exec
    • 在web根目录下启动web
    • 激活
  - exec curl -G "node01:$(<./executor.port)/executor?action=activate" && echo

07–azkaban–安装部署–multiple-executor模式&executor激活问题

  • scp exec 到node03
  • 手动激活
- `execcurl -G "node02:$(<./executor.port)/executor?action=activate" && echo`

以上指令的node-3需要根据自己的虚拟机命名来设置


  • azkaban调度总结
    • 理论上任何一款软件,只有可以通过shell command执行 都可以转化成为azkaban的调度执行
    • type=command command = sh xxx.sh

job依赖调度

创建有依赖关系的多个job描述
第一个job:foo.job

# foo.job
type=command
command=echo foo

第二个job:bar.job依赖foo.job

# bar.job
type=command
dependencies=foo
command=echo bar

将所有job资源文件打到一个zip包中

在azkaban的web管理界面创建工程并上传zip包
启动工作流flow

3.HDFS任务调度

创建job描述文件

# fs.job
type=command
command=sh hdfs.sh
#!/bin/bash
/export/servers/hadoop-2.7.5/bin/hadoop fs -mkdir /azaz666

在这里插入图片描述
hadoop的hdfs下的fs 命令,整体命令(hadoop fs -mkdir /azaz666)用于创建azaz666文件夹

将job资源文件打包成zip文件

通过azkaban的web管理平台创建project并上传job压缩包
启动执行该job

4.MAPREDUCE任务调度

mr任务依然可以使用command的job类型来执行
创建job描述文件,及mr程序jar包(示例中直接使用hadoop自带的example jar)

mrwc.job

# mapreduce_wordcount.job
type=command
command=/export/servers/hadoop-2.7.5/bin/hadoop  jar hadoop-mapreduce-examples-2.7.5.jar wordcount /wc/input /wc/output

在这里插入图片描述

  • 需要在把hadoop文件夹里的jar包一起打包

    创建输入和输出文件夹:hadoop fs -mkdir -p /wc/input 创建输入文件夹里要输入的文件

将所有job资源文件打到一个zip包中

在azkaban的web管理界面创建工程并上传zip包
启动job

5.HIVE脚本任务调度

创建job描述文件和hive脚本
Hive脚本: test.sql

use default;
drop table aztest;
create table aztest(id int,name string) row format delimited fields terminated by ',';
load data inpath '/aztest/hiveinput' into table aztest;
create table azres as select * from aztest;
insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest; 

Job描述文件:hivef.job

hivef.job

type=command
command=/home/hadoop/apps/hive/bin/hive -f 'test.sql'

将所有job资源文件打到一个zip包中创建工程并上传zip包,启动job

6.定时任务调度

除了手动立即执行工作流任务外,azkaban也支持配置定时任务调度。开启方式如下:
首页选择待处理的project

在这里插入图片描述

上述图片中,选择左边schedule表示配置定时调度信息,选择右边execute表示立即执行工作流任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值