hive架构
1.用户接口 Client
CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
2.元数据 Metastore
用来存储hive的元数据
使用关系型数据库来存储元数据,默认存储在自带的derby数据库中,推荐使用mysql存储Metastore
hive的元数据包括:表名, 表所属数据库, 表的拥有者, 表的列, 表的分区, 表的属性(表是内部表还是外部表), 以及表数据所在的目录
3.Hadoop
使用hdfs进行存储,使用mapreduce进行计算
4.驱动器 Driver
(1).解析器 SQL Parser
解析器是将sql字符串解析成抽象语法树AST,对抽象语法树进行语法分析,比如表是否存在,字段是否存在,sql语义是否有误
(2).编译器 Physical Plan
编译器将抽象语法树AST编译成逻辑执行计划
(3).优化器 Query Optimizer
优化器对逻辑执行计划进行优化
(4).执行器 Execution
将逻辑执行计划转换成可以运行的物理执行计划,mr或者是spark
hive执行过程
Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口
hivesql执行转换为mr
客户端将hql语句发送hive的驱动器driver
然后解析器将sql字符串解析成抽象语法树AST,进行词义语义分析,表是否存在,字段是否存在,语义是否错误.
然后编译器将抽象语法树抽象成查询块,将查询块编译成逻辑执行计划.
然后优化器对逻辑执行计划进行优化.
执行器将逻辑执行计划转化成物理执行计划,mr程序或者是spark程序,生成jar包,以及从元数据中获取表数据存储的目录,然后提交到hadoop中去执行,最后将结果返回给客户端.