Hive学习笔记 —— Hive的体系结构
1. Hive的体系结构
-
Hadoop
用HDFS进行存储,利用MapReduce进行计算
-
元数据存储(MetaStore)
通常是存储在关心数据库,如mysql、derby中
在Hive执行HQL语句,其HQL语句会被解析成一个MapReduce作业,并提交到Hadoop集群上进行运行,得到的结果返回给客户端程序,这个过程主要是由JobTracker进行任务调度。
2. Hive的体系结构之元数据
Hive的元数据
元数据与表中存储的具体数据无关,反映的是表本身的信息,这种信息就是元信息,即元数据。
-
Hive将元数据存储在数据库中(metastore),支持mysql、derby、oracle等数据库
默认采用derby数据库来存储Hive的元数据
-
Hive中的元数据包括表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等
图中的左边为存储在hive中的数据表,右边为相应的数据表的元数据信息。
3. Hive的体系结构之HQL的执行过程
举例:一条HQL语句如何在hive中进行查询
在hive中,提供了三个组件来帮助我们工作,即解释器、编译器、优化器
解析器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(Plan)的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。
执行计划,类似于javac命令,将.java的源文件编译成 .class文件,最后执行的就是 .class 这个文件
连接oracle数据库
查询10号部门的员工信息
生成执行计划
(由于没有对部门创建索引,所以需要进行全表扫描)
全表扫描的代价会相对较高。
基于部门号创建索引
重新生成执行计划
重新查看该select的执行计划
(会根据索引进行扫描)