原专栏地址:https://blog.csdn.net/column/details/hadoop-dw.html?&page=2
概述
数据仓库是一个面向主题的、集成的、随时间变化的、非易失的数据集合,用于支持决策。它主要的目标是分析和处理数据,和传统的操作型事务处理有很大区别。
之所以不直接在操作型系统上执行分析查询,而是从操作型系统抽取数据,最主要有以下两个原因:(1)在操作型系统上直接执行分析查询会使业务系统受到影响,很可能使其变慢甚至宕机。(2)在操作型系统中很可能查不到分析所需要的数据。出于性能的考虑,操作型系统一般都不会保留很长的历史记录,而只是保留近期活跃的数据,但数据仓库中理论上应该保留所有决策需要的数据,即除了活跃数据外,还应该包含大量的历史归档数据。
数据仓库主要有规范化数据模型、多维数据模型、Data Vault数据模型等建模方法,其中前两种使用最为广泛。规范化模型用于企业级数据仓库(EDW)建模,而多维模型多用于数据集市建模。规范化模型对于数据库设计者来说非常熟悉,其核心思想就是消除数据冗余以保证数据一致性和事务处理的性能。通常业务数据库、OLTP系统都采用规范化模型,其中常见的有1NF、2NF和3NF。简单地说,1NF就是消除重复元组,并保持列的原子性,具体到数据库设计上就是每个表都要有一个主键来唯一标识一行记录。2NF就是在1NF的基础上消除了部分依赖,即非键属性必须完全依赖于主键。3NF在2NF基础上消除了传递依赖,即非键属性只能完全依赖于主键。一般数据库设计需要满足3NF。而对于多维模型最简单的描述是,按照事实表、维度表来构建数据仓库或数据集市,这种模型被人们熟知的有星型和雪花型。
Hadoop MapReduce的实现分为split、map、shuffle和reduce四步:
- HDFS分布数据。
- 向YARN请求资源以建立mapper实例。
- 在可用的节点上建立mapper实例。
- 对mappers的输出进行混洗,确保一个键对应的所有值都分配给相同的reducer。
- 向YARN请求资源以建立reducer实例。
- 在可用的节点上建立reducer实例。
环境搭建
使用Hive作为多维数据仓库的主要挑战是处理渐变维(SCD)和生成代理键。处理渐变维需要配置Hive支持行级更新,并在建表时选择适当的文件格式。生成代理键在关系数据库中一般都是用自增列或序列对象,但Hive中没有这样的机制,得用其它办法实现,在后面ETL部分再详细讨论。