【阿里在线技术峰会】李金波:企业大数据平台仓库架构建设思路



原文地址:https://yq.aliyun.com/articles/57901?spm=5176.100239.blogcont57826.25.oaM83B

摘要: 在阿里巴巴在线在线技术峰会上的第三天,来自阿里云高级技术专家李金波为大家题为《企业大数据平台仓库架构建设思路》。本次分享中,李金波主要从总体思路、模型设计、数加架构、数据治理四个方面介绍了如何利用大数据平台的特性,构建更贴合大数据应用的数据仓库。

本文根据阿里云高级技术专家李金波在首届阿里巴巴在线峰会的《企业大数据平台仓库架构建设思路》的分享整理而成。随着互联网规模不断的扩大,数据也在爆炸式地增长,各种结构化、半结构化、非结构化数据的产生,越来越多的企业开始在大数据平台下进行数据处理。分享中,李金波主要从总体思路、模型设计、数加架构、数据治理四个方面介绍了如何利用大数据平台的特性,构建更贴合大数据应用的数据仓库。


总体思路

随着互联网规模不断的扩大,数据也在爆炸式地增长,各种结构化、半结构化、非结构化数据不断地产生。新环境下的数据应用呈现业务变化快、数据来源多、系统耦合多、应用深度深等特征。那么基于这些特征,该如何构建数据仓库呢?我认为应该从稳定、可信、丰富、透明四个关键词入手。其中,稳定要求数据的产出稳定、有保障;可信意味着数据的质量要足够高;丰富是指数据涵盖的业务面要足够丰富;透明要求数据构成流程体系是透明,让用户放心使用。

