阿里云服务搭建离线数据仓库(一)
使用到的阿里云服务:
DTS:数据同步,可以做数据增量与全量同步,增量同步是监控MySql的binlog日志做的增量。
DataWorks:集调度运维一体化平台,可以调度已创建好的任务,有自己的调度中心和运维中心、数据中心。
MaxCompute:离线数据计算引擎,类似于spark、flink,只不过MaxCompute(简称:MC)是阿里云自己开发的计算引擎,目前MC服务已覆盖全球16个国家和地区,客户遍及金融、互联网、生物医疗、能源、交通、传媒等行业,为全球用户提供海量数据存储和计算服务。MC的多个客户案例荣获“2017大数据优秀产品和应用解决方案案例”奖。此外,MC、DataWorks以及AnalyticDB代表阿里云入选了Forrester Wave™ Q4 2018云数据仓库报告。(总之有国人提前踩过很多坑,目前算是成熟的产品,)
此篇文章知识以自己搭建的经验为基础给大家提供一下不同工具搭建的数仓流程,仅供参考(万一你下家公司大数据使用的是阿里云服务呐~~)
1.确定业务需求,从我们业务数据库中导入数据到DataWork里面
①业务需求
向我们做大数据的一般都是统计某某指标,但是因为数据量太大,在业务数据库中进行统计会影响性能和影响业务的正常运转,所以就把统计指标的这部分功能放到了大数据组,但是这是业务数据库,数据量差不多几个亿吧日增千万左右,而我们统计的指标可以分为两部分,一部分是供业务使用,就是在我们的应用服务上会有显示前一天某个个人消费了多少钱,那些足迹,日、周、月、年的消费统计之类的,这部分是业务数据,另一部分的统计是跟我们领导后台观看的,这部分就不是以用户为维度进行的统计,而是以时间为维度进行统计,例如今天在我这个平台一共销售了多少、那些商品销售的最多之类的统计,这一步需要做的是主要确定好那些业务表要被导入到DW里面。
②数据导入
使用DTS服务,把存放在mysql里面的业务数据导入到MC里面,一般选择的是DTS的数据同步服务,DTS数据同步服务,导入数据的方式是先全量导入后增量导入,但是全量导入的时候可能会出现数据重复的问题,而且DTS导入到DW会有一个差不多5分钟的数据延迟(DTS导入其他都是实时,只有到MC是有时间延迟的,官方文档有,我找不到了),所以使用DTS实时增量在MC里面做实时同步这一个就不可能实现了,但是如果业务需求可以容忍数据延迟的问题,那么也是可以做的。DTS导入到MC会生成两张表,一张base表,存放着,同步之前全量数据(有可能存在重复数据),一张log表(同步之后的增量数据),这两张表的命名都是源表名+_base或源表名+_log,而且在log里面是有几个默认字段(record_id,operation_flag,utc_timestamp,before_flag,after_flag)
通过这些字段来区分哪些是新数据,哪些是旧数据,而且可以取到某一时间的增量数据,base表是没有分区的,但是log表在进行DTS数据同步设置的时候就可以设置这张表的分区,分区只能选择阿里设置的不可以自己设置,阿里默认的分区(年、月、日、时、分),分区是有限制的(一张表的分区最多为60000),而且设置分区会,如果分区的数据不是很多,那么就会有很多个小文件,好处就是找数据快,花费少。
2.在DW里面创建业务流程
①创建业务流程
DW是一体化的开发、测试、运维的大数据平台,一般通过DTS导入MC的数据,我们在我们的DW的数据地图的服务里面是可以看到我们导入进来的数据(同一个源表,会有对应生成两张表,一张base,一张log,根据表的存储量,就可以判断这张表里面有没有数据)
确定表已经导入进来后就可以做业务流程的创建了。
业务流程里面有几个选项,可以按照自己的喜好去创建流程,一般流程分为
我们使用的都是sql,像是Spark、py、MR等都是需要开发代码,但是sql的话只需要写sql 语句就可以,这个因人而异,最终的结果都是一样的 通过业务数据,经过你写的流程处理,把处理好的结果放到一张新的表里或者把新的表的结果同步给业务数据库那边。
这就是一个简单的业务流程,通过离线数据同步(类似DTS,只不过增量同步设置麻烦,如果自己的业务表没有创建日期和更新日期的话就没办法做增量同步,还是建议使用DTS,这里只是做测试)可以同步MySql的数据,再通过一个sql组件做中间的处理,因为这个sql是有时序性的,必须等我两个离线同步完成后才可以进行操作,但是使用DTS同步的可以忽略这里的离线同步。经过sql 的处理,把处理的结果插入到新的表里,在通过离线同步,吧MC里面的表同步到外面的业务数据库MySql里面。这就是一个简单业务的流程。
②测试
业务流程写完,我们得导入数据进行测试,看我们的计算结果对不对。
我们点击开始运行就可以了,如果中间有问题就会像我图中sql后面的红色叉号,代表这个流程的这个节点运行失败,这时候我们就得去查看运行日志,看一下是哪些问题导致的。,当运行成功后,我们要进行调度设置
设置我们每一个节点的调度时间和周期,设置好以后点击第一张图的提交到生产环境的提交按钮,然后点击我们左上角
选择运维中心,进入到我们的运维界面
3.运维
在运维中心,我们点击周期任务运维,就可以看到我们提交上来的任务实例,在这个里面我们可以做测试或者补数据的操作,测试,就是测试我们的流程是否运行正常,补数据,是补以往的数据,如果周期调度都正常的话,我们这个业务离线数仓就算搭建完成了,每天都会按照调度的时间进行调度,而我们每天只需要检查任务是否运行成功就可以。
4.总结
阿里云服务,用起来是挺省心,又方便,基本上不是大数据专业的人经过培训也是可以进行操作的,降低了大数据的门槛,但是这个也不是个性化的,个性化的MC部署要花钱,运算要花钱,查询也要花钱,维护更要花钱,但如果公司想省心的话还是阿里云的服务相对较好一些,如果换成本地的数仓,机器成本、人员成本、运维成本、还有一些不可抗力的风险之类的,对于小公司来说压力更大一些,但是使用了阿里云,基本上一个普通的开发人员经过培训就可以上岗(排除大数据建模建仓),运维都是阿里云这边要去做的,很多工具都是无缝衔接的,更有api和sdk,可以自己进行对接开发,工具就是那个工具,不要把工具当成生存的依靠,技术的成长,阅历的提高、丰富的经验才是人的财富~~~第一篇博客 就写这么多 零零散散 有很多没有介绍清楚的建议大家去官网看文档,虽然有些文档描述的不够准确,但是也是有参考依据的也可以加阿里云的交流群。以后介绍大数据的工具或者框架的话会更细致点....这篇主要是思路,写的不好~~欢迎大家多批评指正。