数据仓库
-
数据仓库是一个 面向主题的、集成的、随时间变化的、非易失的数据集合,用于支撑管理者的决策过程。
-
数据仓库中的粒度是指数据的细节或汇总成度。细节程度越高,粒度级别越低
-
数据仓库的数据来自各个业务应用系统
-
很多因素导致直接访问业务无法进行全局数据分析的工作,这也是需要一个数据仓库的原因所在
-
操作系统是一类专门用于管理面向十五的应用信息系统,而分析型系统是一种快速回答多维分析查询的实现方式,两者在很多方面存在差异
-
构成数据仓库系统的主要组成部分有数据源、ODS、中心数据仓库、分析查询引擎、ETL、元数据管理和自动化调度
-
主要的数据仓库架构有独立数据集市、从属数据集市、Inmon企业信息工厂、Kimball多维数据仓库、混合型数据仓库
-
ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)是建立数据仓库最重要的处理过程,也是最体现工作量的环节
-
Kettle是常用的开源ETL工具
-
数据仓库的基本需求是安全性、可访问性、自动化,对数据的要求是准确性、时效性、历史可追溯性。
##数据仓库设计基础
- 关系模型、多维模型和Data Vault模型是常见的数据仓库模型
- 数据结构、完整约束和SQL语言是关系型的三要素
- 规范化是通过应用范式规则实现的。第一范式(1NF)要求保持数据的原子性、第二范式(2NF)消除了部分依赖性、第三范式(3NF)消除了传递依赖。关系模型的数据仓库一般要求满足3NF
- 事实、维度、粒度是维度模型的三个核心概念
- 维度模型的四部设计法是选择业务流程、声明粒度、确定维度、确定事实
- 星型模式和雪花模式是维度模型的两种逻辑表示。对星型模式进一步规范化,就形成了雪花模式
- Data Vault模型有中心表(Hub)、链接表(Link)、附属表(Satellite)三个主要组成部分。中心表记录业务主键,链接表记录业务关系,附属表记录业务描述
- Data Vault 不区分数据在业务层面的正确与错误,它保留操作系统的所有时间的所有数据,装载数据时不做数据验证、清洗工作
- 数据集市是部门级的、面向单一主题域的数据仓库
- 数据集市的复杂度和需要处理的数据都小于数据仓库,因此更容易建立与维护
- 实施一个数据仓库项目的主要步骤是:定义范围、确认需求、逻辑设计、物理 设计、装置数据、访问数据、管理维护
Hadoop生态圈与数据仓库
-
现在普遍认可的大数据是具有4V,即Volume、Velocity、Variety、Veracity特征的数据集合,用于中文简单描述就是大、快、多、真。
-
Hadoop是一个分布式系统基础架构,它包括四个基本模块:(1)Hadoop基础功能库,支持其他Hadoop模块的通用程序包。(2)HDFS,一个分布式文件系统,能够以高吞吐量访问应用的数据。(3)YARN,一个作业调度和资源管理框架。(4)Map Reduce。一个基于YARN的大数据并行处理程序。
-
Spark是另一个流行的分布式计算框架,其基本数据结果是RDD,它提供一种分布式共享内存的受限形式。可以利用RDD方便的实现迭代算法,相对于Map Reduce的实现,Spark应用的延迟可以降低几个数量级。Spark RDD API支持的语言包括Java、Python、Scala和R
-
CAP理论指的是任何一个分布式计算系统都不能同时保证数据一致性、可用性和分区容错性。这也是传统关系型数据库难以扩展的根本原因。
-
Hadoop生态圈中众多工具提供的功能,完全可以满足创建传统数据仓库的需要。使用Hadoop建立数据仓库不仅是必要的,而且是充分的。
Hadoop的安装
- 除了开源的Apache Hadoop以外,还有Cloudera、HortonWorks、MapR三个主流的商业Hadoop发行版本。CDH的优点在于提供了包含大量工具和特性的用户友好界面,缺点是性能不够友好,速度较慢。HDP的优势在于他是唯一支持Windows平台的Hadoop版本,劣势是它的Ambari管理界面过于简单,没有提供丰富的特性。MapR Hadoop优点是速度快,没有单点故障,缺点是没有友好的用户界面控制台。
- 手工安装Apache Hadoop的主要步骤包括:准备集群节点主机,安装Linux操作系统,配置好IP、主机名,做好集群角色(master、slave)规划;建立运行Hadoop集 群的Linux用户;在hosts中添加域名解析;安装兼容版本的JDK;配置SSH免密码;编辑主要的Hadoop配置文件,设置参数;设置环境变量;HDFS初始化;启动HDFS和 YARN。
- 为了解决Name Node的单点问题和扩展的局限性,在Hadoop-0.23.0版本新增了HDFS Federation功能。Federation使用了多个独立的Name Node及命名空间,这些Name Node之间是彼此分离的。也就是说,他们之间相互独立且不需要互相协调,各自分工,管理自己的区域。
- 使用Cloudera Manager,能够图形化安装和部署CDH,极大简化了集权的管理和维护工作。有三种方式安装CDH:通过Cloudera Manager自动安装;使用Cloudera Manager Parcels或Packages安装;使用Cloudera Manager Tarballs手工安装。
Kettle与Hadoop
- 通过提交适当的参数,kettle可以连接Hadoop的HDFS、Map Reduce、Zookeeper、Oozie和Spark服务
- kettle的数据库连接类型中支持Hive、Hive2和impala
- 可以使用Kettle导出导入Hadoop集群中(HDSF、Hive等)的数据
- Kettle支持执行Hive的HQL语句
- 可以使用 ”Pentaho Map Reduce“ 作业项目在Hadoop中执行基于Map Reduce的Kettle转换
- Kettle支持向Spark集群提交作业
建立数据仓库实例模型
- Hive常用的四种文件格式为 TEXT FILE 、SEQUENCE FILE、RCF ILE、ORC FILE,其中只有ORC FILE支持事物和行级更新,因此是多维数据仓库Hive存储类型的唯一选择
- 配置Hive支持事物需要在hive-site.xml文件中增加相关属性,还要向3个Hive元数据表预先插入数据
- Hive中的表分为管理表和外部表,两者都可以进行分区
- load与load overwrite语句用来向Hive表装载数据,前者朱家,后者覆盖
- 分区表比非分区表多了一种alter table……add partition的数据装载方式
- 对于外部表,除了在删除表是只删除元数据而保留表数据目录外,其数据装载行为与内部表相同
- Hive还不支持SQL的过程化语言编程,因此编写shell脚本预装载日期维度表数据
数据抽取
-
建立一个有效的逻辑数据映射是实现ETL系统的基础
-
从源抽取数据导入数据仓库有两种方式,可以从源把数据抓出来,也可以请求源把数据发送到数据仓库
-
时间戳、触发器、快照表、日志是常用的四种变化数据捕获方法
-
以文本文件的形式交换数据是一种可行的通用方法。有多种叫数据导出成文本的方式,其性能差别很大
-
分布式查询可以建立不同的数据库系统之间的联系,并可作为数据集成的重要工具之一
-
Sqoop是一个在Hadoop与结构化数据存储(如关系型数据库)之间高效传输大批量数据的工具,支持全量和增量抽取
数据转换与装载
-
数据清洗是转换过程的一个重要步骤。它是对数据进行重新审查校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性
-
Hive是Hadoop生态圈的数据仓库软件,使用类似于SQL的语言读、写、管理分布式存储上的大数据集
-
HiveServer2提供基于Thrift的Hive服务和一个Jetty Web服务器,基于Thrift的Hive服务是HS2的核心
-
Hive通过Thrift提供hive元数据存储服务
-
Beeline是为与HiveService2服务器进行交互而开发的新命令行工具。Hive 建议使用新的Beeline 代替老版本的Hive CLI客户端
-
使用row_number()窗口函数或者使用一个名为UDFRowSequence的用户自定义函数可以生成代理键
-
用Sqoop和HQL能够实现多维数据仓库的初始装载和定期装载
-
通过适当地配置相关属性,可以有效优化Hive查询
定期自动执行ETL作业
-
cron服务是Linux下用来周期性的执行某种任务或处理某些事件的系统服务,默认安装并启动
-
通过crontab命令可以创建、编辑、显示或删除crontabwenjian
-
crontab为你教案有固定格式,其内容定义了要执行的操作,可以是系统命令,也可以是用户自己编写的脚步闻文件
-
crontab执行要注意环境变量的设置
-
Oozie是一个管理Hadoop作业、可伸缩、可扩展、可靠的工作流调度,他内部定义了三种作业:工作流作业、协调器作业和Bundle作业
-
Oozie的工作流定义中包含控制节点和动作节点。控制节点控制着工作流的开始、结束和作业的执行路径,动作节点出发计算或处理任务的执行
-
Oozie的协调作业能够在满足谓词条件时触发工作流作业的执行,现在的谓词条件可以定义为数据可用、时间或外部事件
-
配置协调器作业的时间触发条件时,一定要注意进行时区的换算
-
通过适当配置Oozie的动作属性值,可以提高工作流的执行效率
##维度表技术
- 给ORC存储格式的表增加列时,不能直接使用alter table语句,只有通过新建表并重新组织数据的方式才能正常执行。
- 修改数据仓库模式时,要注意空值的处理,必要时使用<=>符号代替等号
- 子维度通常有包含属性子集的子维度和包含行子集的子维度两种。常用视图实现子维度
- 单个物理维度可以被事实表多次引用,每个引用连接逻辑上存在差异的角色扮演维度。视图和表别名是实现角色扮演维度的两种常用方法
- 处理层次维度时,经常使用grouping__id、rollup、collect_set、concat_ws等函数。Hive也可以处理递归树的平面化、树的展开、递归查询等问题
- 除了业务主键外没有其他内容的维度表通常是退化维度。将业务主键作为一个属性加入到事实表中是处理退化维度的适当方式
- 杂项维度就是一种包含的数据具有很少可能值的维度。有时与其为每个标志或属性定义不同的维度,不如建立单独的将不同维度合并到一起的杂项维度
- 如果几个相关维度的基数都很小,或者具有多个公共属性时,可以考虑将它们进行维度合并
- 分段维度的定义中包含连续的分段度量值,通常用作客户维度的行为标记时间序列,分析客户行为
##事实表技术
- 事务事实表、周期快照事实表和累积快照事实表是多维数据仓库中常见的三种事实表。定期历史数据可以通过周期快照获取,细节数据被保存到事务粒度事实表 中,而对于具有多个定义良好里程碑的处理工作流,则可以使用累积快照
- 无事实的事实表是没有任何度量的事实表,它本质上是一组维度的交集。用这种事实表记录相关维度之间存在多对多关系,但是关系上没有数字或者文本的事 实。无事实的事实表为数据仓库设计提供了更多的灵活性
- 迟到的事实指的是到达ETL系统的时间晚于事务发生时间的度量数据。必须对标准的ETL过程进行特殊修改以处理迟到的事实。需要确定事务发生时间点的有效 的维度代理键,还要调整后续事实行中的所有半可加度量。此外,迟到的事实可能还会引起周期快照事实表的数据更新
- 累积度量指的是聚合从序列内第一个元素到当前元素的数据。累积度量是半可加的,因此对累积度量执行聚合计算时要格外注意分组的维度
联机分析处理
- 联机分析处理系统从数据仓库中的集成数据出发,构建面向分析的多维数据模型,再使用多维分析方法从多个不同的视角对多维数据集合进行分析比较,分析活 动以数据驱动
- 联机分析处理通常分为MOLAP、ROLAP、HOLAP三种类型
- Hadoop上的SQL解决方案主要有Hive、SparkSQL、Impala等,其中Impala由于性能优势,比较适合做联机分析处理
- 当前的Impala还存在很多局限,在使用时要格外注意:不支持update、delete操作;不支持Date类型;不支持XML和JSON相关函数;不支持covar_pop、 covar_samp、corr、percentile、percentile_approx、histogram_numeric、collect_set等聚合函数;不支持rollup、cube、grouping set等操作;不支持数据抽样(Sampling)等
- Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及OLAP多维分析能力,以支持超大规模数据。它最初由eBay中国团队开发,并成为 首个完全由中国团队设计开发的Apache顶级项目
- Apache Kylin的安装部署要注意各个组件之间的版本兼容性问题
数据可视化
- Zeppelin和Hue是Hadoop中两种常用的数据可视化组件。
- Zeppelin支持的后端数据查询程序较多,原生支持Spark。而Hue默认只支持Hive、Impala、Pig数据查询。
- Zeppelin只提供了单一的数据处理功能,而Hue除了类似的数据处理,还有元数据管理、Oozie工作流管理、作业管理、用户管理、Sqoop集成等很多管理功能。
- Zeppelin采用插件式的翻译器,通过插件,可以添加任何后端语言及其数据处理程序。
- 通过配置,Hue可以支持关系数据库查询。
- 在Hue中可以交互式定义Oozie工作流。
thrift
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。