工作流调研 oozie vs azkaban

公司内现在已经有团队在使用Airflow,运维UI界面以及对开发的友好性上貌似都要好于Oozie,本文只针对14年的调研对比结果,有空会对比一下两个系统

流程

  • Java主流程代码,Shell/Python代码对主流程调用,完成控制逻辑
  • QA需要分别针对Java主流程代码测试,并添加Python代码的测试
  • 增加流程需要修改Python控制逻辑,并做整体逻辑回归
  • Shell/Python代码的灵活性较高,实现风格迥异,在业务变化比较频繁的情况下,单元测试变化也较大

目标

  • 能够增加业务调度的稳定性和健壮性和灵活性
  • 将重心放在业务代码的实现上,通过模块化、插件化的方案将业务接入到调度系统中
  • 支持流程、业务模块的复用,减少业务平台的开发
  • 方便PE的运维,方便日志的查看,方便版本的更新、回滚
  • 方便日常运维的操作,支持对流程的启停
  • 良好的文档,以及社区有很好的活跃度,长期项目

开源系统

Oozie VS Azkaban

架构

  • Azkaban
    • 主要由三个组件构成:AzkabanWebServer(Jetty)、AzkabanExecutorServer、DataBase(H2/Mysql)
    • WebServer是整个Azkaban工作流系统的主要管理者,负责project管理、用户登录认证、定时执行工作流、跟踪工作流执行进度等
    • ExecutorServer主要负责任务的执行
      Azkaban组件
  • Oozie
    • 主要部分是Oozie Client、Oozie Server(Tomcat)、DataBase(Debry/Mysql)
    • Oozie Client完成对workflow进行提交、查询、执行
    • 实现
      • Ooozie向Oozie Server提交一个Workflow(job.property),Server端收到后会根据workflow xml,提交一个map only的MR Job
      • Job在map task中通过Hadoop JobClient将action对应的jar/job.xml提交到JobTracker
      • action job未完成前,map only job一直等待
      • Oozie server通过callback url通知等待action job的完成
      • action job执行成功后会将action对应的状态信息保存到DB中

主要概念

  • Azkaban
    • Job:最小的执行单元,作为DAG的一个结点
    • Flow:由多个Job组成,并通过dependent配置Job的依赖属性
  • Oozie
    • Control Node:工作流的开始、结束以及决定Workflow的执行路径的节点(start、end、kill、decision、fork/join)
    • Action Node:工作流执行的计算任务,支持的类型包括(HDFS、MapReduce、Java、Shell、SSH、Pig、Hive、E-Mail、Sub-Workflow、Sqoop、Distcp)
    • Workflow:由Control Node以及一系列Action Node组成的工作流
    • Coordinator:根据指定Cron信息触发的workflow
    • Bundle:按照组的方式批量管理Coordinator任务,实现集中的启停

安装部署

  • Azkaban
    • 部署方便:下载解压,配置连接已有Mysql,并启动WebServer和ExecutorServer
    • 支持solo-server的模式以及multi-server的模式
    • multi-server模式下需要配置mysql、JobType plugin
    • 配置用户权限
  • Oozie
    • 部署相对复杂,需要配置hadoop的core-site.xml文件增加代理用户的配置,并重启hadoop集群
    • 默认使用derby数据库,推荐使用Mysql数据库
    • 安装环境依赖maven、tomcat、hadoop,同时需要独立安装extJS包
    • 安装之后需要更新sharelib并初始化数据库,容易出现问题

工作流定义

  • Azkaban
    • Job和Flow的定义直接通过key-value的属性文件配置
    • Azkaban内建支持的两种JobType只有Shell和Java,其它的JobType需要以插件的形式接入Azkaban
    • 依赖关系直接通过dependent属性配置
  • Oozie
    • 基于hPDL语言描述的配置文件(XML)
    • 通过control flow node以及一系列action node确定一个workflow
    • Coordinator有两种触发条件:时间触发、数据触发
    • 支持参数化的定义Workflow的配置以及Java EL函数,多种配置传入的方式
      • configure-default.xml
      • global域
      • configuration域
      • job.property

