hive
Hive介绍
hive 数据仓库工具
Hive是基于Hadoop的数据仓库解决方案。由于Hadoop本身在数据存储和计算方面有很好的可扩展性和高容错性,因此使用Hive构建的数据仓库也秉承了这些特性。
简单来说,Hive就是在Hadoop上架了一层SQL接口,可以将SQL翻译成MapReduce去Hadoop上执行,这样就使得数据开发和分析人员很方便的使用SQL来完成海量数据的统计和分析,而不必使用编程语言开发MapReduce那么麻烦。
Hive就是我们所说的使用传统的sql来分析海量数据的工具。
可以把Hive当成一个“数据库”,它也具备传统数据库的数据单元,数据库(Database/Schema)和表(Table).但实际上只是Hadoop上的一个工具。
所以从技术角度来看:
hive就是一个翻译器,将传统的sql转化成mapreduce。
或者说:hive是基于mapreduce 的一个上层数据分析框架
Hive的两个组成部分:
1.基于mapreduce
2.使用传统sql的编程思想(类sql语句)
所以结合hive的两大主要组件来看,hive的用处如下:
hive能够用来进行海量数据的存储、查询和离线分析
Hive原理
Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
在使用过程中,只需要将Hive看做是一个数据库就行,本身Hive也具备了数据库的很多特性和功能。
Hive中的数据库概念,本质上仅仅是表的一个目录结构或命名空间。
-
Hive表
-
Hive的数据单元
Databases:数据库。概念等同于关系型数据库的Schema,不多解释;
Tables:表。概念等同于关系型数据库的表,不多解释;
Partitions:分区。概念类似于关系型数据库的表分区,没有那么多分区类型,只支持固定分区,将同一组数据存放至一个固定的分区中。
Buckets (or Clusters):分桶。同一个分区内的数据还可以细分,将相同的KEY再划分至一个桶中,这个有点类似于HASH分区,只不过这里是HASH分桶,也有点类似子分区吧。更细粒度的操作。
-
管理表(内部表)
Hive会控制表中数据的生命周期,当删除一张管理表时,同时也会删除表中的数据。管理表中的数据不与其他工具共享。
-
外部表
Hive只控制元数据,当删除一张外部表时,只会删除元数据,并不会删除真实数据。外部表中的数据与其他工具共享。
-
内、外部表的区别:
-
删除表时:
-
数据是否共享:
-
一些HiveQL语法不试用于外部表。
-
-
分区管理表、分区外部表
Hive中的分区表类型并不复杂,通常以表中的某一个或多个列为分区依据,并创建文件夹,将表中的其他列中的数据放到该文件夹下的数据文件中。
创建分区表的最主要的目的是:快速查询!
分区还可以分为静态分区和动