初识Azkaban

初识Azkaban,第1张

数据的初始来源: RDBMS、log文件
离线处理:
–> ETL
–> 入数据湖(Delta Lake、Hudi 、Iceberg)
– > 各种统计维度的分析
– > RDBMS 、 NoSQL

工作流调度,组织各任务单元之间存在的时间、依赖关系。

常用的调度器:Azkaban 和 Airflow 最常用
  • 简单的任务调度:
    直接使用linux的 crontab。只能单机,无管理界面(只能通过日志自己查),适合小规模的调度

  • 复杂的任务调度:
    开发调度平台或使用现成的开源调度系统,比如 Ooize、Azkaban、Airflow等

  • Azkaban: 由LinkedIn公司开源,有管理界面,配置也OK,但也有缺点,会将
    还不是 apache顶级项目,开源托管在github azkaban.github.io

    兼容任何Hadoop版本
    易于使用的web UI
    简单的web和http工作流上传
    通过项目工作区来管理多个工作流
    调度的工作流
    模块化和pluginable
    身份验证和授权
    跟踪用户 *** 作
    电子邮件提醒失败和成功
    SLA报警和自动杀死
    重试失败的作业
    
  • Oozie : CM(container manage) , 太重量级,如果不是搭配CM、HUE的项目,单独搭建很麻烦,底层配置是xml

  • Airflow :

应用平台用以上的就够;基础平台往往都是自研,以上都不能无缝满足所有需求。

Azkaban 架构:

分布式的工作流,可以布置在多个Executor上

web server – 与管理页面相关
executor server – 与执行相关
mysql – 元数据的存储(web 和 executor的元数据)[默认自带H2数据库]

Azkaban standalone: web 和 executor 在同一个进程上
多executor集群,web 和 executor 部署在多个机器。web 挂到并不影响正在运行的executor。

源码编译

2.x有安装包,3.x 只能通过源码编译安装 (不是maven编译)https://azkaban.readthedocs.io/en/latest/getStarted.html#getstartedhead

// 在 Azkaban源码路径下执行:
./gradlew build installDist -x test

如果太慢,是因为编译是要根据 gradle-wrapper.propertities 文件中

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

去下载这个文件。那我们可以编译前根据这个连接,自己下载好gradle-4.6-all.zip,放在这个目录下: gradle/wrapper。

同时修改 gradle-wrapper.propertities 配置文件中

distributionUrl=gradle-4.6-all.zip
其他配置 ./conf

./conf 下有4个配置文件

azkaban.properties -- 与页面相关的配置,也指示了用户的配置是在azkaban-user.xml 文件
azkaban-user.xml   --用户、用户组、密码的明细配置
global.properties  --全局配置,默认还是空的
log4j.properties

solo-server 模式

Getting started with the Solo Server

有bug(环境变量没完全好),只能在 bin上层目录用命令

bin/start-solo.sh  

start-solo.sh 能将web 和 excutor 同时启动在一个进程。

Flows

https://azkaban.readthedocs.io/en/latest/createFlows.html#creating-flows

版本问题:

Azkaban : 2.x 和 3.x
分别也叫 Azkaban Flow 1.0 和 2.0

Azkaban : 2.x   ==>   Azkaban Flow 1.0  (以后会删除)
Azkaban : 3.x   ==>   Azkaban Flow 2.0
Creating Flows
  1. 创建一个文件:flow20.project。(文件名就叫这个)在这个文件里添加一句:
    azkaban-flow-version: 2.0
    
  2. 创建一个文件:basic.flow(.flow 就是 .yml格式,用空格缩进)。添加:
    nodes:
     - name: jobA
     type: command
     config:
      command: echo "This is an echoed text."  
    
  3. 将这两个文件压缩到一起为Archive.zip
  4. 在web ui创建一个project,在项目中上传 这个Archive.zip,就能得到一个 Flow 2.0 Azkaban project,点开可以运行(手动)。
  5. 可以添加一组有依赖的job。
    nodes:
     - name: jobC
      type: noop
      # jobC depends on jobA and jobB
      dependsOn:
       - jobA
       - jobB
    
     - name: jobA
      type: command
      config:
       command: hdfs dfs -ls /input
    
     - name: jobB
      type: command
      config:
       command: pwd 
    
  6. Executor 手工运行
    :在当前Project右下点击Execute
  7. Schedule 定时运行
    :在当前Project右下进入Schedule,配置cron表达式后开启Schedule。
  8. 在Schedule页面,可以看到详情。还能继续配置SLA,让job完成/失败后Email通知。

如果某job运行中途失败,支持从中间任意job重新运行。
command就是要在linux运行的具体命令;注意cmmand中对文件目录使用,要用绝对路径。

基于Azkaban二次开发一些场景&思路

对Azkaban使用最大的问题就是需要手写 flow文件,如果有工具自动化生成、校验就更方便。
基于邮件的告警也不够,还可以自己开发短信、电话告警。
也不可以不用Azkaban自带Web UI, 它提供了ajax请求接口,可以自己开发web。

多节点模式

Getting started with the Multi Executor Server.
以下是简要整理,更多详细步骤参考官网。

  1. Install & Set up Mysql
    max_allowed_packet 需要设置更大些,flow文件最终都是存储在mysql的。
    [mysqld]
    ...
    max_allowed_packet=1024M
    
  2. 同样要编译Azkaban源码。并在azkaban.properties中设置mysql账号密码
    mysql.user=
    mysql.password=
    
  3. 启动 start-exec.sh (区别与start-solo.sh的)
    cd azkaban-exec-server/build/install/azkaban-exec-server
    ./bin/start-exec.sh
    
  4. mysql、executor、web 都搭建好以后,并不能直接使用,需要激活
    cd azkaban-exec-server/build/install/azkaban-exec-server
    curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
    

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/728179.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存