栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

大数据平台架构与原型实现-读书笔记10(完结)

大数据平台架构与原型实现-读书笔记10(完结)

第10章 作业调度 一、技术堆栈与选型

       大数据平台上会存在大量形式多样的作业,这些作业会以Hive脚本、Shell脚本、Java程序等多种不同的形式存在,只有通过作业调度将它们串联在一起才能形成一个完整的数据流(Data Pipeline),从而驱动整个大数据平台运转。

1、Oozie

       Oozie是老牌的大数据作业调度工具,也是Hadoop生态圈早期唯一的工作流引擎,Oozie是完全面向Hadoop生态环境设计的,内置了很多面向Hadoop的组件,开发者可直接在Oozie里配置HDFS、Map-Reduce、Pig和Spark作业,也支持Java和SSH等通用型作业。Oozie对于大数据平台非常友好,基于输入和输出事件的作业触发机制会大大降低管理作业依赖的难度,但它的XML配置较为繁琐。

2、Azkaban

       Azkaban是linkedIn开源的一款任务调度工具,最新的版本改用更简洁和高效的YAML文件配置。Azkaban相较于Oozie更轻量,但同样能调度HDFS、Map-Reduce、Pig作业。Azkaban的作业调度室基于时间的,不支持输入和输出事件,但可通过配置作业间的依赖关系解决。此外,Azkaban有比较好的权限控制体系,可控制用户对作业的读、写、执行等权限。

3、Airflow

       Airflow有比较好的扩展机制,大数据平台上的各种主流作业类型都可找到相应的支持插件。Airflow基于有向无环图(DAG)设计工作流,通过DAG可有效地设置任务依赖关系。Airflow使用Python描述作业,相比于Oozie的XML和Azkaban的YAML要有更强的描述性,但门槛也相对较高。

二、工作流的组织策略

       综合使用按业务(数据主题)和按数据源两种切分方式,在上层按数据主题组织,在下层按数据源组织。在宏观构建顺序上先执行数据源层的作业,再执行数据主题层的作业。

三、工程结构
  • src/main/assembly:用于存放maven-assembly-plugin打包的配置文件,bdp-workflow项目构建的产出物是一个zip包,在服务器上解压后,通过执行相应的shell脚本即可提交作业
  • src/main/profiles:配合Maven的profile机制,用于存放不同环境下的差异变量。该文件夹下往往包含dev.properties、stg.properties和prd.propertier等面向不同环境提供的profile properties文件。
  • src/main/resources/bin:主要用于存放项目的shell脚本,该项目拥有一个名为bdp-workflow.sh的入口文件,所有命令都集成在这个shell文件中,通过这个文件驱动工程的执行。
  • src/main/resources/lib:用于存放各个模块的工作流配置文件,及XML文件。面向数据源的工作流会带ds前缀,厚街数据源名称,eg ds-bdp-master-daily-build;面向数据主题的工作流会带sj前缀,后接数据主题名称,eg sj-master-data-daily-build。
四、实现工作流

       Oozie针对作业调度抽象出了三个重要的概念:workflow、coordinate和bundle。workflow是对一个总过刘的具体描述,一个工作流由多个action组成,action之间可以串行也可并行,工作流包含分支及嵌套子工作流。workflow只定义了“做什么”,并没有描述“什么时间做”,几乎所有的作业都需要周期性地执行,所以还需要一套作业排期机制,这个工作在Oozie中是由coordinate负责,coordinate区别于一般的scheduling工具的地方在于,除一般时间触发条件外,它还支持基于“事件”触发条件,通过事件可以有效地协调和管理作业间的依赖。当“做什么”和“什么时间做”都描述清楚后,理论上,作业调度的开发工作基本完成,但有时我们还需在coordinate的基础上载组装一下,形成一个完整的数据流(Data Pipeline),这一动作通过bundle完成。一个bundle通常包括多个coordinate,这些coordinate在业务流程上会有上下游的依赖关系。bundle所代表的Data Pipeline和workflow的区别在于,一般Data Pipeline会跨越多个系统,从数据源采集开始,到数仓,最后到达数据展示的终端,而workflow的范围要小一些,通常描述一个系统内的数据流转。

六、部署与提交工作流

       完成了workflow和coordinate的实现工作之后,就可以部署并提交工作流了。Oozie要求工作流所有的文件都要部署在HDFS上。

七、作业依赖管理

       针对作业依赖,不同的工作流会使用不同的机制进行应对,总体上分两类:

  • 基于作业依赖:一个作业B要求某些条件必须满足才能执行,而这些条件恰好是作业A的范畴,也就是当A执行成功之后,B所需要的条件就满足了,此时可以说作业B依赖于作业A。
  • 基于事件(数据)的依赖:每一个作业可以在配置上声明执行它所需要的一些事件,只有这些事件发生后才会触发当前作业的执行,这些事件都是其他作业在执行期间或执行结束后产生的,只有当那些作业执行成功后,这些事件才会产生,当前作业才会进入执行状态,所以这也是一种间接处理作业依赖的方式,Oozie使用的正式这种方式。

       相比较而言,基于时间的依赖要比基于作业的依赖有优势,因为作业间的依赖往往是多重的网状关系,很难梳理,人为地解析这些依赖非常麻烦,而基于事件的依赖则要好很多,每个作业纸需要专注于声明自己依赖的事件,同时在完成相关动作后也主动生成相应的事件,工作流引擎会收集事件并判断哪些作业可进入执行状态,哪些还需要等待,而不用人工梳理作业之间的依赖关系并显示地配置在工作流中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/601386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号