大多数情况下,我们完成的数据体系是依赖复杂、层级混乱的,因此,我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是谈到的数据分层。数据分层并不能解决所有的数据问题,但是,数据分层却可以给我们带来如下的好处:
- 清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
- 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
- 便于维护:当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
- 统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径
- 复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题
-
通常将数据模型分为三层:数据运营层( ODS )、数据仓库层(DW)和数据应用层(APP)。简单来讲,我们可以理解为:ODS层存放的是接入的原始数据,DW层是存放我们要重点设计的数据仓库中间层数据,APP是面向业务定制的应用数据。
-
源数据层(ODS)此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
-
数据仓库层(DW)也称为细节层,DW 层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
-
数据应用层(DA 或 APP)前端应用直接读取的数据源;根据报表、专题分析的需求而计算生成的数据。
数据仓库构建工具
Hive
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,将类 SQL 语句转换为 MapReduce 任务执行。
Hive是运行在Hadoop上的SQL接口。此外,它还降低了MapReduce框架的复杂性。Hive帮助企业在HDFS上执行大规模数据分析,使其成为一个水平可伸缩的数据库。它的SQL接口HiveQL使具有RDBMS背景的开发人员能够构建和开发性能、使拓展的数据仓库类型框架。
SparkSQL
首先,我们分析Hive缺陷也就是MapReduce:
- Map任务结束后,要写磁盘
- 一个MapReduce任务结束后,需要将中间结果持久化到HDFS
- DAG生成MapReduce任务时,会产生无谓的Map任务
- Hadoop在启动MapReduce任务要消耗5-10秒,需要多次启动MapReduce任务
SparkSQL在架构上和Hive类似,只是底层把MapReduce替换为Spark
除了替换底层执行引擎,SparkSQL还做了3个方面的优化
- 可以基于内存的列簇存储方案
- 对SQL语句提供基于代价优化
- 数据共同分片