因为大数据生态的复杂性,对于大数据开发人员来说,要深入其原理并形成体系发挥作用需要花费很多时间,而他们更多的是要聚焦在业务层面进行数据处理。而对于企业来说,要构建一个成熟稳定、功能多样的大数据平台需要花费很多的时间与人力成本。
今天我们就来说说,数据工程师在使用数栈平台时,DAGScheduleX 调度引擎是如何承载数栈开发套件,帮助工程师更加快速地实现开发任务的。
什么是DAGScheduleX
调度引擎:对Task(任务)生成Job(实例)并对Job进行统一调度管理,并提供Job实例基于多个集群不同版本(Hadoop2、Hadoop3、CDH、HDP)多种不同计算引擎的任务调度。
袋鼠云数栈平台有七大开发套件:离线开发、实时开发、算法开发、标签引擎、数据共享服务、数据质量、数据资产,大数据开发人员可以在套件中直接进行业务逻辑的开发,而不用关心底层的大数据平台的架构与实现,将工作的重心更多地聚焦在业务之中。套件中所开发的Task(任务)会对应生成一个可执行的Job(实例),而所有Job(实例)的执行都依赖于DAGScheduleX(调度引擎的简称)。
DAGScheduleX的部署策略
DAGScheduleX在部署策略上有多种选择方案,以满足项目实施时的环境要求:
可以区分为Master/Worker角色,Master代表调度、Worker代表执行引擎。Worker部署在计算节点会更加轻量。
也可以进行单进程整合部署,部署模式更加简单。
以上两种部署方式都支持多节点部署。
DAGScheduleX 之调度(Master)
1) 解析DAG有向无环图
大数据开发人员基于开发套件开发的Task(任务)可以是一个独立的Task(任务),也可以是一个复杂的工作流Task(任务)。可以对Task(任务)进行调度依赖的配置,将任务与任务之间生成一个DAG有向无环图。最后根据调度周期,会将任务的DAG有向无环图进行解析生成对应的Job实例。
2) 调度的主要职责
调度(Master)实现了对Job(实例)的统一管理,会根据Job的优先级进行高并发调度,并对Job的运行情况进行监控。调度(Master)支持高可用(HA)部署,对异常宕机后Job(实例)运行情况的数据进行恢复,并保证多节点部署时的数据一致性。最后,调度(Master)提供了丰富的Rest Api接口,满足数栈体系的七大套件的功能要求:
解析Task的DAG生成Job
调度Job(依赖关系、优先级、运行状况)
故障容灾恢复
Worker 健康检查
提供丰富的Rest Api支持
DAGScheduleX 之执行引擎(Worker)
1) 自定义Classloader 结合 SPI 实现计算组件插件化管理
DAGScheduleX目前支持多种计算组件,如Flink、Spark、tersorflow、python、shell 、Hadoop MR、Kylin、Odps、RDBS(多种关系型数据库)等等。不同的计算组件之间通过自定义的Classloader进行隔离加载,并根据 Java SPI 确定具体的计算组件类型,以此解决不同计算组件之间的程序冲突问题:
自定义 Classloader 以 Child-First 方式加载插件
在classpath下的 META-INF/services/ 目录下以 SPI 方式描述插件对应的计算组件
2) Console 统一管理多个集群的不同版本
Job(实例)在执行引擎处理前,会通过 Console 获取到一段 pluginInfo 信息。在 pluginInfo 中会对某一具体的集群信息进行描述,如果存在2个集群环境:Cluster A,Cluster B,Job(实例)需要提交到Cluster A中执行时,pluginInfo 中就对应了 Cluster A 集群的相关配置信息,并以此配置信息初始化(Cluster A)相关组件对集群进行操作。
3) 提供远程调用服务
Worker可下发到计算节点进行部署,并提供远程调用服务支持Master 与 Worker 之间的通信。通信服务包括并不局限于以下方式:
获取插件中的默认配置信息
Job(实例)的submit(提交)接口
Job(实例)的cancel(取消)接口
Job(实例)的status(运行状态)接口
Job(实例)的log(运行日志)接口
DAGScheduleX是基于任务DAG构建实例、实例调度、实例多引擎提交为一体的分布式任务调度引擎。数栈的离线计算、流计算、算法开发等所有的套件都依赖于调度引擎来执行任务,是很重要的枢纽。
网友评论