开发者学堂课程【一站式大数据开发治理平台 DataWorks 初级课程:DataWorks 数据开发介绍及实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/763/detail/13357
DatatWorks 数据开发介绍及实践
内容介绍
一、课堂介绍
二、存在价值
三、核心能力
四、企业场景最佳实践
五、演示与实操
一、课堂介绍
本节课主要讲解 Datawork 的核心利器 DataStudio,主要分为四个部分第一 why DataStudio 讲解 DataStudio 存在的意义和价值,第二部分介绍一般数据生产的流程,DataStudio 是怎么去执行这些流程,第三部会以两个常见的产品,企业的分权管理和协同开发以及构建数仓的关键点进行分享,第四部分则为实操与演示。
二、存在价值
(1)诞生,什么是 DataStudio
如下为 DataStudio 的使用界面,在画面中央为工作流,工作流中有同步任务,dos log 任务,当然也可以依照企业不同需求拖入其他节点,比如 mr 节点或者其他引擎的节点。
从侧面反映事实,今天企业的开发人员在面对 log 的数据源或者 log 的计算引擎时,可以非常优雅的以拖拉拽的形式进行数据开发,来构建离线或实时调度的工作流。
历史沿革:今天 Datawork 能以如今面貌呈现离不开将近十年的发展
下图则清晰展示了 Datawork 的整体发展历程。
在2009年是原始的 dataw,调度则使用 Crontab 的方式,可想而知,业务量的增加是非常不现实的,所以在2009年八月 datawork 的前身天网发布,当时天网十分简单的能够写log和支持调度周期的工具,较为简单。
随着集团登月计划的执行和数据中台的发展,Datawork 也进行了多次的更改,在2015年 Datawork 以d+的形态进入公共云专有域,随后在2016年成立了专有的品牌,将 Datawork 和 maxcomputer 这个强有力的组合推向了市场。
随后在2017、2018、2019年 Datawork 完成了国际化以及2.0 3.0的升级,现在Datawork 已经成为了一款可支持多个引擎,多识别,支持多个调度的一个非常强大的大数据生产调度工具。
一个开源用户可清楚知道,开源可对最基础的几行数据进行识别和上传,在构建大数据体系时,任务的工作流会十分庞大,此时不得不借鉴一些开元的调度工具,如Azkaban oozie 来帮助用户进行整个数据的调度,此时遇到一个问题这些开源的调度工具,基本需要维护一个或多个,几十个的配置文件以便于去实现任务间的依赖关系,对于非技术人员来说知识门槛非常高,即便是技术人员维持上百个维护任务,效率也是非常低的,而且易出错。这便是开源调度系统的瓶颈所在。
Datawork 究竟带来什么样的价值
首先进行一个形象的比喻如同从 DOS 到 Windows,将 CPU 的底层硬盘放入Windows,当然我们也是使用 OS 进行一些数据任务,但有了 Window 以后的效率是不言而喻的,他让 pcg 可以进入千家万户,让所有人可以通过电脑办公娱乐,购物等其他事情,Datawork 同样如此,在企业有了大数据后,当企业的业务人员或者非业务人员想要去使用这些数据此时存在门槛,此时企业的前端开发人员可做一些工具为非业务人员对这些数据进行可视化的分析和查询,有了 Datawork 以后门槛低了很多。此外在看家方面也不需要用户去写脚本,来维持整个系统的周期调度,用户仅需要通过可视化方式来进行代码开发,来进行整个企业的数据体系,总结为可以针对数据工具维护困难,DataStudio 进行可视化化管理,简洁完成构建,
DataStudio
在降本提效也有很大成效
降低学习成本、人力成本、提升开发效率,首先非技术人员容易上手,2个小时即可明确整个数据调度和开发的流程,企业也不需要成立维护数据开发的相关团队,免去调度系统的开发成本,对于数据人员和开发人员,目前 Datawork 提供的可视化开发界面可以非常有效的提高开发效率并且,可以非常规范化的发布上线流程,非常规范化的帮助企业建立数据规范,让整个企业运行起来非常稳定。
如下:为阿里巴巴生产的调度截图,其中每一个小绿块便是一个调度任务,每天阿里巴巴存在上百万个调度任务在自动的运行,这些任务便是通 Datawork 的调度系统来进行调度的完成的。下图连日常任务的千分之一万分之一都不到可见 Datawork 调度系统是集团任务调度十分重要的基石。
降本提效:释放人力
以下大中型为数据体系人员规模,首先他的数据仓上有50多个人,和几个其他小组组成,每一小组均存在部分成员进行数据开发,另外工具开发小组和运维小组直接去做工具相关的事情,假如这个企业的 Datawork 加其他引擎的组合,毫无疑问,体系的规模就从100多个人降低到50人左右,剩余的50人 其实就可以去做企业行数据开发,帮助企业更好的搭建业务体系,将精力放到业务上。
三、核心能力
(1)企业流程
首先回顾下图一般数据生产流程,从数据同步到定义数据的形态,以及数据模型定义完成后的数据生产,可能是离线的数据生产或者实时的数据生产,当数据生产完成后将代码发布到生产环境实施生产和调度相关数据,数据产生后可以支持数据的画表呈现或者采用 API 的形式连接应用,进行数据的正常运转。
1.模型导入
2.设计阶段
3.开发测试阶段
4.投产阶段
一般数据生产流程:专业&规范
开发阶段:代码的开发与审批
测试阶段:产品的测试,检查相对细一些,对数据的集合等要求
发布阶段:上线发布,对数据的所需产出没有影响,即可发布
运维阶段:发布后的运维,针对数据的延迟等问题,此时需要对其进行任务的运维。
从宏观大图上看 Datawork 现在支持离线,实时多种流程的配置模式同时作为Datawork 的核心能力
DataStudio 核心能力:天然具有规范化的数据化生产流程,在这种空间下的datawork 需要一个管理员对其代码进行审核,当审核完成后,需要代码对其进行管理和运维进行
Datawork 本身也内化了一个相对规范的生产流程,即 Datawork 的标准空间,在这种空间下一个空间或对应两个计算引擎,针对技术开发人员仅需要对其在发布完成后进行冒烟测试,而管理员和运维角色则对其代码进行审核,若审核的代码不会对业务数据的产生稳定性造成影响,此时的主管和运维部署人员的角色即可进行发布,将任务发布到生产环境中去。
(2)离线开发流程
1. 业务流程规划
业务流程规划是在2.0后新增的业务流程概念以业务视角归并管理所涉及的表、函数、资源等逻辑抽象,目前建议客户根据业务视角来创建业务流程继续管理,比如说创建一个表,来进行规范创建表、函数、资源等,在创建一个表,用来管理跟运维活动相关的表资源管理,函数以及任务,比较难难理解的是任务流程是帮助用户来管理表资源的逻辑函数。
用户在创建完成之后即可在任务流程创建各种各样的离线任务实时任务,完成后,即可将这些任务从上到下的串联成工作流了
虽然建议用户从业务流程进行管理,但是整个用法是灵活的,并未限制死,有的用户可以使用单个的流程产出所有的数据,再用一个单个的流程来产出 DWB 层的所有数据,ODS 层的同步任务也会单独的放到同一层中,主要是根据用户的场景而定。
2. 工作流构建
从下一步开始创建工作流,首先用户会创建一个 sliog 任务,
进行任务编写,首先复制一段语法正确没有进行复制的代码,点击格式化按钮后会变成有缩进的形式,同时用户在编写 log 的时候有关键字联想和关键字高量的效果,帮助用户去更好的理解这段 log 同时在右侧存在 DAG 表帮助用户理解关键词,如果当这个 log 非常长,这个功能是非常实用的。在线开发代码,创立函数,进行代码开发
当用户编写完成后,即可对该设备进行
首先用户需要注意的调度周期是每天调度一次还是小时调度
调度周期分为:分、时、日、月、周、用户同时可以设置该任务失败后的调度机制
是当前用户完成所有调度的周期调度属性配置 针对任务的任何环节进行属性配置
所有配置完成后,接下来需要进行每个配置的依赖关系配置
存在多个配置方法,目前展示最简单的一种采用划线的方式,通过鼠标连线的方式进行依赖关系配置,配置完成后进行提交,到达开发系统
3. 冒烟测试
需要客户分别进入开发界面进行冒烟测试,在操作界面上即可观察是否成功,只要当前任务成功,即可显示成功
如果失败也可在日志查看失败具体原因,当每一个任务在开发环境,冒烟测试成功后,即可进入开发界页面,并进行任务发布了 。
4. 任务发布至生产环境
该页面会显示出开发人员所提交的所有发布任务,并且可以点击查看,对比两次发布所产生的差异,周期性生成实例自动调度
管理人员检测进行对比差异比较完成后
若无差异,并对整体的数据流程稳定性并未产生影响即可将全部的发布包打包并上传发布。刚才编写的几个任务就会发布到生产环境
发布完成后即可进行日常运维,在 Datawork 的运维中心即可完成运维的相关活动;相关问题的诊断,在运维大屏,所有用户都可以在查看界面可观察任务所有信息,进行智能诊断,进行失败任务的筛选,查询任务失败的原因,有多任务任务失败的,以及今天和昨天任务之间的比较
用户通常遇到的情况就是说我的某个任务运维失败了,我该如何进行查看日志,在哪里进行重找,一般来说在周期实例即可查看所有信息,比如说用户可以点击任务,在右侧即可查看有关任务整体的日志,并且进行运行的诊断。
展示出现错误的原因
点击运行诊断,进行运行诊断的详细界面,运行诊断首先是从依赖检查开始,针对上游的所有日志查看运行的数据是否完成,如果任务完成的话,接着检查当前的任务的时间是否到达,如果到达再进调度的资源是否充足,在分析具体任务失败的原因,可点击调度资源,检查整体任务过程中调度的资源。
四、企业场景最佳实践
在进行实操之前首先分享两个案例
(1) 分权管理与协同开发
阿里云账号的使用
由 ceo 进行使用权限的分配
各个职位之间各司其职
人员包括技术负责角色,运维人员,研发人员和空间管理人员,
作为运维人员职责偏向数据的管理,整个角色分配完成后即可通过之前所了解的规范化的数据流程。
具体如下图:
(2)构建离线数仓的 key point
通过一次配置,实现每天计算前一天业务系统产生的数据(T+1)。
前提:业务 MYSQL 表中必须有截至时间段/
难点:实现 t+1的难点是如何保证每天如何争取保证实现对 Datawork 系统参数概念的理解
Bizdate:可变形的时间参数
Cyctime:精确到时分秒的时间参数,可变形
Datawork周期任务产生的每一实例的背后都会隐藏着很多的参数,
重点关注 Cyctime 和 bizdate
Bizdate 指的就是业务日期,假如今天是2020年9月16日,今天计算的是昨天的数据,那昨天就是9月15日,所以 Bizdate 就会解析为2020.9.15。Cyctime 今天运行的定义时间就是2020年9月16日,且可以精确到时间秒。
举例:
如图,有一个定时任务,设置为每日的凌晨1点运行,假如9月16日准时运行的时间是1点,那当实例生成的时候,时间就明确了为202009160100.这是一个可以精确到时间秒的字符串。
Bizdate 的准时运行时间为2020.09.15
实操:
首先创建实时同步任务,数据过滤,构建离线数仓的 key point
通过图片展示:
假如同步任务配置好以后,8月2日执行,那么解析到的日期就是2018年0801,同样的8月3日执行,解析为20180802,同样的对于原表来说0802的记录值就会在20180802的分区中。8月4日在执行这个任务,同样的8月4日的记录值会被抽取在8月4日的目录表中,以此类推,每一天原表里产生的新的数据都会被抽取到当天的数据引擎的分区里面。
进行相关参数的配置
实现 t+1的难点是如何保证每天为客户实现
如下界面
五、演示与实操
第一步配置数据源
填写数据内容,完成2个数据源配置,新建业务流程,拖入数据节点,oss 的数据任务。
将表结构和表名称联合创建,点击提交,构建项目
第二张表,进行表格名称创建,分别将表落到计算引擎
针对 oss 任务,将相关参数配置,点击保存,点击第一张表,用一样的方法,进行配置,最后点击数据预览即可观看数据
同步任务配置完成
点击提交,点击任务配置完成
对任务进行合并
通过拖拉拽的形式构建依赖关系
一个任务只能产出一张表,一张表也只能产出一个任务,通过拖拉拽的形式去简单的把任务依赖关系给配置起来,这样整个工作流的关系就配置完成了。
接下来依然新建表
统一的方式创建,将一张表提交生产环境,要来验证生产结果。
完成后,编辑代码,进行 udf 的创建,通过文档下载架包,去创建函数。便于理解,用于解决什么问题,进行代码的编辑。
接下来对每一个任务进行提交
提交完成后,进行开发界面,进行测试,可以通过日志查看是否成功,
成功后,进行下一任务的测试,全部完成后,进行结果认证,完成后即可通知管理员发布任务,即可检查任务流程。
查询界面如下
5个结果5张表都是有数据的,说明代码已经产生了数据。
这时候就可以对任务进行发布,发布之后,进入运维中心,在周期任务里面就可看见5个任务,选择其中一个展开6层,从最上面的一层开始对下面的捕捉数据,选择9月8日的业务日期,补数据任务已经开始运行了,查看任务会从上到下进行运营。
注意,如果不是任务主账号,而是子账号的话,需要先去申请权限,才能查询数据。
最后,可以看下5张图5个数据,已经成功了。