数据仓库Hive详细介绍

简介

Hive是基于Hadoop的一一个数据仓库工具,可以将结构化的数据文件映射为一-张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行,Hive在Hadoop之 上提供了数据查询的能力,主要解决非关系型数据查询问题。

Hive可以被认为是一种数据仓库,包括数据的存储以及查询

Hive包括一个高层语言的执行引擎,类似于SQL的执行引擎

Hive建立在Hadoop的其它组成部分之上,Hive依赖于HDFS进行数据保存,依赖于MapReduce完成查询操作
数据仓库Hive详细介绍_第1张图片

Hive与Hbase对比

  1. Hbase和Hive在大数据架构中处于不同的位置。
  2. Hbase主要解决实时海量数据查询问题,弥补了Hadoop对实时操作的缺陷,通过存储keyvalue来工作。
  3. Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,主要解决数据处理和计算问题,进行离线批量数据计算。
    数据仓库Hive详细介绍_第2张图片

Hive的组成模块

在底层执行时,一个Hive程序将由编译器转换成很多个MapReduce程序加以执行。

Hive的模块非常类似于传统的数据库的模块,下面是Hive的必要组成模块以及对应的功能介绍:

HiveQL:这是Hive的数据查询语言,与SQL非常 类似。Hive提供了这个数据查询语言与用户的接口,包括一个shell的接口,可以进行用户的交互以及网络接口与JDBC接口。JDBC接口可以用于编程,与传统的数据库编程类似,使得程序可以直接使用Hive功能而无需更改

Driver:Hive驱动,用以将各个组成部分形成一个有机的执行系统,包括会话的处理,查询获取以及执行驱动

Compiler:Hive需 要一个编译器,将HiveQL语 言编译成中间表示,包括对于HiveQL语言的分析,执行计划的生成以及优化等工作

Execution Engine:执行引擎,在Driver的驱动下,具体完成执行操作,包括MapReduce执行,或者HDFS操作,或者元数据操作

Metastore:元数据存储层,用以存储元数据:存储操作的数据对象的格式信息,在HDFS中 的存储位置的信息以及其他的用于数据转换的信息SerDe等。元数据通常存储在关系数据库中,默认情况下使用本地的Derby数据库,用户也可以配置使用支持JDBC的MySQL数据库。
数据仓库Hive详细介绍_第3张图片

Hive数据类型

●Hive支持的数据类型,主要分为两种:基本数据类型和复合数据类型。
1)基本数据类型
TINYINT/SMALLINT/INT/BIGINT
FL0AT/DOUBLE
BOOLEAN
STRING

2)复合数据类型
ARRAY:-组类型相同的数据
MAPS:-组键值对,键和值都必须是同一-类型
STRUCTS:–组任意标准类型的数据

Hive存储和压缩

Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由地组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。

Hive中的数据都存储在HDFS中,Hive中包括以下数据模型:Table(表)、External Table(外部表)、Partition(分区)、Bucket(桶)。

Hive的数据模型

每一个类似于数据库的系统都首先需要定义一个数据模型,然后才是在这个数据模型之,上的各种操作。

Hive表在逻辑上由存储的数据和描述表格中数据形式的相关元数据组成。

在物理实现上:
数据一般存放在HDFS上。
Hive把元数据放在关系型数据库中,并不是放在HDFS上。

Hive Metastore

●Metastore(元数据存储层)是Hive元数据的集中存放地
●Metastore默认使用内嵌的Derby数据库作为存储引擎
●Derby引擎的缺点:–次只能打开一一个会话
●使用MySQL作为外置存储引擎,多用户同时访问

Tables:Hive的 数据模型由数据表组成

与数据库中的Table在概念上类似,每一个Table在HDFS中都有一个固定的位置存储数据。例如,一个表test,它在HDFS中的路径为/warehouse/test,warehouse是在hive-sitexml中由S{hive metastore warehouse dir}指定的数据仓库的目录,所有的table数据都保存在这个目录中。删除表时,元数据与数据都会被删除。

数据表中 的列是有类型的(int,float,string,data,boolean),也可以是复合的类型,如list:map(类 似于JSON形式的数据)

Partitions:分区,数据表可以按照–定的规则进行划分

Hive把表组织成分区,分区可以加快分片的查询速度。一在HDFS中,每个分区对应着表下面的-一个子目录。
例如,通过日期的方式将数据表进行划分。

考虑日志文件,其中每条记录包含一个时间戳。如果根据日期进行分区,那么同一天的记录会被存放在同一个分区中。这样对于限定某个条件的查询,效率会非常高,因为它只需要扫描查询范围内的文件。

Buckets:数据存储的桶

Hive还可以把表组织成为桶,提高处理大规模数据集的效率。

桶表是对数据进行哈希取值,然后放到不同文件中存储。

在一定范围内的数据按照Hash的方式进行划分(这对于数据的抽样以及对于join的优化很有意义)

元数据存储:Metastore

在Hive中由一系列的数据表格组成–个命名空间,关于这个命名空间的描述信息会保存在Metastore的空间中

元数据使用SQL的形式存储在传统的关系数据库中,因此可以使用任意一种关系数据库,例如Derby(apache的 关系数据库实现),MySQL以及其他的多种关系数据库存储方法

在数据库中,保存最重要的信息是有关数据库中的数据表格描述,包括每一个表的格式定义,列的类型,物理的分布情况,数据划分情况等

数据的物理分布情况

Hive在HDFS中有固定的位置,通常被放置在HDFS的如下目录中:/user/hive/warehouse

每个数据表被存放在warehouse的子目录中

进一步来说,数据划分Partition.数据桶Buckets形成了数据表的子自录

Hive系统的配置

要想Hive使用HDFS进行数据仓库的存储,使用MapReduce进行HQL语言的执行,需要进行相应的配置。

首先,需要创建Hive的配置文件hive-site.xml(注意,Hive安 装包中包含一个配置文件模板-hive default.xml.template)

●fs.default.name用以告知Hive对应的HDFS文件系统的名字节点在什么位置

●mapred.job.tracker用以告知Hive对应的MapReduce处理系统的任务管理器在什么位置

通过上面两点的配置,就可以让Hive系统 与对应的HDFS以及MapReduce进行交互,完成数据的存取以及查询的操作

你可能感兴趣的:(BigData)