【大数据开发套件调度配置实践】——不同周期任务依赖配置

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 大数据开发过程中常遇到不同运行周期的任务进行依赖,常见**天任务依赖小时任务**、**小时任务依赖分钟任务**。那么如何通过大数据开发套件开发这两种场景呢? 本文将从这两个场景出发,结合调度依赖/参数/调度执行等,介绍不同周期调度依赖的最佳操作实践。

大数据开发过程中常遇到不同运行周期的任务进行依赖,常见 天任务依赖小时任务小时任务依赖分钟任务 。那么如何通过大数据开发套件开发这两种场景呢?

本文将从这两个场景出发,结合调度依赖/参数/调度执行等,介绍不同周期调度依赖的最佳操作实践。

再此之前,我们先明确几个概念:

  • 业务日期:业务数据产生的日期,这里指完整一天的业务数据。在大数据开发套件里任务每天能处理的最近的完整一天业务数据是昨天的数据,所以业务日期=日常调度日期-1天。
  • 依赖关系:依赖关系是描述两个或多个节点/工作流之间的语义连接关系,其中上游节点/工作流的运行状态可以影响下游节点/工作流的运行状态,反之则不成立。
  • 调度实例:大数据开发套件的调度系统对周期任务进行调度执行时,会先根据任务的配置进行实例化,每个实例带上具体的定时时间、状态、上下游依赖等属性。

注意:目前数加大数据开发套件每天自动调度的实例都是在昨天晚上23:30生成。

  • 调度规则:调度任务是否能运行起来要满足的条件:

    1. 上游任务实例是否都运行成功。若所有上游任务实例都运行成功则触发任务进入等待时间状态。
    2. 任务实例定时时间是否已经到。任务实例进入等待时间状态后会check本身定时时间是否到,如果时间到了则进入等待资源状态;
    3. 当前调度资源是否充足。任务实例进入等待资源状态后,check当前本项目调度资源是否充足,若充足则可以运行起来。

天任务依赖小时任务

业务场景

系统需求统计截止到每小时的业务数据增量,然后在最后一个小时的数据汇总完成后需要一个任务进行一整天的汇总 。

需求分析

1)每个小时的增量,即每整点起任务统计上个小时时间段的数据量 。需要配置一个每天每整点调度一次的任务,每天最后一个小时的数据是在第二天第一个实例进行统计 。

2)最后的汇总任务为每天执行一次,且必须是在每天最后一个小时的数据统计完成之后才能执行,那么需要配置一个天任务,依赖小时任务的第一个实例 。

分析得出的调度形态如下图:

天依赖小时-1

但是,真正如上图调度任务定义那样配置调度依赖后,调度任务实例并没有得到上图的效果,而是如下图:

天依赖小时-2

上图中,天任务必须等小时任务当天其他所有实例也执行完成才能执行,而需求是天任务只需依赖小时任务第一个实例,此效果明显不能满足需求 。

要达到该场景需求,此时就需要结合任务“跨周期依赖”进行配置,可以将小时任务“跨周期依赖”属性配置成“自依赖”,然后天任务配置定时时间为零点整,且依赖属性配置依赖小时任务 。

分析得出的最终方案调度形态如下图:

天依赖小时-3

此时,小时任务的实例为串行执行,第一个实例能执行成功,可保证它前面(昨天)的实例都已经执行成功,因此天任务可以只需要依赖第一个实例 。

配置实践

小时任务的调度配置如下图:

天依赖小时-4

天任务的调度配置如下图:

天依赖小时-5

参数配置:小时任务每整点实例处理前一小时的数据,如可以用$[yyyy-mm-dd-hh24-1/24],天任务 若时间格式为yyyymmdd,用${bdp.system.bizdate};若时间格式为yyyy-mm-dd,用自定义参数$[yyyy-mm-dd-1],具体视详细设计而定 。参数配置如下图所示:

天依赖小时-6

测试/补数据/自动调度

测试和补数据:都是手动生成的调度实例,选择的是业务日期 。
如选择业务日期为 2017-01-10:

  • 天任务实例的定时时间是 2017-01-11 00:00:00;
  • 小时实例的定时时间是 2017-01-11 00:00:00 至 2017-01-11 23:00:00;
  • ${bdp.system.bizdate} 赋值结果为 20170110(实例定时间年月日减1天);
  • $[yyyy-mm-dd-hh24-1/24] 赋值结果为 2017-01-10-23 至 2017-01-11-22(实例定时间年月日时减1小时)。

自动调度:调度系统自动生成的实例,每天的实例定时时间都是当天,如“需求分析”中的最终方案效果图 。

小时任务依赖分钟任务

业务场景

已经有任务每 30 分钟进行一次同步,将前 30 分钟的系统数据增量导入到 MaxCompute,任务定时为每天的每个整点和整点 30 分运行 。现在需要配置一个小时任务,每 6 个小时进行一次统计,即每天分别统计 0 点到 6 点之间、6 点到 12 点之间、12 点到 18 点之间、18 点到明天 0 点整之间的数据 。

需求分析

1) 分钟任务:

  • 00:00 实例同步的是昨天最后 30 分钟的数据,产出的表分区如“昨天日期年-月-日-23:30”;
  • 00:30 实例同步的是今天 00:00-00:30 之间的数据,产出的分区如“今天日期年-月-日-00:00”;
  • 01:00 实例同步到是今天 00:30-01:00 之间的数据,产出的分区如“今天日期年-月-日-00:30”;
  • 以此类推, 23:30 实例同步的是今天 23:00-23:30 之间的数据,产出的分区如:“今天日期年-月-日-23:00”

