Hive是什么
Hive是一个基于Hadoop文件系统的数据仓库,提供了对数据进行ETL(抽取,转换,加载)的工具、数据存储管理和大型数据集的查询分析能力。Hive提供了类SQL语言-HiveQL,可使用关系数据库提供的的SQL语句来操作Hive。
Hive擅长做什么?
- Hive擅长在不变的、大规模的数据集上执行的批量操作。
- Hive具有良好的扩展性,因为其建立在HDFS上,可自动适应机器数目和数据量的动态变化,并具有良好的容错性。
- Hive具有良好的可延展性,由于Hive基于MapReduce,可通过内置的Mapper和Reducer来执行数据分析操作,同时也允许熟悉MapReduce编程框架的用户使用Hive提供的编程接口实现自己的Mapper和Reducer来处理内置的Mapper和Reducer无法完成的复杂数据分析工作。
Hive不擅长做什么?
- Hive不提供排序和查询cache功能
- 不提供在线事物处理功能
- 不提供实时的查询和记录级的更新功能
Hive数据存储
Hive的存储是建立在Hadoop的文件系统之上的,没有专门的数据存储格式,不能为数据建立索引,因此用户可以很自由的组织Hive中的表。
Hive主要包含四类数据类型:
- 表(Table):Hive中的表和关系型数据库中的表在概念上很类似,每个表在HDFS中都有相应的目录用来存储表的数据,这个目录可以通过${HIVE_HOME}/conf/hive-site.xml配置文件中的hive.metastore.warehouse.dir属性来配置,这个属性默认的值是/user/hive/warehouse(这个目录在HDFS上),我们可以根据实际的情况来修改这个配置。如果我有一个表students,那么在HDFS中会创建/user/hive/warehouse/students目录(这里假定hive.metastore.warehouse.dir配置为/user/hive/warehouse);students表所有的数据都存放在这个目录中。
- 外部表(External Table):Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处,这样的好处是如果你要删除这个外部表,该外部表所指向的数据是不会被删除的,它只会删除外部表对应的元数据;而如果你要删除表,该表对应的所有数据包括元数据都会被删除。
- 分区(Partition):在Hive中,表的每一个分区对应表下的相对应的目录,所有分区的数据都是存储在对应的目录中。比如students表有sno和name两个分区,则对应sno=01161101,name=xiaoming对应表的目录为/user/hive/warehouse/sno=20131218/name=xiaoming,所有属于这个分区的数据都存放在这个目录中。
- 桶(Bucket): 对指定的列计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(注意和分区的区别)。比如将students表id列分散至16个桶中,首先对id列的值计算hash,对应hash值为0和16的数据存储的HDFS目录为:/user/hive/warehouse/wyp/part-00000;而hash值为2的数据存储的HDFS 目录为:/user/hive/warehouse/wyp/part-00002,以此类推。
表,分区,桶的关系如下:
Hive的元数据
Hive的元数据由于需要不断地修改,因此不适合存放在Hadoop的HDFS上,一般都存放在关系型数据库中,如MySQL、Derby中。
Hive构成
Hive架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、Hive WEB Interface(HWI)、metastore和Driver(Complier、Optimizer和Executor)
- Driver组件:核心组件,整个Hive的核心,该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HQL语句进行解析、编译优化,生成执行计划,然后调用底层的MapReduce计算框架。
- Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。
- CLI:command line interface,命令行接口,提供命令行操作。
- ThriftServers:提供JDBC和ODBC接入的能力,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。
- Hive WEB Interface(HWI):hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件(hive web interface)