工作流发布

  • Azkaban
    • 将用户定义的job的property配置文件以及依赖的lib都打包在同一个zip中
    • 通过WebUI或者通过ajax接口将zip包提交到WebServer
    • 定时任务的发布需要在WebUI上直接设置
  • Oozie
    • 将workflow、coordinator、bundle的配置以及依赖的lib都放在统一的目录中,并上传到hdfs上
    • 通过job.property配置指定任务的hdfs根路径
    • 通过命令行的方式,将workflow提交

WebUI

  • Azkaban
    • Azkaban所有任务的提交、监控、执行、编辑都可以通过前端完成
  • Oozie
    • 只支持Workflow当前以及历史状态的查询
    • action的log需要通过oozie提交的hadoop job的日志查看
    • cloudera HUE提供了更加nice的UI,支持oozie任务查看、编辑、操作的功能

运维

  • Azkaban
    • 通过Web端可以完成任务的提交、编辑、执行、查看
    • 能够通过Web端完成任务的重启以及暂停
  • Oozie
    • Oozie原生Web页面能够看到工作流的图形化定义、log日志、workflow状态以及action的执行状态
    • 通过HUE可以更加方便的在Web页面上完成workflow的启动、停止、恢复

日志、监控

  • Azkaban
    • 支持stdout日志的直接输出,支持配置SLA以及邮件报警
  • Oozie
    • stdout日志只能通过点击oozie启动的mr-job中查看,ssh action没法查看stdout日志
    • 支持SLA Alters
    • 基础的E-Mail通知,后续可以自定义实现报警的Action
    • 支持JMS API,可以对接JMS provider,由下游自己获取状态并做报警,默认可以配置ActiveMQ

扩展

  • Azkaban
    • 非常好的模块化和插件化的结构,支持自定义JobType或者插件,本身支持的类型并不多
  • Oozie
    • 可以扩展自定义类型的Action
    • 支持自定义EL函数

Oozie方案

使用场景

  • 需要按顺序并能够并行处理的工作流(DAG)
  • 对运行结果或异常需要报警、重启
  • 需要Cron的任务
  • 适用于批量处理的任务,不适合实时的情况

优点

  • Oozie与Hadoop生态系统紧密结合,提供做种场景的抽象
  • Oozie有更强大的社区支持,文档
  • Job提交到hadoop集群,server本身并不启动任何job
  • 通过control node/action node能够覆盖大多数的应用场景
  • Coordinator支持时间、数据触发的启动模式
  • 支持参数化和EL语言定义workflow,方便复用
  • 结合HUE,能够方便的对workflow查看以及运维
  • 结合HUE,能够完成workflow在前端页面的编辑、提交
  • 支持action之间内存数据的交互(默认2K)
  • 支持workflow的rerun(从某一个节点重启)

缺点

  • 学习门槛比较高,需要丰富的Action配置方法,需要写大量的XML配置
  • 不支持动态的fork,不支持loop
  • 应用中有动态参数不好支持
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 自定义实现wordcount的workflow 在yarn上测试wordcount程序 生产一个应用目录,并把wo...
    心_的方向阅读 7,873评论 2 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 为什么需要任务调度框架 在进行数据处理的时候,需要进行数据采集、数据清洗、数据分析等操作,每一个过程都可能涉及到多...
    心_的方向阅读 6,200评论 1 6
  • 自从公司楼下开了电影院,看电影真的是越来越方便了。🤗整体来说,电影真的不错的。剧情嘛,永远是软肋。但这种动作片,你...
    LoVe_La_Vie阅读 527评论 0 0
  • 从初中开始就有人说我长得像猫,可能是胖嘟嘟的原因吧。上了大学也不记得猫咪这个外号是从哪里出来的,开始还会很排斥,毕...
    6d4a812edf45阅读 475评论 2 1