2)小时任务:

  • 每 6 个小时进行一次统计,则一天调度 4 次;
  • 统计 0 点到 6 点之间的数据,则依赖分钟任务当天的 00:30—6:00 共 12 个实例;
  • 统计 6 点到 12 点之间的数据,则依赖分钟任务当天的 6:30—12:00 共 12 个实例;
  • 统计 12 点到 18 点之间的数据,则依赖分钟任务当天的 12:30—18:00 共 12 个实例;
  • 统计 18 点到第二天 0 点之间的数据,则依赖分钟任务当天的 18:30—23:30 以及第二天 00:00 共 12 个实例 。

分析得出的调度形态如下图:

小时依赖分钟-1

但是,真正如上图调度任务定义那样配置调度依赖后,调度任务实例并没有得到上图的效果,而是如下图:

小时依赖分钟-2

如上图,10 日 18 点到 11 日 0 点之间的数据,11 日小时任务 0 点整点实例只依赖了分钟任务 11 日 0 点整实例,不能确保分钟任务 10 日 18:30 至 23:30 的实例是否执行成功 。

要达到该场景需求,此时就需要结合任务“跨周期依赖”进行配置,可以将分钟任务“跨周期依赖”属性配置成“自依赖”,然后小时任务依赖属性配置依赖小时任务 。

分析得出的最终方案调度形态如下图:

小时依赖分钟-3

此时,分钟任务的实例为串行,每个实例能执行成功,可保证它前面(或昨天)的实例都已经执行成功,因此小时任务每个实例可以只需要依赖分钟任务定时时间离它最近(小于等于)的一个实例 。

配置实践

分钟任务的调度配置如下图:

小时依赖分钟-4

小时任务调度配置如下图:

小时依赖分钟-5

参数配置:分钟任务每个实例处理前面30分钟数据产出的分区可以用参数如 $[yyyy-mm-dd-hh24:mi-30/24/60] , 具体视详细设计而定 。配置类似下图:

小时依赖分钟-6

测试/补数据/自动调度

测试和补数据:都是手动生成的调度实例,选择的是业务日期。如选择业务日期为 2017-01-10:

  • 分钟任务实例的定时时间是 2017-01-11 00:00:00 至 2017-01-11 23:30:00,共 48 个实例;
  • 小时实例的定时时间是 2017-01-11 00:00:00、06:00:00、12:00:00、18:00:00 共 4 个实例;
  • $[yyyy-mm-dd-hh24:mi-30/24/60] 赋值结果为 2017-01-10-23:30 至 2017-01-11-23:00(实例定时间年月日时分减 30 分钟)。

自动调度:调度系统自动生成的实例,每天都实例定时时间都是当天,如“需求分析”中的最终方案效果图 。

总结

  • 长周期任务依赖短周期任务时,如果短周期有自依赖:当天的调度实例中,长周期任务的每个实例只依赖短周期实例中定时时间与它最近(且小于)的一个实例 。
  • 长周期任务(小时)依赖短周期任务(分钟)时,如果短周期无自依赖:当天的调度实例中,长周期任务的每个实例会依赖定时时间小于等于且没被本任务其他实例依赖的短周期实例;天/周/月依赖小时/分钟任务例外,因为天任务实例会依赖所有小时/分钟任务 。
  • 调度周期和调度时间参数配合使用,最终调度参数替换的值取决于每次调度的实例定时时间,而调度上看到的 业务日期=实例定时时间年月日减1天
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
2月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(一)
72 0
|
2月前
|
分布式计算 资源调度 大数据
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
大数据-110 Flink 安装部署 下载解压配置 Standalone模式启动 打包依赖(二)
78 0
|
4月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何开发ODPS Spark任务
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
2月前
|
存储 缓存 分布式计算
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
47 4
|
3月前
|
SQL 分布式计算 大数据
代码编码原则和规范大数据开发
此文档详细规定了SQL代码的编写规范,包括代码的清晰度,执行效率,以及注释的必要性。它强调所有SQL关键字需统一使用大写或小写,并禁止使用select *操作。此外,还规定了代码头部的信息模板,字段排列方式,INSERT, SELECT子句的格式,运算符的使用,CASE语句编写规则,查询嵌套规范,表别名定义,以及SQL注释的添加方法。这些规则有助于提升代码的可读性和可维护性。
67 0
|
3月前
|
SQL 分布式计算 大数据
大数据开发SQL代码编码原则和规范
这段SQL编码原则强调代码的功能完整性、清晰度、执行效率及可读性,通过统一关键词大小写、缩进量以及禁止使用模糊操作如select *等手段提升代码质量。此外,SQL编码规范还详细规定了代码头部信息、字段与子句排列、运算符前后间隔、CASE语句编写、查询嵌套、表别名定义以及SQL注释的具体要求,确保代码的一致性和维护性。
111 0
|
4月前
|
数据可视化
Echarts数据可视化开发| 智慧数据平台
Echarts数据可视化开发| 智慧数据平台
|
4月前
|
数据可视化
Echarts数据可视化大屏开发| 大数据分析平台
Echarts数据可视化大屏开发| 大数据分析平台
|
1月前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
296 7
|
1月前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
46 2

相关产品

  • 云原生大数据计算服务 MaxCompute