1.数据仓库的基本概念
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库的目标是构建面向剖析的集成化数据环境,为企业提供决策反对(Decision Support)。它出于剖析性报告和决策反对目标而创立。
数据仓库自身并不“生产”任何数据,同大数据培训时本身也不须要“生产”任何的数据,数据来源于内部,并且凋谢给内部利用,这也是为什么叫“仓库”,而不叫“工厂”的起因。
2.数据仓库的次要特色
数据仓库是面向主题的(Subject-Oriented )、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )数据汇合,用以反对管理决策。
2.1.面向主题
传统数据库中,最大的特点是面向利用进行数据的组织,各个业务零碎可能是互相拆散的。而数据仓库则是面向主题的。主题是一个形象的概念,是较高层次上企业信息系统中的数据综合、归类并进行剖析利用的形象。在逻辑意义上,它是对应企业中某一宏观剖析畛域所波及的剖析对象。
操作型解决(传统数据)对数据的划分并不适用于决策分析。而基于主题组织的数据则不同,它们被划分为各自独立的畛域,每个畛域有各自的逻辑外延但互不穿插,在抽象层次上对数据进行残缺、统一和精确的形容。一些主题相干的数据通常散布在多个操作型零碎中。
2.2. 集成性
通过对扩散、独立、异构的数据库数据进行抽取、清理、转换和汇总便失去了数据仓库的数据,这样保障了数据仓库内的数据对于整个企业的一致性。
数据仓库中的综合数据不能从原有的数据库系统间接失去。因而在数据进入数据仓库之前,必然要通过对立与综合,这一步是数据仓库建设中最要害、最简单的一步,所要实现的工作有:
(1)要对立源数据中所有矛盾之处,如字段的同名异义、异名同义、单位不对立、字长不统一,等等。
(2)进行数据综合和计算。数据仓库中的数据综合工作能够在从原有数据库抽取数据时生成,但许多是在数据仓库外部生成的,即进入数据仓库当前进行综合生成的。
下图阐明一个保险公司综合数据的简略处理过程,其中数据仓库中与“保险” 主题无关的数据来自于多个不同的操作型零碎。这些零碎外部数据的命名可能不同,数据格式也可能不同。把不同起源的数据存储到数据仓库之前,须要去除这些不统一。

2.3. 非易失性(不可更新性)
操作型数据库次要服务于日常的业务操作,使得数据库须要一直地对数据实时更新,以便迅速取得以后最新数据,不至于影响失常的业务运作。在数据仓库中只有保留过来的业务数据,不须要每一笔业务都实时更新数据仓库,而是依据商业须要每隔一段时间把一批较新的数据导入数据仓库。
数据仓库的数据反映的是一段相当长的工夫内历史数据的内容,是不同时点的数据库快照的汇合,以及基于这些快照进行统计、综合和重组的导出数据。
数据非易失性次要是针对利用而言。数据仓库的用户对数据的操作大多是数据查问或比较复杂的开掘,一旦数据进入数据仓库当前,个别状况下被较长时间保留。数据仓库中个别有大量的查问操作,但批改和删除操作很少。因而,数据经加工和集成进入数据仓库后是极少更新的,通常只须要定期的加载和更新。
2.4. 时变性
数据仓库蕴含各种粒度的历史数据。数据仓库中的数据可能与某个特定日期、星期、月份、季度或者年份无关。数据仓库的目标是通过剖析企业过来一段时间业务的经营情况,开掘其中暗藏的模式。尽管数据仓库的用户不能批改数据,但并不是说数据仓库的数据是永远不变的。剖析的后果只能反映过来的状况,当业务变动后,挖掘出的模式会失去时效性。因而数据仓库的数据须要更新,以适应决策的须要。从这个角度讲,数据仓库建设是一个我的项目,更是一个过程 。数据仓库的数据随工夫的变动体现在以下几个方面。
(1)数据仓库的数据时限个别要远远长于操作型数据的数据时限。
(2)操作型零碎存储的是以后数据,而数据仓库中的数据是历史数据。
(3)数据仓库中的数据是依照工夫程序追加的,它们都带有工夫属性。
3.数据仓库与数据库区别
数据库与数据仓库的区别理论讲的是 OLTP 与 OLAP 的区别。
操作型解决,叫联机事务处理 OLTP(On-Line Transaction Processing,),也能够称面向交易的解决零碎,它是针对具体业务在数据库联机的日常操作,通常对多数记录进行查问、批改。用户较为关怀操作的响应工夫、数据的安全性、完整性和并发反对的用户数等问题。传统的数据库系统作为数据管理的次要伎俩,次要用于操作型解决。
剖析型解决,叫联机剖析解决 OLAP(On-Line Analytical Processing)个别针对某些主题的历史数据进行剖析,反对管理决策。
首先要明确,数据仓库的呈现,并不是要取代数据库。
• 数据库是面向事务的设计,数据仓库是面向主题设计的。
• 数据库个别存储业务数据,数据仓库存储的个别是历史数据。
• 数据库设计是尽量避免冗余,个别针对某一业务利用进行设计,比方一张简略的User表,记录用户名、明码等简略数据即可,合乎业务利用,然而不合乎剖析。
• 数据仓库在设计是无意引入冗余,按照剖析需要,剖析维度、剖析指标进行设计。
• 数据库是为捕捉数据而设计,数据仓库是为剖析数据而设计。

