大数据学习之路 --- Hive(数据仓库管理工具)

Hive 用 是一种用 SQL  语句来协助读写、管理存储在分布式存储系统上的大数据集的数据仓库软件。 

                                                                                                                                    ---<>

 

名词解释:

  • Hive:通过把HDFS中的文件映射为一张张表,让开发人员可以通过sql以操作普通数据库的方式操作分布式系统中的数据文件,简单方便。

 

 

Hive的几个特点:

(1) Hive 最大的特点是 Hive 通过类 SQL 来分析大数据,而避免了写 MapReduce Java 程序来分析数据,这样使得分析数据更容易。
(2) 数据是存储在 HDFS 上的,Hive 本身并不提供数据的存储功能
(3) Hive 是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如 MySQL)。
(4) 数据存储方面:他能够存储很大的数据集,并且对数据完整性、格式要求并不严格。
(5) 数据处理方面:不适用于实时计算和响应,使用于离线分析。

 

Hive的实质:

通过Hive,开发人员可以利用sql创建数据库,创建表,并写入数据,其实这一系列操作都是在操作HDFS文件,例如建立一个数据库,就是在HDFS中建立一个新的文件,即Hive其实就是对分布式文件系统的各种操作进行了封装,并以sql的形式给开发人员使用。

Hive把数据存在HDFS中,而把元数据存在关系型数据库中,例如mysql。

 

Hive表:

类似于关系型数据库中表,可以在表上执行filter,join和union等操作。另外,同一张表的数据都存放在一个HDFS目录下,

Hive中创建的表有两种不同类型,一种是内部表,一种叫做外部表。他们的区别主要体现在LOAD和DROP两个命令中。

内部表:

内部表在执行LOAD命令时,会把数据移动到自己的数据仓库中,也就是移动到自身这个表对应的HDFS文件中,执行DROP时,不仅会删除存储在关系型数据库中的元数据,还会把数据仓库也就是自身这个表对应的HDFS文件删除。

外部表:

创建外部表时,需要在创建表时加EXTERNAL关键字,外部表在执行LOAD命令时,不会移动数据,而是构建一个指向数据原地址的引用,而且它不会去检查数据是否存在,这就让我们可以先建表,再在LOAD指向的位置构建我们的数据,执行DROP命令时,只删除存储在关系型数据库中的元数据,而不对引用位置的真正数据做任何操作。

 

表内部的分区和分桶:

由于大数据数据量庞大的特点,所以Hive对每个表又划分了区和桶,这样一来,就可以加快对表内数据的查找速度,毕竟在一亿条数据的表里查找某一条数据,速度实在太慢,但如果能根据一定的规则,把这一亿数据划分成十个区,每个区一千万条数据,再把每个区的一千万条数据分为十个桶,这样,我们就可以根据要查找信息的特点,去指定表的指定分区的指定桶中查找,就变成了在一百万条数据中查找一条我们要的数据,速度一下子就加快了很多。

分区:

每张表可以按照某列或某几列进行分区管理,每个分区以文件夹的形式单独存在表文件夹的目录下。比如,典型的按时间分区。分区可以避免整表的扫描,从而提升查询效率,这在超大数据集场景下效果尤为明显。分区是在创建表的时候用PARTIONED BY定义的。

分桶:

对于每张表或者每个分区,可以进一步细分为桶。分桶会为数据增加额外的结构以获得更高效的查询处理。默认对某一列进行hash,使用哈希值对桶的个数求模取余,确定哪一条记录进入哪一个桶。例如,根据用户id来划分桶, 这样在所有用户的集合上做基于用户的查询速度就可以得到快速提升。每个桶的数据存为分区目录下的一个文件。分桶主要是可以使得map-side join更加高效。分桶是在创建表的时候CLUSTERED BY来指定划分桶所用的列和要划分的桶的个数。

你可能感兴趣的:(大数据学习之路 --- Hive(数据仓库管理工具))