1、Hive是Hadoop的一个子项目
利用MapReduce编程技术,实现了部分SQL语句。而且还提供SQL的编程接口。Hive推进Hadoop在数据仓库方面的发展。
Hive是一个基于Hadoop文件系统上的数据仓库架构。
主要功能:数据的ETL(抽取,转换,加载)工具,数据存储管理,大型数据集的查询与分析能力。
Hive定义了类SQL的语言,Hive QL,它允许用户进行和SQL相似的操作。还允许使用功能mapper和reducer操作。
Hadoop是批量处理系统,任务是高延迟性的,所以在任务提交和处理过程肯定会消耗时间。即使Hive处理的数据集非常小,在执行时也会出现延迟的问题。
所以,Hive的性能就不可能很好的和传统的Oracle数据库进行比较了。Hive不提供数据排序和查询的cache功能,而且也不提供在线事务处理。
Hive的最大价值是可扩展性(基于Hadop平台,可以自动适应机器数目和数据量的动态变化),可延展性(结合MapReduce和用户定义的函数库)。
2、Hive数据存储的原理
存储是建立在Hadoop文件系统上的。Hive本身没有专门的数据存储格式,也无法为数据建立索引。因此用户可以非常自由的组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符就可以解析数据。
3、Hive的数据模型
表Table,外部表External Table,分区Partition,桶Bucket
1、表Table:Hive中的表和数据库中的表概念上是类似的,每个表在Hive中都有一个对应的存储目录。
比如说一个表table,在HDFS中的路径是/datawarehouse/table,其中/datawarehouse是hive-site.xml配置文件中由
${hive.metastore.warehouse.dir}指定的数据仓库的目录,所有的表数据除了外部表都保存在这个目录中。
2、分区Partition:Hive中每个分区Partition,都对应数据库中相应分区的一个索引,但是Hive的分区组织方式和传统关系型数据库不同。
Hive中表的一个分区对应表的下一个目录,所有分区的数据都存储在对应的目录中。
3、桶Bucket:指定列进行哈希Hash计算时,根据哈希value切分数据。每一个桶对应一个文件。比如将属性列user列分散到32个桶中,首先要对user列的值 进行Hash计算,对应哈希value的桶写进对应的HDFS的目录。
4、外部表:指向已经在HDFS中存在的数据。它和表在元数据的组织上是相同的。如果删除一个外部表只会删除元数据,而表中的数据不会被删除。
4、Hive的元数据
由于Hive的元数据可能要面临不断地更新,修改,读取,它肯定不适合用哪个Hadoop文件系统进行存储。Hive将元数据存储在RDBMS中,比如MySQL,Derby中。Hive有三种模式可以连接到Derby数据库:
1、Single User Mode:单用户模式,它连接到一个内存(In-Memory),一般用来单元测试。
2、Multi User Mode:多用户模式,通过网络连接到一个数据库中,最常用
3、Remote Server Mode:远程服务器模式,用于非java客户端访问元数据库,在服务器启动一个MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer来访问元数据库。