以银行业务为例。数据库是事务零碎的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下来,这里,能够简略地了解为用数据库记账。数据仓库是剖析零碎的数据平台,它从事务零碎获取数据,并做汇总、加工,为决策者提供决策的根据。比方,某银行某分行一个月产生多少交易,该分行以后贷款余额是多少。如果贷款又多,生产交易又多,那么该地区就有必要设立ATM了。
显然,银行的交易量是微小的,通常以百万甚至千万次来计算。事务零碎是实时的,这就要求时效性,客户存一笔钱须要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。而剖析零碎是预先的,它要提供关注时间段内所有的无效数据。这些数据是海量的,汇总计算起来也要慢一些,然而,只有可能提供无效的剖析数据就达到目标了。
数据仓库,是在数据库曾经大量存在的状况下,为了进一步开掘数据资源、为了决策须要而产生的,它决不是所谓的“大型数据库”。
4、数据仓库分层架构
依照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据利用。

数据仓库的数据来源于不同的源数据,并提供多样的数据利用,数据自下而上流入数据仓库后向下层凋谢利用,而数据仓库只是两头集成化数据管理的一个平台。
源数据层(ODS):此层数据无任何更改,间接沿用外围零碎数据结构和数据,不对外开放;为长期存储层,是接口数据的长期存储区域,为后一步的数据处理做筹备。
数据仓库层(DW):也称为细节层,DW层的数据应该是统一的、精确的、洁净的数据,即对源零碎数据进行了荡涤(去除了杂质)后的数据。
数据应用层(DA或APP):前端利用间接读取的数据源;依据报表、专题剖析需要而计算生成的数据。
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都能够认为是ETL(抽取Extra, 转化Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也能够认为是数据仓库的血液,它维系着数据仓库中数据的推陈出新,而数据仓库日常的治理和保护工作的大部分精力就是放弃ETL的失常和稳固。
为什么要对数据仓库分层?
用空间换工夫,通过大量的预处理来晋升利用零碎的用户体验(效率),因而数据仓库会存在大量冗余的数据;不分层的话,如果源业务零碎的业务规定发生变化将会影响整个数据荡涤过程,工作量微小。
通过数据分层治理能够简化数据荡涤的过程,因为把原来一步的工作分到了多个步骤去实现,相当于把一个简单的工作拆成了多个简略的工作,把一个大的黑盒变成了一个白盒,每一层的解决逻辑都绝对简略和容易了解,这样咱们比拟容易保障每一个步骤的正确性,当数据产生谬误的时候,往往咱们只须要部分调整某个步骤即可。
5、数据仓库元数据管理
元数据(Meta Date),次要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL的工作运行状态。个别会通过元数据资料库(Metadata Repository)来对立地存储和治理元数据,其次要目标是使数据仓库的设计、部署、操作和治理能达成协同和统一。
元数据是数据仓库管理系统的重要组成部分,元数据管理是企业级数据仓库中的要害组件,贯通数据仓库构建的整个过程,间接影响着数据仓库的构建、应用和保护。
l 构建数据仓库的次要步骤之一是ETL。这时元数据将施展重要的作用,它定义了源数据系统到数据仓库的映射、数据转换的规定、数据仓库的逻辑构造、数据更新的规定、数据导入历史记录以及装载周期等相干内容。数据抽取和转换的专家以及数据仓库管理员正是通过元数据高效地构建数据仓库。
l 用户在应用数据仓库时,通过元数据拜访数据,明确数据项的含意以及定制报表。
l 数据仓库的规模及其复杂性离不开正确的元数据管理,包含减少或移除内部数据源,扭转数据荡涤办法,管制出错的查问以及安顿备份等。

元数据可分为技术元数据和业务元数据。技术元数据为开发和治理数据仓库的IT 人员应用,它形容了与数据仓库开发、治理和保护相干的数据,包含数据源信息、数据转换形容、数据仓库模型、数据荡涤与更新规定、数据映射和拜访权限等。而业务元数据为管理层和业务剖析人员服务,从业务角度形容数据,包含商务术语、数据仓库中有什么数据、数据的地位和数据的可用性等,帮忙业务人员更好地了解数据仓库中哪些数据是可用的以及如何应用。
由上可见,元数据不仅定义了数据仓库中数据的模式、起源、抽取和转换规则等,而且是整个数据仓库零碎运行的根底,元数据把数据仓库零碎中各个涣散的组件分割起来,组成了一个有机的整体。
Hive简介
1.什么是Hive
Hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供类SQL查问性能。
其本质是将SQL转换为MapReduce的工作进行运算,底层由HDFS来提供数据的存储,说白了hive能够了解为一个将SQL转换为MapReduce的工作的工具,甚至更进一步能够说hive就是一个MapReduce的客户端
为什么应用Hive
间接应用hadoop所面临的问题
人员学习老本太高
我的项目周期要求太短
MapReduce实现简单查问逻辑开发难度太大
为什么要应用Hive
操作接口采纳类SQL语法,提供疾速开发的能力。
防止了去写MapReduce,缩小开发人员的学习老本。
性能扩大很不便。
Hive的特点
可扩大
Hive能够自在的扩大集群的规模,个别状况下不须要重启服务。
延展性
Hive反对用户自定义函数,用户能够依据本人的需要来实现本人的函数。
容错
良好的容错性,节点呈现问题SQL仍可实现执行。
2.Hive架构
架构图

根本组成
用户接口:包含CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC相似;WebGUI是通过浏览器拜访Hive。
元数据存储:通常是存储在关系数据库如mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包含表的名字,表的列和分区及其属性,表的属性(是否为内部表等),表的数据所在目录等。
解释器、编译器、优化器、执行器:实现HQL 查问语句从词法剖析、语法分析、编译、优化以及查问打算的生成。生成的查问打算存储在HDFS 中,并在随后有MapReduce 调用执行。
3.Hive与Hadoop的关系
Hive利用HDFS存储数据,利用MapReduce查问剖析数据

4.Hive与传统数据库比照hive用于海量数据的离线数据分析

总结:hive具备sql数据库的表面,但利用场景齐全不同,hive只适宜用来做批量数据统计分析
5.Hive的数据存储
Hive中所有的数据都存储在 HDFS中,没有专门的数据存储格局(可Text,SequenceFile,ParquetFile,ORC格局RCFILE等)SequenceFile是hadoop中的一种文件格式:文件内容是以序列化的kv对象来组织的
只须要在创立表的时候通知 Hive 数据中的列分隔符和行分隔符,Hive 就能够解析数据。
Hive 中蕴含以下数据模型:DB、Table,External Table,Partition,Bucket。
db:在hdfs中体现为${hive.metastore.warehouse.dir}目录下一个文件夹
table:在hdfs中体现所属db目录下一个文件夹
external table:与table相似,不过其数据寄存地位能够在任意指定门路
partition:在hdfs中体现为table目录下的子目录
bucket:在hdfs中体现为同一个表目录下依据hash散列之后的多个文件