我们之所以选择基于大数据平台构建数据仓库,是由大数据平台丰富的特征决定的:

  • 强大的计算和存储能力,使得更扁平化的数据流程设计成为可能,简化计算过程;

  • 多样的编程接口和框架,丰富了数据加工的手段;

  • 丰富的数据采集通道,能够实现非结构化数据和半结构化数据的采集;

  • 各种安全和管理措施,保障了平台的可用性。

    仓库架构设计原则包括四点:第一自下而上结合自上而下的方式,保障数据搜集的全面性;第二高容错性,随着系统耦合度的增加,任何一个系统出现问题都会对数仓服务产生影响,因此在数仓构建时,高容错性是必不可少的因素;第三数据质量监控需要贯穿整个数据流程,毫不夸张地说,数据质量监控消耗的资源可以等同于数据仓库构建的资源;第四无需担心数据冗余,充分利用存储换易用。

     

    模型设计

    构建数仓的首要步骤就是进行模型设计。

    维度莫建模或实体关系建模

    常见的模型设计思路包括维度建模和实体关系建模。维度建模实施简单,便于实时数据分析,适用于业务分析报表和BI;实体关系建模结构较复杂,但它便于主体数据打通,适合复杂数据内容的深度挖掘。

    每个企业在构建自己数仓时,应该根据业务形态和需求场景选择合适的建模方式。对于应用复杂性企业,可以采用多种建模结合的方式,例如在基础层采用维度建模的方式,让维度更加清晰;中间层采用实体关系建模方式,使得中间层更容易被上层应用使用。

    星型模型和雪花模型

     

    除了建模方式之外,在星型模型和雪花模型的选择上也有可能让使用者左右为难。事实上,两种模型是并存的,星型是雪花模型的一种。理论上真实数据的模型都是雪花模型;实际数据仓库中两种模型是并存的。

    由于星型模型相对结构简单,我们可以在数据中间层利用数据冗余将雪花模型转换成星型模型,从而有利于数据应用和减少计算资源消耗。

    数据分层

    在确定建模思路和模型类型之后,下一步的工作是数据分层。数据分层可以使得数据构建体系更加清晰,便于数据使用者快速对数据进行定位;同时数据分层也可以简化数据加工处理流程,降低计算复杂度。

    我们常用的数据仓库的数据分层通常分为集市层、中间层、基础数据层上下三层结构。由传统的多层结构减少到上下三层结构的目的是为了压缩整体数据处理流程的长度,同时扁平化的数据处理流程有助于数据质量控制和数据运维。

    在上下三层的结构的右侧,我们增加了流式数据,将其添加成数据体系的一部分。这是因为当前的数据应用方向会越来越关注数据的时效性,越实时的数据价值度越高

    但是,由于流式数据集的采集、加工和管理的成本较高,一般都会按照需求驱动的方式建设;此外,考虑到成本因素,流式数据体系的结构更加扁平化,通常不会设计中间层。

    下面来具体看下每一层的具体作用。

    数据基础层

    数据基础层主要完成的工作包括以下几点:

  • 数据采集:把不同数据源的数据统一采集到一个平台上;

  • 数据清洗,清洗不符合质量要求的数据,避免脏数据参与后续数据计算;

  • 数据归类,建立数据目录,在基础层一般按照来源系统和业务域进行分类;

  • 数据结构化,对于半结构化和非结构化的数据,进行结构化;

  • 数据规范化,包括规范维度标识、统一计量单位等规范化操作。

    数据中间层

    数据中间层最为重要的目标就是把同一实体不同来源的数据打通起来,这是因为当前业务形态下,同一实体的数据可能分散在不同的系统和来源,且这些数据对同一实体的标识符可能不同。此外,数据中间层还可以从行为中抽象关系。从行为中抽象出来的基础关系,会是未来上层应用一个很重要的数据依赖。例如抽象出的兴趣、偏好、习惯等关系数据是推荐、个性化的基础生产资料。

    在中间层,为了保证主题的完整性或提高数据的易用性,经常会进行适当的数据冗余。比如某一实事数据和两个主题相关但自身又没有成为独立主题,则会放在两个主题库中;为了提高单数据表的复用性和减少计算关联,通常会在事实表中冗余部分维度信息。

    数据集市层

    数据集市层是上下三层架构的最上层,通常是由需求场景驱动建设的,并且各集市间垂直构造。在数据集市层,我们可以深度挖掘数据价值。值得注意的是,数据集市层需要能够快速试错。

     

    数据架构

    数据架构包括数据整合、数据体系、数据服务三部分。其中,数据整合又可以分为结构化、半结构化、非结构化三类。

    数据整合

    结构化数据采集又可细分为全量采集、增量采集、实时采集三类。三种采集方式的各自特点和适应场合如上图所示,其中全量采集的方式最为简单;实时采集的采集质量最难控制。

    在传统的架构中,日志的结构化处理是放在数仓体系之外的在大数据平台仓库架构中,日志在采集到平台之前不做结构化处理;在大数据平台上按行符分割每条日志,整条日志存储在一个数据表字段;后续,通过UDFMR计算框架实现日志结构化。

    在我们看来,日志结构越规范,解析成本越低。在日志结构化的过程中,并不一定需要完全平铺数据内容,只需结构化出重要常用字段;同时,为了保障扩展性,我们可以利用数据冗余保存原始符合字段(如useragent字段)。

    非结构化的数据需要结构化才能使用。非结构化数据特征提取包括语音转文本、图片识别、自然语言处理、图片达标、视频识别等方式。尽管目前数仓架构体系中并不包含非结构化数据特征提取操作,但在未来,这将成为可能。

    数据服务化

    数据服务化包括统计服务、分析服务和标签服务:

  • 统计服务主要是偏传统的报表服务,利用大数据平台将数据加工后的结果放入关系型数据库中,供前端的报表系统或业务系统查询;

  • 分析服务用来提供明细的事实数据,利用大数据平台的实时计算能力,允许操作人员自主灵活的进行各种维度的交叉组合查询。分析服务的能力类似于传统cube提供的内容,但是在大数据平台下不需要预先建好cube,更灵活、更节省成本;

  • 标签服务,大数据的应用场景下,经常会对主体进行特征刻画,比如客户的消费能力、兴趣习惯、物理特征等等,这些数据通过打标签转换成KV的数据服务,用于前端应用查询。

    架构设计中一些实用的点

    在架构设计中有一些实用的点,这里给大家分享一下:

    第一,通过巧用虚拟节点实现多系统数据源同步,实现跨系统间的数据传输,实现多应用间数据交互。通过巧用虚拟节点减少运维人员在实际出现问题时的运维成本。

    第二,采用强制分区,在所有的表都上都加上时间分区。通过分区,保证每个任务都能够独立重跑,而不产生数据质量问题,降低了数据修复成本;此外通过分区裁剪,还可以降低计算成本。

    第三,应用计算框架完成日志结构化、同类数据计算过程等操作,减轻了开发人员的负担,同时更容易维护。

    第四,优化关键路径。优化关键路径中耗时最长的任务是最有效的保障数据产出时间的手段。

     

    数据治理

    数据治理不是独立于系统之外的保障,它应该贯穿在数仓架构内部和数据处理的流程之中。

    数据质量

    保障数据质量,可以从事前、事中、事后入手。事前,我们可以通过制定每份数据的数据质量监控规则,越重要的数据对应的监控规则应该越多;事中,通过监控和影响数据生产过程,对不符合质量要求的数据进行干预,使其不影响下流数据的质量;事后,通过对数据质量情况进行分析和打分,将一些不足和改进反馈数据监控体系,推动整体的数据质量提升。

    数据生命周期管理

    出于成本等因素的考虑,在大数据平台上我们依然需要对数据生命周期进行管理。根据使用频率将数据分为冰、冷、温、热四类。一个合理的数据生命周期管理要保证温热数据占整个数据体系大部分;同时为了保障数据资产的完整性,对于重要的基础数据会长久保留。

    对于数据中间计算过程数据,在保障满足绝大部分应用访问历史数据需要的前提下,缩短数据保留周期,有助于降低存储成本;最后一点值得注意的是,冷备已经成为历史,在大数据平台下不需要单独的冷备设备。


    关于分享嘉宾:

    李金波,阿里云高级技术专家,8年以上互联网数据仓库经历,对系统架构、数据架构拥有丰富的实战经验,曾经数据魔方、淘宝指数的数据架构设计专家。现任阿里云大数据数仓解决方案总架构师。

     

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

linux教程——1.启动过程 - 2016-07-23 17:07:29

