摘要:在2017杭州云栖大会阿里云数加DataWorks专场上,阿里云产品专家代俊峰(花名:普阳)为大家分享了如何借助阿里云数加DataWorks工具进行数据集成和开发,分享了如何借助DataWorks实现从数据处理手工作坊到数据加工工厂的跨越转变。
本文内容根据嘉宾演讲视频以及PPT整理而成。
从整体的角度来看,数据的开发主要包括以下五个环节:
1. 总体架构
2. 数据集成
3. 数据建模
4. 数据开发
5. 运维调度
一、总体架构
其实DataWorks在2009年9月份的时候就已经开始研发了,当时还是基于Hadoop的体系进行研发的。谈到为什么要研发DataWorks这样的一个工具,其实是因为在没有DataWorks工具的时候,很多数据的开发工作是非常痛苦的,最开始做大数据分析处理的时候就是自己搭建几十台Hadoop的机器,然后写一些脚本去处理数据。当时Hive还没有出来,所以需要自己写MapReduce程序,之后包裹成shell脚本,再进行调度,但是这个过程中就会遇到很多如下图所示的问题。
即便是一个小公司,仅有几个人进行协同开发,互相之间的业务也需要进行协同调度。每个公司都会有一些开源的工具,比如很多互联网公司都会使用MongoDB、MySQL等数据库,还可能会使用一些新兴的数据库。以上这些数据库都会被一线的开发人员所使用,所以需要将数据打到这些数据库里面去。刚开始可能是使用Oracle存储了一亿条数据,然后数据仓库就跑不下去了,所以很多阿里巴巴的技术实践都是在业务的逼迫下摸爬滚打寻找到的解决方案。阿里巴巴的所有数据都会汇聚到MaxCompute里面,也是由于业务的需求或者说逼迫实现的。
在DataWorks长达8年的发展过程中,逐渐累积出来的一些工具,最开始的时候IDE开发环境都没有外部的界面,最开始的时候就是使用一个Notepad或者Sublime来编写代码,然后上传文件,自己进行ftp操作。阿里巴巴是一家数据驱动的公司,而对于一些非计算机专业的同学而言,可能连CPU和内存都不清楚,所以如果既需要他们去学习SQL开发,也需要去学习ftp命令,会是一件很痛苦的事情,这样也会使得公司的运转效率很低。所以后来DataWorks逐渐开发了图形化的IDE界面来做数据集成,即便是非计算机专业的同学来做一些任务也是很容易的事情。今天,阿里巴巴每天活跃的“小二”就有六千多万,他们的工作都需要依靠阿里巴巴的平台进行数据处理,这在全世界范围来看都是不可想象的。虽然当时阿里巴巴在刚开始做的时候也并没有想到会达到今天这样的规模,但是经历了这么多年的时间,才发现阿里巴巴其实真的是一家数据驱动的公司。
其实在数据集成方面的这些功能现在看上去非常高大上,而这些功能的实现却是由无数个阿里员工所贡献的力量一点点积累沉淀而成的,而并非某一个天才的设计师的功劳。
如上图所示的是数据工厂大图,本次将会着重分享对于研发最为重要的数据集成、数据开发、监控运维以及实时分析这几个部分的功能。
二、数据集成
全域数据汇聚
数据研发的第一步就是数据集成。数据集成其实是一个脏活、累活,对于小公司而言还好,而对于中型企业或者大型企业而言,就会存在很多的数据源,而针对于每一个数据源都进行单独研发则会是一件非常痛苦的事情。不同的业务需求有很多的同步方式,比如实时的binlog同步、历史数据批量或者增量同步等,而这些不同的同步方式都是随着业务的实践中经验不断积累而沉淀下来的。在阿里巴巴内部,这些都不只是一个工具,而是成熟的功能化应用,所以在这里面就会有可视化的监控工具帮助用户便捷高效地解决问题。当数据研发过程中没有错误发生的时候其实很容易,一旦发生了错误或者出现性能的瓶颈则需要很好的工具进行支撑。
从下图中也可以看到,DataWorks在数据集上拥有一个非常优秀的架构。
全程可视化
接下来分享DataWorks的数据集成具体是怎样实现的。DataWorks拥有一个全程可视化的界面,之前的时候其他的一些公司往往会使用Oracle或者MySQL的Load工具编写shell脚本,而对于开发人员而言,想要使用这些工具却需要记忆很多参数。但是如果公司想要成为一家业务驱动的公司可能会存在很多的BU,而这些BU不可能花费重金聘请资深的数据专家或者架构师,而更可能仅仅聘请一个不懂计算机但是懂业务的同学来实现数据同步工作。而通过使用DataWorks的图形化界面就可以解决70%~80%的数据同步问题,如果实在不行还可以使用脚本化的界面,这也都比单纯记忆许多参数要好,可以通过使用JSON格式的面向对象的配置方式解决复杂的数据系统的配置问题。阿里巴巴每天同步的数据可能会达到几十PB量级,当业务更加分化的时候,专门负责监控的角色可能会同时负责上万个数据同步任务。而其实数据集成是一个任务,这个任务下面会分为不同的Task,Task会有不同的Pipeline通道,而每个Pipeline如果出现问题都可以进行精细化的监控。
三、数据开发
数仓规范
对于整个数据开发而言,都会有一套数据仓库的开发规范,而且这套理论上规范大家都是比较认可的。对于大型的公司而言,其数据量也非常大,他们非常渴望按照阿里巴巴的数仓理论进行开发,但事实上如果没有DataWorks这套工具,大家在进行数仓开发的时候还是小作坊的开发模式。当需要将数据研发过程发展成流水线的时候,必须要有一套数仓的开发规范,来保证流水线的高效、安全和稳定,进而驱动数据的研发。
而如今数据的研发已经远远不再是早期的产生一个报表来看看数据的情况了,在阿里巴巴这样的公司中就存在数据的三字经——“聚、通、用”,其中的“聚”指的就是数据的汇聚。“通”指的是数据要融合贯通,如果数据拿过来之后,数据之间不做连接和融合以及进一步的精细化加工,数据获取就是没有任何意义的,举个常见的例子,一个交易的数据和一个退款的数据,如果将这两个数据放在一起就可以做一个交易退款的比例分析。再比如淘宝和微博关联起来,分析微博关注以及点赞、点击数据的关系。所以只有将这些数据放在像MaxCompute大型的DataLake的时候,在海量数据的关联、融合和分析中才能做到别人永远做不到的事情。
工艺流程
如下图所示,DataWorks实现了一整套的数据开发的工艺流程。通过基础服务的设施、数据分析、集成开发以及资源调度这样一整套流程,以及完整的角色分工可以保证数据开发过程像现代化工厂一样有生产人员和维护人员来保障数据高效稳定的产出。
功能图谱
下图是数据开发的核心功能图谱。正如前面所提到的,一个集成环境会拥有一个代码编辑器,如果是多人协作,一旦代码写错了,就可以与代码仓库中上一个代码版本进行对比,进而实现对于代码的管理和协同。此外,整个资源的监控与调度以及元数据管理都可以在其中得以实现。
数据模型层次结构
从数据研发的分层上来说,DataWorks支持不同的应用层。每个应用层都会有一个项目空间,应用层的开发和基础层的开发是分门别类的,但是他们又相互依赖,底层的数据为上层的数据提供服务,上层不同应用之间互相依赖和授权以及互相使用,这样就有一个层次结构的模型来支撑,而这个层次模型的实现也是通过DataWorks工具赋能的。
数据建模
从下图可以看到,DataWorks提供了数据建模的工具,如果熟悉也可以手工写一个DDR工具来创建表,这种方法也是可以的。但是如果需要做大型的任务,比如阿里巴巴在收购优酷之后,需要将优酷的数据并入阿里巴巴,其中涉及到的表非常多,所以在整个建模的过程中,一个人的思路可能是不够全面的,可能需要多人进行协同开发,而多人系统编辑模型则是一个非常麻烦和痛苦的过程。而且通过使用DataWorks,这个过程就像是使用Office 365在线协作一样,通过大家协同地编辑模型然后实现的一键式发布提交到开发环境或者生产环境,这样就极大地提高了效率。
数据血缘分析
下图所展现的是数据开发之前,在进行需求分析的时候的数据血缘分析。比如对于一个产品经理而言,在进行数据分析的时候往往不知道会使用哪一张表,不理解每一张表的具体含义是什么,所以效率会比较低。而在DataWorks的数据分析中,提供了数据血缘分析的工具,这样就可以知道应该使用哪一张表、这张表对于其他表产生了什么影响以及其他的表会对于这张表产生什么影响,当出现表的字段增加、减少等变化的时候会提前进行通知,使得开发人员可以事先进行维护,可以非常精细地帮助用户了解表级别以及字段级别的依赖关系,进而进行很好的数据研发。
业务流程单元
对于大型企业而言,在同一个工作空间下可能会发展到上百甚至上千个SQL,这时候就会变成一团乱麻,难于维护。而DataWorks有业务流程的概念,可以把相关的业务整合起来形成一个完整、高效的面向业务的流程。
代码编辑器
其实产品的关注点就是无穷无尽的细节,下图所展现的就是DataWorks中还在进行研发的功能。普通情况下,可能只需要写两三百行SQL代码,而当业务越来越复杂的时候,可能典型的SQL需要500行,比较复杂的SQL可能会达到2000行甚至3000行。其实在写SQL的时候,大家会注意到往往会有很多的from、join等,在看代码的时候除了非常有经验的SQL开发人员可以一目了然地看出关系,而对于一般的开发人员而言,看这样的SQL是非常痛苦的。DataWorks所提供的编辑器非常强大,提供了代码的折叠、缩略图以及鸟瞰帮助开发人员定位代码,还可以通过SQL结构化的方式直观地看到数据共同部件的分布图,可以非常方便地帮助开发人员定位问题。
代码编辑器核心的思路就是提供一个类似于Notepad的工具让大家在里面写代码,但是它不是一个简单的文本编辑器,而是一个完全高度结构化的东西,可以从各个维度和角度将代码进行各种变换,进而帮助理解代码。正如一句程序员之间的那句名言“代码是写给人看的”,这种编辑器是为了帮助程序员提高开发效率的,帮助人理解代码。所以当我们写了SQL开发任务之后,DataWorks编辑器就可以帮助理解其内部所用到的表以及历史上、空间上以及版本变化上的关系以及结构上的语法树,可以提供非常多的结构帮助开发者理解。对于具体细节代码而言,可以提供智能的提示,甚至写一个子查询所得到的字段,在外部引用的时候也可以自动提示,以及代码的预编译以及实时的语法提醒。而这些看似简单的功能,在真正实施过程中并不是那么容易的,之所以DataWorks能够做到是因为其底层使用阿里巴巴自研的MaxCompute,技术团队之间可以实现非常紧密的协作,所以可以实现看起来很细节但是做起来非常复杂的事情。而对于复杂代码的理解,就可以借助之前提到的缩略图以及代码折叠等各种各样的展示方式帮助大家提高开发效率。
全局调度
最终任务发布完成之后,如果仅是一两个任务使用shell配置一下就可以了,而对于像阿里巴巴这样数据驱动的企业而言,数据加工的任务也会越来越多,如果任务数量到达1000的时候,如果没有非常好的调度工具就会做不下去了。而如图所示的调度图仅是一个小例子,这可能仅仅是阿里巴巴整个调度系统的百万分之一,仅仅是整个森林中的一片叶子。在实际业务中可以支持分钟、小时、天、周、月等周期性调度,并且可以支持千万级的并发。阿里巴巴的调度系统不同于其他的调度系统,它是基于无状态任务的,属于触发的依赖,这样就实现了非常高效的并发执行。随着业务量不断地发展,只有非常强大的调度支撑系统才能保障业务的正常运行。
工作流设计
DataWorks也提供了如下图所示一整套工作流的设计机制来保障业务,可以帮助用户更好地理解业务。
四、监控运维
任务管理
在监控运维层面,熟悉DataWorks产品的同学都知道,DataWorks提供了一套完整的数据加工工艺和数据开发规范,分为了开发环境和生产环境。而在从开发环境到生产环境之间进行代码迁移的过程中,DataWorks提供了测试的接入。其实尤其是对于一些大型企业,补数据是一件非常头疼的事情,可能晚写了一些代码上传之后认为万事大吉了,但是其实工作只完成了一半,因为需要补充之前的数据,才能进行数据的对比分析。因此DataWorks也提供了补数据的功能,用户可以将过去30天或者过去90天的数据补充起来,为下一轮数据分析提供服务。从下图也可以看出,从依赖关系到产生实例有特别多不同的实例产生进行维护,其中非常贴心的功能就是可以层层展开,可以看到每一层属性的操作日志以及运行日志,也就是对于该节点做了什么事情以及该节点做了什么事情,这个节点是什么样的代码以及版本情况等,都可以在DataWorks里面进行机动化管理。如果没有这样一个环境,可能会需要用户开发无数个工具,效率就会非常低下。
精细周期控制
下图所示的是实例的精细化调度。每天的任务可以依赖小时的任务,这样会追踪并生成一个运行的实例,按照配置可以有条不紊地执行。
智能预测
下图所示的是智能产出的效果图。数据在使用的时候都是输出到一线的系统中,即便是晚5分钟产出都需要赔付用户的,所以必须要能够保证数据能够及时产出。
五、DataWorks 大数据开发核心流程
最后回顾整个DataWorks 大数据研发的流程,通过找数据、申请数据、建表、图形化拖拽的集中开发环境、临时查询的开发、集成的图形化界面、图形化的IDE环境以及监控报警等一步步实现大数据开发,以上这些都是看似非常细小的工具,但是正是这些工具保证了业务有条不紊地开展,这些工具组织起来就实现了DataWorks产品的目标。DataWorks不是一个手工作坊式的数据研发工具,而是真正的数据生产进入大规模生产、协作、监控与运维时代的高端生产工具。
欢迎加入“数加·MaxCompute购买咨询”钉钉群(群号: 11782920)进行咨询,群二维码如下: