大数据之调度系统-Azkaban

数据仓库与Python大数据 5天前

以下文章来源于大数据与人工智能 ,作者HappyMint

01常用的调度框架及其对比

常用的调度平台框架有Oozie、Airflow、Zeus、DolphinScheduler、Azkaban 等。

几种调度系统简单对比:

  • Oozie 目前是托管在 Apache 基金会的,开源。通过 XML 文件来定义 DAG依赖,作业配置复杂。
  • Airflow 目前是托管在 Apache 基金会的,开源。python 语言开发,通过 python脚本配置作业,学习成本较高。
  • Zeus 阿里开源的基于 Hadoop 平台的开源工作流调度系统,文档缺少,目前不再维护。
  • Rundeck 单机部署,分布式指令,没有清晰的作业 DAG 图。
  • Azkaban 由 Linkedin 公司推出的一个批量工作流任务调度器,通过 KV 文件格式来建立任务之间的依赖关系 。

Azkaban 优势:

  • 提供功能清晰,简单易用的 Web UI 界面;
  • 作业配置简单,任务作业依赖关系清晰;
  • 提供可扩展的组件,原生支持 command、Java、Hive、Pig、Hadoop;
  • 基于 Java 语言开发,易于二次开发。

02Azkaban简介

在实际给大家演示如何使用Azkaban之前,先就Azkaban的一些基本概念进行简单介绍(下图是Azkaban登陆后的界面),这些概念在日常工作中会经常提及到,也是为给后续操作演示奠定基础。

2.1Project、Flow、Job

Project意为项目,登陆Azkaban,首先看到的就是项目页面。一个项目里允许上传一个zip包,zip应包含*.job运行作业所需的文件。

zip包上传成功以后,会看到一个个Flow,这些Flow下均包含一个或多个Job。

2.2Properties

Azkaban可以设置一系列的运行参数来控制job运行的行为方式和传递执行需要的参数,如执行时的代理用户、失败邮件的收件人列表、用户自定义参数、当前时间等。通常情况下,我们会通过properties文件和job文件来设置参数,那它们是如何生效的呢,我们用下图来做个说明。

上图展示的是一个test工程的目录结构,在test目录下有个project.properties文件,这个文件内设置的参数对所有同级及子目录中的job都有效,即对flow_a和flow_b的job都生效。我们可以看到flow_a和flow_b目录下也各有一个properties文件,这两个文件同样是对同级以及子目录下的job生效。所以,a.properties文件对a.job同样生效,那么问题来了,既然project.properties文件和a.properties文件都对a.job有效,如果出现了同名参数会怎样?

答案是Azkaban采取了就近原则,谁离job近就会用谁的参数,所以a.propertis文件中的参数会覆盖project.properties文件中的同名参数。

除了properties文件外,job文件内也可以定义参数或属性,在这里定义的参数或属性优先级最高。这里我们要说明下在properties文件和在job文件中定义参数或属性的不同之处。

对比点 properties文件 job文件
作用域 同级目录及子目录下的所有job 当前的单个job
优先级 就近原则,离job越近优先级越高 优先级最高
运行时修改方式 直接修改运行界面的Flow Parameter即可生效 修改Flow Parameter不会生效,需要编辑job属性才可以

2.3Scheduler

Scheduler是Azkaban的调度模块,负责作业的定时调度管理与运行,调度的最小单位是Flow。

这里要特别说明一下一个曾经遇到的坑。

如果先设置了Flow的定时调度,后又针对Flow中的某个Job设置了Scheduler,该Job的设置会覆盖之前Flow的设置,由于给单个Job设置调度时间的时候没有选中其余任务,于是会发生以后该调度流只有这一个Job调度执行,该Flow中的其余Job均不会定时运行。发生这个问题的原因就是因为调度的最小单元是Flow。

03常用的Azkaban操作

以创建几个有依赖关系的Job文件上传到Azkaban上进行调度设置并执行为例,逐步讲解常用的Azkaban操作。

在这之前,先给大家将整个流程简单讲解一下,然后再带领大家来看具体的实际操作步骤。

第1步:创建Job文件

通常情况下,每一个Job文件都是对应着一个具体的统计任务(下文示例每个Job是直接打印相应字符串),这些Job之间有可能存在依赖关系,即某个任务的统计需要依赖上一个任务的执行结果等。

第2步:打包上传

工作中,统计程序和Job建好后,就将整个工程打成zip包,登陆Azkaban,将zip包上传到对应的Project中。上传成功后,就可以看到一个个的Flow自上而下呈现在眼前。

第3步:运行

可以试运行一下你的统计任务,点击整个Flow的Execute Flow就会整个Flow开始执行,点开Flow,找到下方对应的某个任务,点击Run Job,该Job就会开始执行。

第4步:查看任务执行情况

在任务执行过程中,可以进入Executing页面,查看任务执行情况。

