数据仓库(七)之作业调度篇
- 概述
随着数据仓库的开发,ETL作业会越来越多,怎么把这些作业有序的运行起来,就需要一个健壮的调度系统来保证数据能够准确、及时的提供给BI应用程序。
- 调度系统设计目标
- 调度系统架构
- ETL作业
数据仓库的ETL作业可能不至一种,需要把各种作业再次进行封装,建立作业的标准格式,统一作业的输入参数、输出参数和参数格式,达到所有的作业调度方式一致。
- 作业管理
提供便捷的作业配置和依赖关系配置页面。
- 作业调度
根据作业调度算法进行自动执行,如果发生异常情况可以进行人工重启和停止。
- 作业监控
对作业运行情况进行监控,发送邮件或者提供监控页面。
- 作业逻辑模型
- 作业调度状态流转图
- 初始化:把新添加的作业加入到执行计划中。
- 待运行:根据时间和依赖关系把可执行的任务更新为待运行。
- 运行中:把待运行的任务执行,更新为运行中。
- 结束:作业运行完成,分为成功和失败。
- python实现调度工具
- 准备环境
1.安装mysql数据库,执行建表脚本。
CREATE TABLE `task_info` (`task_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '任务主键',`task_name` varchar(255) DEFAULT NULL COMMENT '任务名称',`task_dir` varchar(255) DEFAULT NULL COMMENT '任务所在路径',`task_cmd` varchar(255) DEFAULT NULL COMMENT '任务启动命令',`task_argv` varchar(255) DEFAULT NULL COMMENT '任务参数',`task_level` varchar(255) DEFAULT NULL COMMENT '任务层级',`target_table_name` varchar(255) DEFAULT NULL COMMENT '目标表名称',`start_time` datetime DEFAULT NULL COMMENT '任务启动日期',`task_fq` varchar(255) DEFAULT NULL COMMENT '任务执行频率:季-quarters,月-months,周-weeks,天-days,小时-hours,分钟-minutes',`time_interval` int(11) DEFAULT NULL COMMENT '时间间隔',`create_user` varchar(255) DEFAULT NULL COMMENT '创建人',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_user` datetime DEFAULT NULL COMMENT '更新人',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_active` tinyint(4) DEFAULT NULL COMMENT '是否有效',PRIMARY KEY (`task_id`),UNIQUE KEY `uq_task_name` (`task_name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1427 DEFAULT CHARSET=utf8;
CREATE TABLE `task_dpd` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`task_id` int(11) DEFAULT NULL COMMENT '任务外键',`task_name` varchar(255) DEFAULT NULL COMMENT '任务名称',`pre_task_id` int(11) DEFAULT NULL COMMENT '依赖任务外键',`is_active` tinyint(4) DEFAULT NULL COMMENT '是否有效',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`),KEY `fk_task_dpd_info_id` (`task_id`),CONSTRAINT `fk_task_dpd_info_id` FOREIGN KEY (`task_id`) REFERENCES `task_info` (`task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2064 DEFAULT CHARSET=utf8;
CREATE TABLE `task_plan` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`task_id` int(11) DEFAULT NULL COMMENT '外键',`task_name` varchar(255) DEFAULT NULL COMMENT '任务名称',`begtime` datetime DEFAULT NULL COMMENT '开始时间',`endtime` datetime DEFAULT NULL COMMENT '结束时间',`task_status` tinyint(4) DEFAULT NULL COMMENT '任务状态 1-初始化,2-待运行,3-运行中,4-成功,5-失败',`retry_count` tinyint(4) DEFAULT '0' COMMENT '重试次数',`failed_desc` text COMMENT '失败原因描述',`next_time` datetime DEFAULT NULL COMMENT '下次运行时间',`task_ppid` int(11) DEFAULT NULL COMMENT '父进程id',`task_pid` int(11) DEFAULT NULL COMMENT '子进程id',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`task_result` text COMMENT '执行结果信息',PRIMARY KEY (`id`),KEY `fk_task_info_task_id` (`task_id`),CONSTRAINT `fk_task_info_task_id` FOREIGN KEY (`task_id`) REFERENCES `task_info` (`task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6401 DEFAULT CHARSET=utf8;CREATE TABLE `task_log` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`task_id` int(11) NOT NULL COMMENT '任务外键',`task_name` varchar(255) DEFAULT NULL COMMENT '任务名称',`begtime` datetime DEFAULT NULL COMMENT '开始时间',`endtime` datetime DEFAULT NULL COMMENT '结束时间',`task_status` tinyint(4) DEFAULT NULL COMMENT '任务状态 4-成功,5-失败',`task_result` text COMMENT '执行结果信息',`failed_desc` text COMMENT '失败信息',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`),KEY `fk_task_info_id` (`task_id`),CONSTRAINT `fk_task_info_id` FOREIGN KEY (`task_id`) REFERENCES `task_info` (`task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2382 DEFAULT CHARSET=utf8;
CREATE TABLE `task_param` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`param_type` varchar(255) DEFAULT NULL COMMENT '参数类型',`param_value` varchar(255) DEFAULT NULL COMMENT '参数值',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`param_name` varchar(255) DEFAULT NULL COMMENT '参数名称',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
INSERT INTO `task_param`(`id`, `param_type`, `param_value`, `create_time`, `update_time`, `param_name`) VALUES (1, 'IS_START_TASK', '1', '2020-04-17 17:13:59', '2020-04-22 16:57:40', 'IS_START_TASK');
2.安装python3,安装包:pymysql,dateutil,concurrent_log_handler,DBUtils。
3.下载工具包,解压到ETL服务器上。
4.初始化配置文件settings,加载任务和依赖数据。
- 目录结构描述
文件名称 | 描述 |
log | 任务执行日志,按照文件大小切分。 |
taskmodels | 任务模型,主要有关于数据库操作的方法。 |
utils | 主要有数据连接日志,发送邮件的公共方法。 |
settings.py | 调度工具配置信息。 |
taskinit.py | 任务初始化执行文件。 |
taskschedule.py | 任务调度执行文件。 |
sendmail.py | 发送邮箱执行文件。 |
- 运行调度工具
运行 taskinit.py、taskschedule.py、sendmail.py三个文件
数据仓库(七)之作业调度篇相关推荐
- 第七十四篇:机器学习优化方法及超参数设置综述
第七十四篇:机器学习优化方法及超参数设置综述 置顶 2019-08-25 23:03:44 廖佳才 阅读数 207更多 分类专栏: 深度学习 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-S ...
- 第七十五篇:学术论文写作技巧
第七十五篇:学术论文写作技巧 论文写作技巧 下载 论文写作技巧 最近听了一下网课,把大牛们的论文讲课记录和网上一些关于论文写作技巧的文章总结了一下.总结了一些关于论文的润色.语法.投稿.回复审稿人等需 ...
- 视频教程-直通企业的数据仓库处理术—启动篇-大数据
直通企业的数据仓库处理术-启动篇 数据架构与处理方向咨询师. 某高等教育职业技术学院特约讲师. 12年银行金融和保险业项目经验. 熟悉项目管理,数据建模,ETL数据处理和报表展现.在数据建模,数据仓库 ...
- Android当中的MVP模式(七)终篇---关于对MVP模式中代码臃肿
个人博客:CODE FRAMER BIGZ MVP系列文章配套DEMO Android 当中的 MVP 模式(一)基本概念 Android 当中的 MVP 模式(二)封装 Android 当中的 MV ...
- 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础 ...
- WPF效果第一百七十八篇ItemsControl旋转
在前面分享的几篇中咱已经玩耍了Popup.ListBox多选.Grid动态分.RadioButton模板.控件的拖放效果.控件的置顶和置底.控件的锁定.自定义Window样式.动画效果.Expande ...
- .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
写在前面 这篇我们对用户权限进行极简设计并保留其扩展性.首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core.ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解 ...
- mysql维表的代理键字段_mysql多维数据仓库指南--第三篇第12章(2)
宾夕法尼亚州地区客户维 在本节我将用宾夕法尼亚州地区客户的子集维度来解释第二种维度子集的类型.我也将向你说明如何测试该子集维度. 相对的,一个向上钻取的维包含了它基础维的所有更高级别的数据.而一个特定 ...
- SpringBoot学习之旅(七)---JPA进阶篇之自定义查询、修改、分页
文章目录 前言 源码下载 其他文章 查询关键字 自定义Select和Update 分页及自定义分页 自定义分页 分页查询的业务代码 前言 前一节SpringBoot学习之旅(六)-JPA操作MySql ...
最新文章
- ios framework 开发 之 实战二 ,成功
- python控制nao机器人_python控制nao机器人身体动作实例详解
- 如何使用定时器settimeout、setInterval执行能传递参数的函数(转)
- HDU - 1054 Strategic Game(最小点覆盖-二分图最大匹配)
- php接口,免认证的短信接口,每天单个号码140条以上
- 分布式实物实现方式_这是您完成实物产品设计任务的方式
- bitmap 转 drawable
- linux强制使用windows命名,如何强制Windows重命名带有特殊字符的文件?
- sqlserver查询补全时间_mssql 按日期分组(group by)查询统计的时候,没有数据补0的解决办法...
- 产品开发管理方法工具流程 pdf_HR必备薪酬和绩效管理方法论、工具、案例
- 使用网络调试助手连接EMQ服务器
- 自建同步云盘服务器,自建云盘系列——Syncthing (BT Sync的开源替代)
- 定位算法——多边测量法及MATLAB编程
- 激光投影仪对比激光电视 成像原理和适用范围
- 现代软件工程 第一章 【概论】练习与讨论 第10题 邓杰
- jira迁移问题解决(实践篇)
- 阅读笔记:Blindly Assess Image Quality in the Wild Guided by A Self-Adaptive Hyper Network
- d3.js画金庸小说力导向图
- 前端使用jquery.wordexport.js导出word
- Unity3d C#通过使用大华SDK控制大华摄像头旋转、变焦等云台操作和预置点等控制操作(含源码)
热门文章
- 手把手教你画嘴巴,以后再也不怕画嘴巴了
- android高级UI之PathMeasure<一>--Path测量基础(nextContour、getPosTan、getMatrix、getSegment)
- HashMap(一)——(n - 1) hash
- java语言程序设计丁振凡答案下载_java语言程序设计答案 丁振凡
- 构建 cloudreve 捐赠版docker 镜像
- android 默认转场动画,安卓转场动画
- mysql 绕过addslashes_代码审计Day13 - 特定场合下addslashes函数的绕过
- 利用opencv实现抖音最强变脸术
- HTML5+CSS3学习笔记(第1章)HTML基础
- 21种方法快速上手谷歌SEO