Linux  系统启动过程 linux启动时我们会看到许多启动信息。 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导。 运行init。 系统初始化。 建立终端 。 用户登录系统。 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。 运行init init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都
用一种分布式处理方法 挖掘分布式系统检测到的事件联系   点击下载演示文档 abstract: 现在,对监控、分析和控制大规模分布式系统的需求越来越高涨。监控下的事件往往呈现出相关联的关系,这对资源分配、工作调度还有故障预测有很大帮助。为了发现在检测到的事件中的联系,很多已有的方法是把被检测事件放到数据库中并对其进行数据挖掘。但是我们认为这些方法并不适合大规模分布式系统,因为监控事件的数据量增长得非常快以至于很难用一台计算机的力量来进行事件之间联系的发现。在本文中,我们提出了一种分布式的方法有效地检测事件

OSGI中Declarative Services的运用 - 2016-07-23 14:07:48

OSGI中Declarative Services的运用 前言 Declarative Services,即所谓的声明式服务,我在前文中曾经提及到注册式服务与声明式服务,但是在前文中并没有提及怎么使用声明式服务,只是简单的说了下概念和相对于blueprint来说有哪些优缺点,总而言之,可谓是一笔带过,这几日想起这个,还是决定需要仔细的讲一下声明式服务。 简介 Declarative Services,这是在OSGi 4以后的规范中出现的,在这里引用一段其他人说的话,Declarative Services
        我们都希望,配置文件是从一个服务引出,然后客户端监听服务端变化,实时重启自身加载最新配置,这样,我们就不用维护每个独立的客户端配置,更新也变得非常简单,而flume,显然意识到了这一个巨大的实惠,他是支持配置文件交由zookeeper维护的,这样我们在修改配置时,flume会自动重新加载。 1,zookeeper 添加节点         我们利用博客《 使用zkweb维护zookeeper数据 》中介绍的软件,编辑某一个随意路径,用于盛放我们的配置,路径如下: 2,flume 配置zk端
Spring MVC + mybatis实现的注册登录 前期准备:            如下图所示,准备好所需要的包, 新建工程,导入所需要的包,在web.xml中配置好所需要的,如下, ?xml version="1.0" encoding="UTF-8"?web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance http://ww
工欲善其事,必先利其器。对于程序员来说,Eclipse便是其中的一个“器”。本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍。Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分了你的神。而掌握了Eclipse的一些实用技巧,则可以大大提高开发效率。 1、丢掉鼠标吧之Eclipse快捷键篇 1.1文件切换的三种方式 1.1.1  Ctrl + E,在右边显示出当前打开的所有文件 1.1.2 Ctrl + Pg Up ,Ctrl + Pg Dn ,逐个文件跳跃 按下Ctrl + Pg
前言 想必HDFS集群的起停操作对于HDFS的使用者来说绝对不是一件陌生的事情.一般情况下我们重启集群服务是出于这2点原因:1).集群新增配置项,需要重启集群服务才能生效.2).对集群相关jar包程序进行了更新,需要重启服务来运行最新的jar包.于是我们重启了集群,一般的我们看它是否启动成功,一定会关注它的输出日志.比如说在HDFS中,我们会比较关注NameNode的启动日志.当然这的确是一个有效的办法,但是我们是否有其他更方便快捷的方法呢?比如说我不想登到NameNode所在节点上去看日志.最后的答案是
1、前言 进入 云计算 的时代,各大云提供商AWS, 阿里云 纷纷推出针对 Docker 的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下。 2、Docker是什麽 Docker是一个开源的应用容器引擎,可以把应用以及依赖包放到一个可移植的容器中,然后发布到任何流行的  Linux  系统上,通过这种方式实现虚拟化。 提到虚拟化,大家应该十分熟悉了,有 VMware ,Xen, KVM 等等很多。那么,Docker和VM有什么不同呢,我们用官网的一张图来说明一下。 可以看出

MAT使用的几张图例技巧 - 2016-07-23 14:07:57

1 下面三个是内存泄漏可能性比较大的地方  problem suspect 1 problem suspect 2 点击detail 可以看详细  如果发现里面有自己工程包里面的重复的大量对象的创建 2 在dominator_tree 可以对象按照 group by package 分类 便于查看那部分代码出问题 如果自己的工程包下面占用了大量内存 可能就是问题所在 问题一般可能出在 占用最多的地方 3  选中一个节点 右键查看with incoming reference 可以看  ps :( List
重点发掘自己每天是否有学到或者感受到新东西,一旦可以感知这些细节,那么心态就会平和、也更容易坚持下来,自然而然就可以等到突破瓶颈的时候。 时间是一个很公平的东西,去体验不同的岗位去寻找自己真正想做的,是一个不错的思路。最怕的是目的性不明确的变化。 事实上那怕我们专注于一个领域,在某些时候还要跳出这个领域,开眼界后再回归方能更上一层楼。 ——祝晓春 手工测试二三事   @ 安琪儿的梦 o_0   提问:一直做手工测试会不会没有前 途 ? 任何一个工作和岗位都会有前途的,但是并不是每个人都会达到很大的高度。关