作为hadoop的一个数据仓库工具,hive的架构设计如下:
可以看出,Hive的内部架构总共分为四大部分:
1 用户接口层(cli、JDBC/ODBC、Web UI)
(1) cli (Command Line Interface),shell终端命令行,通过命令行与hive进行交互;
(2) JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过客户端连接至 Hive server 服务;
(3)Web UI,通过浏览器访问hive。
2 元数据存储系统
(1) 元数据 ,通俗的讲,就是存储在 Hive 中的数据的描述信息;
(2)Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表),表中数据所在的目录;
(3)Metastore 默认存在自带的 Derby 数据库或者我们自己创建的 MySQL 库中;
(4)Hive 和 MySQL或Derby 之间通过 MetaStore 服务交互。
3 Thrift Server-跨语言服务
Hive集成了Thrift Server,让用户可以使用多种不同语言来操作hive。
4 Driver(Compiler/Optimizer/Executor)
Driver完成HQL查询语句的词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS上,并由MapReduce调用执行。
整个过程的执行步骤如下:
(1) 解释器完成词法、语法和语义的分析以及中间代码生成,最终转换成抽象语法树;
(2) 编译器将语法树编译为逻辑执行计划;
(3) 逻辑层优化器对逻辑执行计划进行优化,由于Hive最终生成的MapReduce任务中,而Map阶段和Reduce阶段均由OperatorTree组成,所以大部分逻辑层优化器通过变换OperatorTree,合并操