ETL DAG调度策略
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调度策略的更多相关文章
- 数据仓库 - 2.数据仓库设计思路及ETL设计思路
一.数据仓库构建思想 构造数据仓库有两种方式:一是自上而下,一是自下而上. Bill Inmon先生推崇“自上而下”的方式,即一个企业建立唯一的数据中心,就像一个数据的仓库,其中数据是经过整合.经过清 ...
- 调度系统Airflow的第一个DAG
Airflow的第一个DAG 考虑了很久,要不要记录airflow相关的东西, 应该怎么记录. 官方文档已经有比较详细的介绍了,还有各种博客,我需要有一份自己的笔记吗? 答案就从本文开始了. 本文将从 ...
- Supercharging your ETL with Airflow and Singer
转自:https://www.stitchdata.com/blog/supercharging-etl-with-airflow-and-singer/ singer 团队关于singer 与air ...
- ETL数仓测试
前言 datalake架构 离线数据 ODS -> DW -> DM https://www.jianshu.com/p/72e395d8cb33 https://www.cnblogs. ...
- ETL需求要求
前言 ETL落地dw层,dw层各表一般是由多个表关联取数得到的大宽表,在ETL需求中的dw设计应该考虑以下内容,目的是确保需求更清晰,开发和测试才能更高效的进行. 业务需求为基础 基于业务需求做足够多 ...
- 深入浅出聊Taier—大数据分布式可视化DAG任务调度系统
导读: 上周,袋鼠云数栈全新技术开源规划--DTMO(DTstack Meetup Online)的第一场直播圆满完成.袋鼠云数栈大数据开发专家.Taier项目主导人偷天为大家带来了<Taier ...
- hadoop作业调度策略
一个Mapreduce作业是通过JobClient向master的JobTasker提交的(JobTasker一直在等待JobClient通过RPC协议提交作业),JobTasker接到JobClie ...
- R语言作为BI中ETL的工具
R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...
- 用遗传算法GA改进CloudSim自带的资源调度策略
首先理解云计算里,资源调度的含义: 看了很多云计算资源调度和任务调度方面的论文,发现很多情况下这两者的意义是相同的,不知道这两者是同一件事的不同表述还是我没分清吧,任务调度或者资源调度大概就是讲这样一 ...
随机推荐
- 基于Distiller的模型压缩工具简介
Reference: https://github.com/NervanaSystems/distiller https://nervanasystems.github.io/distiller/in ...
- C++面向对象程序设计学习笔记(5)
派生类与继承 概念 继承允许编程者在已有类的基础上创建新的类,可以从一个或者多个已有类中继承函数和数据,并重新定义或者添加新的函数和数据,已有类称为基类或父类,新类称为派生类和子类. 声明 声明一个派 ...
- K12
K12,教育类专用名词(kindergarten through twelfth grade),是学前教育至高中教育的缩写,现在普遍被用来代指基础教育. K-12教育是美国基础教育的统称.“K12”中 ...
- ESP8266 AT指令开发(基于STC89C52单片机): 硬件使用说明
实物图 硬件说明 开发板板载说明: 1.主控芯片: STC89C52 2.Wi-Fi模块: ESP8266 3.温湿度传感器: DHT11 4.液晶屏: IIC OLED 5.继电器: 220V 10 ...
- bash shell——sum
#!/bin/bash # sum.sh # 获取随机数量的参数,相加并打印结果 # total= # # $# 表示参数的数量 # for 循环获取每个参数 # ${!i} 表示返回第i个参数 # ...
- tornado内置接口调用顺序initialize\prepare...
一. initialize方法 首先, 该方法是框架预留的一个初始化时加载自定义内容的钩子, 其会在http请求方法之前调用 二. prepare方法 预处理方法, 在执行对应的请求方法之前调用. h ...
- [转载]3.2 UiPath鼠标操作文本的介绍和使用
一.鼠标(mouse)操作的介绍 模拟用户使用鼠标操作的一种行为,例如单击,双击,悬浮.根据作用对象的不同我们可以分为对元素的操作.对文本的操作和对图像的操作 二.鼠标对文本的操作在UiPath中的使 ...
- 目标检测 <二> TensorFlow安装
一:创建TensorFlow工作环境目录 1. 在anconda安装目录下找到envs目录然后进入 2. 在当前目录下创建一个文件夹改名为tensorflow 二: 创建TensorFlow工作环境 ...
- 了解jsp,这一篇就够了.
jsp的执行过程: 1 客户端发出请求. 2 Web容器将JSP转译成Servlet源代码. 3 Web容器将产生的源代码进行编译. 4 Web容器加载编译后的代码并执行. 5 把执行结果响应至客户端 ...
- Beta冲刺(9/7)——2019.5.31
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...