第5步:设置调度

任务试运行成功,结果经验证是正确的情况下,就可以为整个Flow设置调度时间了,设置完成后,Azkaban以后就会根据调度时间周期性的自动运行这些统计任务。

3.1创建Job

创建示例Job文件及文件内容如下:

start.job

type=noop

first.job

type=command
command="echo
first"dependencies=start

second.job

type=commandcommand="echo second"dependencies=start

three.job

type=commandcommand="echo third"dependencies=start

four.job

type=commandcommand="echo fourth"dependencies=start

end.job

type=noopdependencies=first,second,three,four

上面示例Job文件中总共包含三个参数,type、command和dependencies。type指定Job的类型,比如type=command,表示命令类型,type=noop是一个空操作,当然,还有其他赋值,读者可自行了解一下。command表示具体执行的指令。dependencies指定依赖的job。

由于该示例不是基于具体项目工程,也不涉及具体统计任务,只是为了示例如何使用Azkaban,所以是将这些Job文件放在一个文件夹内,直接打包生成zip压缩文件,然后上传到azkaban的Project中。

3.2上传zip包

登录Azkaban,进入一个事先建好的测试Project,将zip包如下图1、2、3步上传。

上传结果如下,在Azkaban页面上可以看到该Flow,点击Flow,将展开看到具体的一个个Job,可以看到它们之间存在着层级缩进,代表着自下而上的依赖关系:

3.3运行

运行可以整个Flow统一执行,点击标记1,也可以选择单独运行某个job,点击标记2:

点击标记1后,弹出界面如下,所有job均被选中:

点击标记2后,弹出界面如下,只有目标job选中:

如果想一次执行两个job,可以在点击单个Job进行执行时,弹出的界面点击另一个想执行的job,右键选择enable,甚至可以enable其父节点,子节点,依赖节点,所有节点等等,大家可实际操作一下,想执行三个、四个job同样操作即可。

上图界面中左侧的六个选项,功能一一给大家解释一下:

标记1就是当前所选中的目标执行任务的预览图,可以重新设置所需执行任务。

标记2是设置邮件通知,当任务执行失败或者成功时,将邮件发给所填邮箱。

标记3设置当Flow当中有一个任务执行失败时,其余任务怎么处理,可选择全部取消、只执行完已经开始的任务或者执行完所有不受影响的任务。

标记4当一个Flow正在执行中时,被再次点击执行操作时,新起的任务进程可选择设置为照样执行或跳过不执行或待原先的任务执行完再运行。

标记5输入任务执行所需的参数,如日期。

标记6点击运行。

3.4查看任务

任务开始执行以后,可以查看任务执行情况。

点击标记1处,弹出如图界面,标记2下面都是正在运行中的任务,可通过搜索找到你的目标任务,如果在正运行的任务中没找到,可点击标记3查看已完成的任务。

3.5设置调度

如果试运行的任务没有问题,那么就可以设置定时调度,让其依照调度时间运行了。

点击标记处,弹出调度设置界面,修改标记1处Hours中的值为4,Min为30,则表示以后每天的凌晨4:30点该Flow都将自动执行。

标记2处可以预览接下来的10个具体调度时间,点击调度设置界面右下角的Schedule,则调度设置成功。

3.6修改任务调度

如果要修改所设置Flow或Job的调度时间,依然如上步骤进入调度设置界面,直接重新填写调度时间,点击右下角的Schedule的即可。

3.7查看、删除任务调度

如果想查看下某个Flow或者Job的调度,可点击如下标记1,进入调度查看界面,Ctrl+F搜索目标Flow或Job。标记2处即可看到所设调度时间。

如果想删除该调度,点击右侧的Remove Schedule。

还有一种查看调度时间的方式,进入具体Project节目,找到目标Flow,点击Summary。

进入Summary页面,标记处可看到所设置的调度时间,同样可点击Remove Schedule,删除调度。

04日常工作中失败任务处理

上一章节主要针对如何创建一个完整的任务调度进行了讲解演示。接下来,讲解一下调度中的任务执行失败时如何处理。

4.1失败记录定位

上文有提到,可为Flow或Job设置失败邮件通知,这样可帮助我们定位所运行失败的任务,在History中输入任务名称搜索执行失败的记录。如果没有设置失败邮件,只能直接进入History进行查找了。

4.2失败信息查看

找到失败任务的执行记录后,点击图中的该失败任务的Execution Id进入任务具体执行记录界面,在Job List中找到Failed的任务,点击Details,进入Job Logs页面查看详情。

Job Logs里可以找到具体错误信息。如果任务类型是Yarn,那么Job Logs可找到报错任务的Application Id,如application_1562251516478_13934。然后,到Yarn平台输入该Application Id,查看报错详细信息。

总结

本文主要介绍了任务调度平台Azkaban的一些简单概念和实际如何创建和设置一个调度任务,以及如何针对报错任务进行问题排查。

