此书下载传送门http://www.java1234.com/a/javabook/yun/2018/0308/10578.html
阿里巴巴大数据系统体系主要分为,数据采集、数据计算、数据服务和数据应用四大层次。
数据采集工具:web端、App端、H5
数据计算层:数据存储、云计算平台(离线计算平台、实时计算平台、数据整合管理体系ONE DATA)
数据服务层:以数据仓库整合计算好的数据作为数据源,对外通过接口的方式提供数据服务,主要提供简单数据查询服务,复杂数据查询服务和实时数据推送服务三大特色数据服务。
数据应用:如搜索、推荐、广告……
客户端数据上传时是向服务器发送POST请求,服务器端处理上传请求,对请求进行shudsucw,uqf数据追加到本地进行存储,存储方式使用Nginx的access_log, access_log的切分天,即当天日志当天的日志文件中。
对于一些技术日志可以使用采样的方式,如页面加载情况、消耗内存等
批量 文件导出,实时查询
实时 binlog解析通过my kafka传输
数据仓库的清洗采用非侵入式的清洗策略,在数据同步过程中不进行数据清洗,避免影响数据同步的效率。数据进入ODS层后,开始清洗,符合清洗数据清洗掉,并保存到DIRTY表
数据仓库系统使用crontab定时任务功能进行任务调度处理,缺点:
分为调度引擎(phoenix Engine)和执行引擎(Alisa)两个子系统。
数据时效性一般分为三种:
实时数据则需要在流式处理系统中完成。简单来说,流失处理技术是指业务系统每产生一条数据,就立即被采集并实时发送到流式任务中进行处理,不需要定时调度任务来处理数据。由于数据源是流式的,在数据具有上下文关系的情况下,数据到达时间的不确定性会导致实时处理的结果与离线处理会有一定的差异。
一般情况下,出于吞吐量及系统压力上的考虑。并不是新增一条记录就采集一次。而是基于数据大小限制,或者时间阈值限制,按批次对数据进行采集。对于采集到的数据,需要一个数据交换平台分发给下游, 比如kafka.
消息系统一般会用做业务数据库变更的消息中转,比如订单下单,支付等消息,对于其他较大的业务数据,一般会通过数据中间件系统买中转.虽然它的延迟在秒级,但是其支持的吞吐量高。
数据处理
Strom、S4、Spark
数据存储
流式数据模型
多流关联
在流式计算中常常需要把两个实时流进行主键关联,以得到对应的实时明细表。实时数据的到达是一个增量的过程,并且数据到达的时间是不确定和无序的,因此在数据处理过程中会涉及中间状态的保存和恢复机制等细节问题。
实时采集两张表的数据,每到来一条新数据是都在内存中的对方表截止当前的全量数据中查找,如果能查找到,则说明关联成功,直接输出,如果没查找到,则这把数据放在内存中的自己表数据集合中等待。另外,不管是否关联成功,内存中的数据都需要备份到外部存储系统中,在任务重启时,可以从外部存储系统中恢复内存数据。
在实际处理时考虑到查找数据的性能,实时关联这个步骤一般会把数据按照关联主键进行分桶处理,并且在故障恢复时也根据分桶来进行,以降低查找数据量和提高吞吐量。
dws 使用逻辑宽表做为防腐层
数据部门字段的变更相对于比较频繁,这种底层变更对应用层来说应该算是最糟糕的变更之一了,而逻辑表层的设计,很好的规避了这个痛点,只变更逻辑表中物理字段的映射关系,并且即刻生效,对调用方来说完全无感知。
逻辑表可以理解为数据库中的视图是一张虚拟表,也可以看作是由若干主键相同的物理表构成的大宽表。
日期为今天是展现的是实时数据,日期为昨天事展现的就是离线数据,其背后的复杂性在于。
Linux的创始人Torvalds有一段关于“什么才是优秀程序员”的话:“烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系。
DDD
选择维度或者新建维度,以淘宝商品维度为例,有且只允许有一个维度定义。
确定主维表
确定相关维表
确定维度属性
维度的层次结构
维度中的一些精连属性以层次方式成一对多的方式相互差联。比如陶宝商品维度,有卖家、类目、品牌制商品属于类目,类目属于行业,其中类目的最低级别是叶子类目,叶子类目属于二级类目,二级类目属子一级类目。
一致性维度和交叉探查
数据仓库总线架构的重要基石之一就是一致性维度。在针对不同数据域进行迭代构建或并行构建时,存在很多需求是对于不同数据域的业务过程或者同一数据域的不同业务过程合并在一起观察。比如对于日志数据域,统计了商品维度的最近一天的PV和UV;对于交易数据域,统计了商品维度的最近一天的下单GMV。现在将不同数据域的商品的事实合并在一起进行数据探查,如计算转化率等,称为交又探查。
递归层次
本节的递归层次指的是某维度的实例值的层次关系,比如淘宝类目体系。
维度的递归层次,按照层级是否固定分为均衡层次结构和非均衡层次结构对于数量级别不固定的递归层次,称为“非均衡层次结构”。
用户使用递归SQL的成本较高,所以在维度模型中,需要对此层次结构进行处理。
行为维度
在阿里巴巴的数据仓库中,存在很多维表,如卖家主营类目维度卖家主营品牌维度、用户常用地址维度等。其中卖家主营类目和主营牌通过卖家的商品分布和交易分布情况,采用算法计算得到:去家常月地址通过最近一段时间内物流中卖家的发货地址和买家的收货地址
行统计得到。类似的维度,都和事实相关,如交易、物流等,称之为
按照加工方式,行为维度可以划分为以下几种:
多值维度
对于多值维度,一种情况是事实表的一条记录在某维表中有多条记录与之对应。比如对于淘宝交易订单,买家一次购买了多种商品,如一件毛衣和两双袜子,称为交易父订单;对于每种商品的交易,称为交易子订单:此交易父订单有两个子订单与之对应。假设设计交易父订单事实表,则对于此事实表的每一条记录,在商品表中都有一到多条记录与之对应。
多值属性
维表中的某个属性字段同时有多个值,称之为“多值属性”。它是多值维度的另一种表现形式。在阿里巴巴的数据仓库中,存在很多维表,如商品SKU维表、商品属性维表、商品标签维表等。每个商品均有一到多个SKU、一到多个属性和一到多个标签,所以商品和SKU、属性、标制
签都是多对多的关系。
对于多值属性,常见的处理方式有三种,可以根据具体情况进行选择。
第一种处理方式是保持维度主键不变,将多值属性放在维度的一个属性字段中。json 格式
第二种处理方式也是保持维度主键不变,但将多值属性放在维度的多个属性字体中,扩展性较差
第三种处理方式是维度主键发生变化,一个维度值存放多条记录。数据膨胀严重
事实表中一条记录所表达的业务细节程度被称为粒度。通常粒度可以通过两种方式来表述:一种是维度属性组合所表示的细节程度:一种是所表示的具体业务含义。
事实表有三种类型:事务事实表、周期快照事实表和累积快照事实表,具体内容后面章节会详细介绍。事务事实表用来描述业务过程,跟踪空间或时间上某点的度量事件,保存的是最原子的数据.周期快照事实表以具有规律性的、可预见的时间间隔记录事实,时间间隔如每天、每月、每年等。累积快照事实表用来表述过程开始和结束之间的关键步骤事件,覆盖过程的整个生命周期,通常具有多个日期字段来记录关键时间点,比如交易开始、交易结束。
在淘宝交易过程中有四个重要业务过程,需要为每个业务过程确定一个粒度。其中下单、支付和成功完结三个业务过程选择交易子订单程度,即每个子订单为事务事实表的一行,每个子订
单所表达的细节信息为:交易时间、卖家、买家、商品。
解决使用事实表在大时间跨度下,效率变低的问题。
快照事实表中收集到的状态量都是半可加的。比如淘宝交易卖家快照事实表,每天的历史至今的下单金额进行汇总,也没有汇总意义。
用于考察实体的唯一实例,所以子订单在此表中只有一行记录,事件发生时,对此实例进行更新。
日志
HBO
HBO分配资源的步骤如下:
CBO
Volcano模型,不明白
Map倾斜
在Map端读数据时,由于读人数据的文件大小分布不均匀,因此会导致有些Map Instance读取并且处理的数据特别多,而有些Map Instance处理的数据特别少,造成Map端长尾。以下两种情况可能会导别致Map端长尾:
JOIN 倾斜
MaxCompute SQL在Join执行阶段会将Join Key相同的数据分发到同一个执行Instance上处理。如果某个Key上的数据量比较大,则会导致该Instance执行时间较长。其表现为在执行日志中该Join Task的大部分Instance都已执行完成,但少数几个Instance一直处于执行中(这种现象称之为长尾)。
因为数据倾斜导致长尾的现象比较普遍,严重影响任务的执行时间,尤其是在“双11”等大型活动期间,长尾程度比平时更严重。比如某些大型店铺的PV远远超过一般店铺的PV,当用浏览日志数据利用卖家维表关联时,会按照卖家ID进行分发,导致某些大卖家所在Instance处理的数据量远远超过其他Instance,而整个任务会因为这个长尾的Instance迟迟无法结束。
Reduce 倾斜
Reduce端产生长尾的主要原因就是key的数据分布不均匀。比如有些Reauce 在务instance理的数据记录多,有些处理的数据记录少,造成Reduce端长尾。如下几种情况会造成Reduce端长尾:
目前已有的存储治理优化项有未管理表、空表最近62天未访问表,近据无更新无任务表、数据无更新有任务表、开发库数据大于100GB且无访问表、长周期表等。
MaxCompute中的任何一个计算任务都会涉及计算和存储资源的消耗,其中计算资源的消耗主要考虑CPU消耗。为了下面更好地描述数据计量计费的算法和规则,特做如下定义:CPU消耗的单位定义为CU,代表CPU的一个核心(Core)运行一天的消耗量。存储资源的消耗主要考虑磁盘存储的消耗,这里采用国际通用的存储单位PB来衡量.例如:计算资源的单价为1元/CU,存储资源的单价为1元/P8天。
对数据成本的计量,可以采用最简单的方式,将一个数据表的成本分为存储成本和计算成本。存储成本是为了计量数据表消耗的存储资源,计算成本是为了计量数据计算过程中的CPU消耗。但是,对这样的数据成本计量方式会存在较大的质疑和挑战。例如,如图14.4所示,表D是业务方的一个数据表,表D依赖表C,但是为了产生表C,往往上面存在一个较长的数据剧新链路。表C的成本可能是10元,但是表A、B可能会是l00元。像这样的情况,如果表C的成本仅仅用数据表C自身的存储和计算成本衡量显然是不合理、不准确的。
在线业务复杂多变,总是在不断地变更,每一次变更都会带来数据的变化,数据仓库需要适应这多变的业务发展,工具和人员双管齐下。既要在工具上自动捕捉每一次业务的变化,同时也要求开发人员在意识上自动进行业务变更通知。
发布平台集成了通知功能,针对重要的场景发布会进行卡点,确认通知后才能完成发布。其次是数据库表的变化感知,无论是随着业务发展而做的数据库扩存还其表的DDL变化,都需要主动通知到离线开发人员。是可以的,灵活性比较大。
另外,摩萨德提供了甘特图的服务,针对业务的运行情况,摩萨德会提供一条关键路径,即完成业务的最慢任务链路图。因为每个业务上游可能有成千上万个任务,所以这条关键路径对于业务链路优化来说非常重要。