四、数据技术篇—— 离线数据开发
数据存储及计算、数据整合及管理体系
4.1 数据开发平台
了解需求 -> 模型设计 -> ETL开发 -> 测试 -> 发布上线 -> 日常运维 -> 任务下线
4.1.1 统一计算平台@
客户端:
- Web:以RESTful API的方式提供离线数据处理服务
- SDK:RESTful API的封装
- CTL(Command Line Tool):命令行
- IDE:上层可视化工具
接入层:
提供HTTP服务、Cache、负载均衡,显示用户认证和服务层面的控制访问
逻辑层:
实现用户空间和对象的管理、命令的解析于执行逻辑、数据对象的访问控制和授权
- Worker:处理请求,包括用户空间管理操作、资源管理操作、作业管理等,对于要MR的作业生成实例给Scheduler处理
- Scheduler:调度和拆解,向计算集群寻分资源占用情况以进行流控
- Executor:任务执行,真正的计算任务。
计算层:
- Pangu 分布式文件系统
- Fuxi 资源调度系统一
- Nuwa/ZK Namespace服务
- Shennong 监控模块
4.1.2 统一开发平台
在云端D2:
集成任务开发、调试、发布等一站式数据开发平台,包括数据分析。
基本流程:
1. 写节点代码,设置节点属性,关联依赖
2. 测试逻辑
3. 点击提交,节点的所有触发条件满足后,完成资源分配和执行
4. 发布到线上
SQLSACN:
SQL语句检察模块,进行规则检验
- 代码规范类规则,表命名规范、生命周期设置、注释
- 代码质量类规则,调度参数检查、分母为0,NULL值参与
- 代码性能类规则,分区裁剪失效,扫描大表
强规则:任务会被阻断,修复后才可再次提交
弱规则:显示提醒,可以继续提交。
DQC 数据质量中心
数据监控 和 数据清洗
-
数据监控:监控质量并报警,不处理。主键监控、表数据量、波动监控、重要字段的非空监控、重要枚举字段的离散值监控
-
数据清洗:处理,保障数据产出不含脏数据。在ODS层之后执行(避免影响数据同步效率),如果清洗掉的数据量大于阈值,会阻断。
在彼岸
功能测试
- 新增业务需求的测试
- 数据迁移、重构和修改后,保障数据质量进行对比
- 数据对比:支持不同集群,异构数据库。表级:数据量和全文。字段级:统计值(SUM、MAX)、枚举、空值
- 数据分布:表和字段的一些特征值
- 数据脱敏
4.2 任务调度
依赖Crontab定时任务痛点:
- 任务之间的依赖基于执行时间实现,容易造成前面的任务未结束或失败而后面的任务已运行
- 任务难以并发执行,增加整体处理时间
- 无法设置优先级
- 管理维护不方便
4.2.1 核心设计模型
调度引擎:根据任务节点属性以及依赖关系进行实例化,生成各类参数的实例,生成调度树
执行引擎:根据调度引擎生成的具体任务实例和配置信息,分配CPU、内存等资源,在任务对应的执行环境中运行节点代码
4.2.2 任务状态机模型@
4.2.3 工作状态机模型
4.2.4 调度引擎工作原理
以两个状态机模型原理,以事件驱动的方式运行,为数据任务节点生成实例,在调度树中生成具体执行的工作流。
4.2.5 执行引擎逻辑架构图@
- 任务管理接口:供用户提交、查询和操作离线任务并获得异步通知
- 系统管理接口:供系统管理员后台管理,查看集群负载,划分资源组等
- Driver:调度器,实现了任务管理接口和系统管理接口,负责任务的调度策略、集群容灾和伸缩。类似于JobTracker
- Task pool:Driver把已提交的所有任务放在这,包括等待资源、数据质量监测的任务。直到任务运行完成,用户获取到这个状态的通知,才会移除。保存了整个系统全部状态,并采用Zookeeper实现
- Resource manager:集群整体资源的管理
- Task container:为Task提供运行的容器,类似于Web Server
- Session manager:实现对Task session的管理
- Node:代表集群中的一个节点,是逻辑概念,一台物理机上可以部署多个Node
4.2.6 调度系统的特点
调度配置
输入输出配置和自动识别相结合。能自动识别输入表和输出表,关联上任务并且自动调整依赖
定时任务
设置任务运行的时间,分钟、小时等,可精确到秒。
周期调度
按小时、日周期运行任务,离线数据可依据依赖关系,按照调度树的顺序从上依次向下运行
手动运行
做数据修复或者零时数据操作是,可以手动运行
补数据
数据初始化、数据回溯的时候形成补数据的工作流,并行的运行方式以节约时间
基线管理
按照优先级分类管理,数字越大优先级越高,保障高优先级的资源。同一类优先级的任务,在一条基线中,这样可以按照优先级不同进行分层管理
监控报警
对出错节点、超时未完成的节点,设置电话、短信报警。