Hive学习笔记一 -- Hive与数据仓库

1、Hive

  随着数据地海量增长,HDFS和MapReduce应运而生。MapReduce可以实现分布式处理,而数据的存储依赖于Hadoop分布式文件系统(HDFS)。不过,仍然存在一个挑战,就是用户如何从一个现有的数据基础架构转移到Hadoop上,而这个基础架构是基于传统关系型数据库和结构化查询语句(SQL)的,例如MySQL等传统关系型数据库。对于大量的SQL用户(包括专业数据库设计师、管理员及那些使用SQL从数据仓库中抽取信息的临时用户)来说,这个问题又将如何解决呢?

  Hive的出现正好可以解决这一系列问题,Hive最初是由Facebook设计的,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的类SQL查询语言(称为HiveQL)。底层将HiveQL语句转换为MapReduce任务运行,它允许熟悉SQL的用户基于Hadoop框架分析数据。其优点是学习成本低,对于简单的统计分析,不必开发专门的MapReduce程序,直接通过HiveQL即可实现。

2、数据仓库

  数据仓库名称为Data Warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决策支持目的而创建。数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。

3、数据库与数据仓库

  数据库与数据仓库的区别实际上是 OLTP 与 OLAP 的区别。 操作型处理,叫联机事务处理 OLTP(On-Line Transaction Processing),也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。 分析型处理,叫联机分析处理 OLAP(On-Line Analytical Processing)一般针对某些主题的历史数据进行分析,支持管理决策。

  首先要明白,数据仓库的出现,并不是要取代数据库。数**据库是面向事务的设计,数据仓库是面向分析设计的。**数据库一般存储业务数据,数据仓库存储的一般是历史数据。数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余, 依照分析需求,分析维度、分析指标进行设计。数据库是为捕获数据而设计,数据仓库是为分析数据而设计。

  以银行业务为例:数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下 来,这里,可以简单地理解为用数据库记账。数据仓库是分析系统的数据平台,它从事务系统获取数据,并做汇总、加工,为决策者提供决策的依据。比如,某银行某分行一个月发生多少交易,该分行当 前存款余额是多少。如果存款又多,消费交易又多,那么该地区就有必要设立ATM了。 显然,银行的交易量是巨大的,通常以百万甚至千万次来计算。事务系统是实时的,这就要求时效性, 客户存一笔钱需要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。而分析系统是 事后的,它要提供关注时间段内所有的有效数据。这些数据是海量的,汇总计算起来也要慢一些,但 是,只要能够提供有效的分析数据就达到目的了。数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它绝不是所谓的“大型数据库”。

4、数据存储架构

Hive学习笔记一 -- Hive与数据仓库

5、Hive架构

Hive学习笔记一 -- Hive与数据仓库

①用户接口。用户与Hive交互主要有3种方式:CLI、Client和WUI。CLI方式主要用于Linux平台命令行查询。WUI方式是Hive的Web界面访问方式,通过浏览器访问Hive。Client是Hive的客户端,连接至远程服务HiveServer2。

②元数据存储。Hive将元数据存储在数据库中,如MySQL、Derby等,其中元数据存储依赖于Metastore DB服务。Hive中的元数据包括表名、表的列和分区及其属性、表的属性(是否为外部表)、表的数据所在目录等。

③解析器、编译器、优化器。完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成,随后由MapReduce调用执行。

④数据存储。Hive中表的数据存储在HDFS中,包含表(Table)、外部表(External Table)、分区(Partition)、桶(Bucket)等数据模型,其中数据库、分区、表都对应HDFS上的某个目录,Hive表里的数据存储在表目录下面。

有错误的地方敬请指出,欢迎大家评论区或者私信交流!每日持续更新Java、Python、大数据技术,请大家多多关注!