1.目前etl的fetch task策略是基于任务子孙任务数和任务优先级获得task list
2.然后遍历task list 查看任务是否具备执行条件

  • 集群资源校验(yarn/hdfs)<如果这里有性能瓶颈,可以抽出来做公共接口map,每10s更新一次>
  • 数据是否准备好(仅mysql task具备),解决主从延迟问题
  • 任务开始时间
  • 任务的父任务是否都执行成功

3.每10s fetch一次task,遍历一次基于<2>的逻辑

  • 我们把任务的父任务执行状态判断放到最后是想降低数据库查询成本(如果没放到最后,可以在exec_log表中维护一个依赖是否校验的状态去动态变更来减少数据库轮训查找成本)
  • 我们如何避免,如 a->b->c 依赖关系,a还没完成又去校验b,b又没通过,又去校验c这种情况呢(如果此树较大,我们又是基于子孙任务数排序的话,会出现这种无谓遍历数据库的情况)。如果我们没有维护全局树及树中各任务的状态的话(成本较高,要时刻保证内存中的树与mysql表的任务状态同步)。
  • 我们可以这么做(较少数据库的无谓遍历),在任务初始化时把任务依赖的dag加载的map中,并只维护任务与其一级子任务的关系如(<1,[2,3,4]> 父任务id:1,子任务id:2,3,4),然后在任务a校验没通过时,把a的一级子任务加入到list(此处不能放入set中,以为不能使用去重的集合,一个子任务可能会有多个父任务)中,依次遍历按照如此逻辑,在这一轮遍历结束后清空list。(或者维护全局list,在此任务校验通过后,从set清除此任务的一级子任务)---此种策略适用于只基于子孙任务数的排序方式,如果还有基于权重的排序并且权重只更新了子任务而没有更新此子任务的上游所有父任务就会出现严重问题
  • 索性不如在每次fetch时就拿出子与父的map关系及当时的任务状态,作为任务提交时的判断,这样每fetch一次只与数据库交互一次

ETL DAG调度策略的更多相关文章

  1. 数据仓库 - 2.数据仓库设计思路及ETL设计思路

    一.数据仓库构建思想 构造数据仓库有两种方式:一是自上而下,一是自下而上. Bill Inmon先生推崇“自上而下”的方式,即一个企业建立唯一的数据中心,就像一个数据的仓库,其中数据是经过整合.经过清 ...

  2. 调度系统Airflow的第一个DAG

    Airflow的第一个DAG 考虑了很久,要不要记录airflow相关的东西, 应该怎么记录. 官方文档已经有比较详细的介绍了,还有各种博客,我需要有一份自己的笔记吗? 答案就从本文开始了. 本文将从 ...

  3. Supercharging your ETL with Airflow and Singer

    转自:https://www.stitchdata.com/blog/supercharging-etl-with-airflow-and-singer/ singer 团队关于singer 与air ...

  4. ETL数仓测试

    前言 datalake架构 离线数据 ODS -> DW -> DM https://www.jianshu.com/p/72e395d8cb33 https://www.cnblogs. ...

  5. ETL需求要求

    前言 ETL落地dw层,dw层各表一般是由多个表关联取数得到的大宽表,在ETL需求中的dw设计应该考虑以下内容,目的是确保需求更清晰,开发和测试才能更高效的进行. 业务需求为基础 基于业务需求做足够多 ...

  6. 深入浅出聊Taier—大数据分布式可视化DAG任务调度系统

    导读: 上周,袋鼠云数栈全新技术开源规划--DTMO(DTstack Meetup Online)的第一场直播圆满完成.袋鼠云数栈大数据开发专家.Taier项目主导人偷天为大家带来了<Taier ...

  7. hadoop作业调度策略

    一个Mapreduce作业是通过JobClient向master的JobTasker提交的(JobTasker一直在等待JobClient通过RPC协议提交作业),JobTasker接到JobClie ...

  8. R语言作为BI中ETL的工具

    R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...

  9. 用遗传算法GA改进CloudSim自带的资源调度策略

    首先理解云计算里,资源调度的含义: 看了很多云计算资源调度和任务调度方面的论文,发现很多情况下这两者的意义是相同的,不知道这两者是同一件事的不同表述还是我没分清吧,任务调度或者资源调度大概就是讲这样一 ...

随机推荐

  1. JDOJ 1790: 高精度A-B

    JDOJ 1790: 高精度A-B JDOJ传送门 洛谷 P2142 高精度减法 洛谷传送门 题目描述 高精度减法 输入格式 两个整数a,b(第二个可能比第一个大) 输出格式 结果(是负数要输出负号) ...

  2. python的可变类型和不可变类型

    Python有六种数据类型:数字类型.字符串类型.列表类型.元组类型.字典类型和集合类型 其中不可变类型包括三种:数字类型.字符串类型和元组类型 剩余三种为可变类型:列表类型.字典类型和集合类型 可变 ...

  3. ASP.NET Core Windows 环境配置

    ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 ASP.NET Core 中的一些新的概念和它们是如何帮助我们开发现代化的 Web 应用程序 尽管 ASP. ...

  4. [LeetCode] 252. Meeting Rooms 会议室

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...

  5. 从GopherChina 2019看当前的go语言

    GopherChina 2019大会4月底刚刚结束,大会上使用的PPT也放了出来(大会情况及PPT在https://mp.weixin.qq.com/s/_oVpIcBMVIKVzQn6YrkAJw) ...

  6. Ansible17:Playbook之tags

    目录 简介 为task打tag 使用tag 执行指定tag的task 排除指定tag的task 查看playbook中的所有tag 打tag的几种方式 ansible内置tag 简介 在大型项目当中, ...

  7. 【C++】如何使用GCC生成动态库和静态库

    一.静态库和动态库的定义及区别 程序编译的四个过程: 1.预处理  展开头文件/宏替换/去掉注释/条件编译(.i后缀) 2.编译    检查语法,生成汇编(.s后缀) 3.汇编    汇编代码转换成机 ...

  8. sql server锁表、查询被锁表、解锁被锁表的相关语句

    MSSQL(SQL Server)在我的印象中很容易锁表,大致原因就是你在一个窗口中执行的DML语句没有提交,然后又打开了一个窗口对相同的表进行CRUD操作,这样就会导致锁表.锁表是一种保持数据一致性 ...

  9. Java自学-类和对象 访问修饰符

    Java的四种访问修饰符 成员变量有四种修饰符 private 私有的 package/friendly/default 不写 protected 受保护的 public 公共的 比如public 表 ...

  10. mysqlbinlog恢复误删数据

    概述 代码bug,在处理上传出现异常时执行了DELETE FROM t_resource WHERE resource_id = ? OR parent_id = ?因为OR条件导致用户的上传的所有数 ...