调度系统是数仓必备组件,希望通过这篇文章,让大家对Azkaban有一个最基础的了解及深入。

大数据之调度系统-Azkaban相关推荐

  1. Apache DolphinScheduler 大数据工作流调度系统

    [本文正在参与 "拥抱开源 - Apache DolphinScheduler 有奖征稿活动],活动地址 Apache DolphinScheduler 大数据工作流调度系统 一.背景 二. ...

  2. 【2017年第1期】基于外卖物流配送大数据的调度系统

    蒋凡,徐明泉, 崔代锐 百度外卖研发中心 中图分类号:TP399    文献标识码:A doi:10.11959/j.issn.2096-0271.2017013 Scheduling system ...

  3. 大数据 通用 调度系统 的设计和实现

    目标: 调度的业务类型是针对ETL数据抽取任务.个性化推荐的离线任务.每天的报表.每周的统计报表.月级别的统计报表等,小时级的日志清洗任务等 能够按照用户的配置,准时进行调度. 调度的任务主要是一些脚 ...

  4. OPPO大数据离线任务调度系统OFLOW

    1 离线调度系统 在整个大数据体系中,在原始数据被采集之后,需要使用各种逻辑进行整合和计算之后才能输出实际有效的数据,才能最终用于商业目的,实现大数据的价值.在整个处理流程中,无论是抽取.转换.装载( ...

  5. 大数据、云计算系统高级架构师课程学习路线图

    大数据之Linux+大数据开发篇 大数据的前景和意义也就不言而喻了,未来,大数据能够对大量.动态.能持续的数据,通过运用新系统.新 工具.新模型的挖掘,从而获得具有洞察力和新价值的东西.源于互联网的发 ...

  6. ByteV智能电网大数据可视化分析系统

    ByteV智能电网大数据可视化分析系统是一个面向电力行业管理部门的综合辅助决策平台,旨在通过大数据技术和系统全方位时空动态感知能力,为电力行业管理决策者提供及时.准确的多维数据分析结果信息,直观展现数 ...

  7. 大数据、云计算系统顶级架构师课程学习路线图

    大数据之Linux+大数据开发篇 Java Linux基础 Shell编程 Hadoop2.x HDFS YARN MapReduce ETL数据清洗Hive Sqoop Flume/Oozie 大数 ...

  8. 专题导读:大数据异构并行系统

    点击上方蓝字关注我们 随着大数据处理从粗放走向集约,性能.成本.功耗等多方面的约束为大数据系统设计提供了新的机遇与挑战.各种异构并行处理体系结构与芯片架构不断创新并被广泛部署,在为大数据处理提供更强大 ...

  9. 【2017年第1期】专题导读:大数据与信用评价系统

    2015年我国发布的<促进大数据发展行动纲要>中要求,2018年底前建成国家政府数据统一开放平台.2020年底前,逐步实现信用.金融.交通.医疗等20项民生保障服务相关领域的政府数据集向社 ...

最新文章

  1. windows平台下杀死指定端口的进程(转载)
  2. [ARC062F]Painting Graphs with AtCoDeer
  3. 文件寄生——寄生虫自体繁衍的道路
  4. java中的io系统详解(转)
  5. armeabi-v7a/arm64-v8a/x86/x86_64均兼容armeabi
  6. arm放弃服务器芯片,ARM溃败:Applied Micro拆分ARM架构服务器芯片业务
  7. h3c trunk口改access_H3C交换机恢复出厂和各种基本配置
  8. cdr怎么转plt_win10系统下cdr格式文本转plt格式文本怎么做
  9. Asio tcp异步例子
  10. The requested URL returned error: 403
  11. HPUX 无法启动 卡在EVN_MC_INITIATED
  12. 盘点8个高效方法提高睾酮水平
  13. python解决数学问题
  14. 【Python画樱花源码】
  15. 安卓插件化学习 - 类的加载
  16. 牛客网刷题记录 || 结构体和类
  17. week 14 限时模拟(猫睡觉问题)
  18. 苹果以旧换新活动_同是以旧换新,苹果OPPO有哪些差异?懂手机的都知道它更良心...
  19. 神舟笔记本的拆机之旅
  20. windows11的便签在哪里,详细教您使用win11便签

热门文章

  1. XV6环境搭建及注意事项
  2. 依赖注入的两种常用的注入方式
  3. iphone游戏时不弹通知_收到通知时如何使iPhone的LED闪烁
  4. 何以包邮?(动态规划:0-1背包问题)
  5. 一组很有意思的图片——人生的意义
  6. MS愿景和京瓷经营理念
  7. Python解决mysql的1366问题
  8. 小程序开发的40个技术窍门,纯干货!
  9. 计算机发展史-计算机基础知识总结(下)
  10. 贪婪算法(贪心算法)