数据仓库流程&架构(一)

来源:互联网 发布:巴氏刷牙法 知乎 编辑:程序博客网 时间:2024/05/16 04:25

数据仓库流程&架构(一)

定义

数据仓库是逻辑上的概念,是一个数据集合。

数据仓库中的数据有这两个特点:
- 最全的历史数据(海量);
- 相对稳定的:不同于业务系统数据库,数据经常会被更新。数据一旦进入数 据仓库,很少会被更新和删除,只会被大量查询。

数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持。其实数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。

流程

数据仓库的基本流程主要是数据流入流出的过程。可分为四个主要步骤。

这里写图片描述####数据源采集
此过程的目的是将数据从不同数据源采集并存储下来。接入的大部分是未做处理的明细数据。数据源多种多样,要针对不同的数据源采取不同的采集方式。有时候可做简单清洗和过滤。常见的数据源有:业务日志、关系型数据库(如Mysql)、上游直接提供的HTTP/FTP/文本……

    关于业务日志采集这里多说一句,常用的方式是使用Flume实时抽取业务机器的数据到Kafka机器,再通过Flume将Kafka数据抽取到HDFS。那么问题来了,为什么不直接通过Flume抽取业务机器的日志到HDFS呢?因为将数据存储到HDFS,只是为了进行离线数据计算,Kafka是消息队列,可支持其他业务(如实时计算)的数据获取。

数据计算&存储

关于存储,目前最优的选择就是HDFS。
数据计算分为离线计算实时计算
- 实时计算
实时计算正打算像同事了解学习,后续会补上。

  • 离线计算
    离线的数据计算,对实时性要求不高。目的是对海量的、繁杂的明细数据进行过滤、转换、分类、聚合等,使得数据变得更加规范、面向主题。常用的离线数据处理的工具和方法有:编写MapReduce任务(java)、Hive、SparkSQL等。

    1、写MR做分析和计算,个人来讲学习成本相对较高、代码复杂,不过在解析日志等处理上,Java本身的优势就会体现出来,相比较而言速度更快一些。2、Hive相当于为Hadoop提供了SQL接口,可以将SQL转换为MapReduce任务并执行。往往对于一些需求,Java需要几十行代码,而一个SQL即可搞定。并且SQL学习起来更加容易。3、SparkSQL由于没有实际操作过,这里就不多说。不过据说是基于内存计算,性能要比MapReduce好很多,感兴趣的同学可以了解下,我自己近期也准备接触一下。

    离线计算的结果一般保存在HDFS中,通过Hive即可随时查询。也有一部分会将结果写入关系型数据库,用来支持业务应用。

数据共享

前面提到,仓库数据计算的结果最终是存储在HDFS上。但是大部分业务都不支持直接从HDFS上获取数据,因此需要将最终的计算结果重新存储到业务方可读取的地方——关系型数据库或者NoSQL。
- Apache Kylin :Apache开源的分布式分析引擎。其操作流程为:开发人员在仓库中设计出事实表(基础数据的提供者,一般存明细数据)& 维度表,然后根据业务需求在Kylin建立Model与Cube,Kylin会根据Cube提前计算好多维度的结果存入HBase,所以在查询的时候会很快的跑出结果(空间换时间)。
- 业务数据:转换、处理好的数据有的时候会写入关系型数据库,供业务直接使用。如电商用户查看自己近一个月成交量。
- 机器学习:由于对机器学习这方面是小白,在这里不敢乱讲。后续学习了之后会补上。

数据应用

  • 报表
    报表几乎是是数据仓库必不可少的一部分,数据通过计算、聚合等操作,简单直观的展示出来。
  • 业务产品
    一些用到存在关系型数据库数据的产品。
  • OLAP多维分析
    目前正在使用的Kylin是不错的选择。
  • AD-HOC
    即席查询平台是数据部门不可缺少的工具之一,主要优点是灵活、快捷。
    即席查询有很多解决方案,例如Spark SQL、Presto、Impala等。目前笔者正在调研一种适合公司的解决方案,后续也会将结果贴出来。一句话,没有最好,只有适合。

总结

没有总结。总之希望自己继续学习,继续积累。