1)用户接口
用户接口主要有三个,CLI(命令行接口)(最常用),Client,WUI。
Client是Hive的客户端,用户连接至Hive
Server,在启动Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。
WUI通过浏览器访问Hive。(启动Hive的WEB界面:$HIVE_HOME/bin/hive
--service hwi)
2)元数据存储
Hive将元数据存储在数据库中,表的列和分区及其属性,表的属性,表的数据所在目录等。
3)解释器、编译器、优化器、执行器
解释器、编译器、优化器完成HQL查询语句的词法分析、语法分析、编译、优化及查询计划的生成,生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。
4)Hadoop
Hive的数据存储在HDFS中,大部分的查询由MapReduce完成(不含带 * 的查询)
4、Hive的数据存储
1)Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织Hive中的表,只需要在创建表的时候告诉Hive数据中列的分隔符和行分隔符,Hive就可以解析数据。
2)Hive中所有的数据都存储在HDFS中
3)Hive的数据模型:表(Table)、外部表(External
Table)、分区(Partition)、桶(Bucket)
4)Table的创建过程和数据加载过程可以在同一个语句中完成,在加载数据的过程中,实际数据会被移动到数据仓库目录中,之后对数据的访问会直接在数据仓库目录中完成,删除表时,表中的数据和元数据会被同时删除。
External
Table,加载数据和创建表同时完成,实际数据存储在HDFS后面指定的HDFS路径中,并不会移动到数据仓库目录中,删除External
Table时,仅删除元数据,表中的数据不会真正被删除。
5、Hive的技术架构图
从图中,我们可以知道,Hadoop和MapReduce是Hive架构的根基,Hive架构包括如下组件:CLI(command line
interface)、JDBC/ODBC、Thrift Server、WEB
GUI、metastore和Driver(Complier、Optimizer和Executor),这些组件我可以分为两大类:服务端组件和客户端组件。
1)服务端组件:
(1)Driver组件:包括Complier、Optimizer、Executor。作用:将HQL语句解析、编译优化、生成执行计划,然后调用底层的MapReduce计算框架。
(2)Metastore组件:元数据服务组件。该组件存储Hive的元数据,Hive的元数据存储在关系数据库中,Hive支持的关系数据库有derby、mysql。元数据对Hive十分重要,所以,Hive支持把Metastore服务独立出来,安装到远程的服务器集群中,从而解耦Hive服务和Metastore服务,保证Hive运行的健壮性。
Hive的metastore组件是hive元数据集中存放地。Metastore组件包括两个部分:metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如hive默认的嵌入式磁盘数据库derby,还有mysql数据库。Metastore服务是建立在后台数据存储介质之上,并且可以和hive服务进行交互的服务组件,默认情况下,metastore服务和hive服务是安装在一起的,运行在同一个进程当中。我也可以把metastore服务从hive服务里剥离出来,metastore独立安装在一个集群里,hive远程调用metastore服务,这样我们可以把元数据这一层放到防火墙之后,客户端访问hive服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。使用远程的metastore服务,可以让metastore服务和hive服务运行在不同的进程里,这样也保证了hive的稳定性,提升了hive服务的效率。
(3)Thrift服务:Thrift是Facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务开发,Hive集成了该服务,能让不同的编程语言调用Hive的接口。
2)客户端组件
(1)CLI:Command Line Interface(命令行接口)
(2)Thrift客户端:架构图里没有写上Thrift客户端,但是hive架构的许多客户端接口是建立在thrift客户端之上,包括JDBC和ODBC接口。
(3)WUI:Hive客户端提供了一种通过网页的方式访问Hive所提供的服务,这个接口对应于Hive的WEB接口,使用前需要启动Hive Web
Interface服务。