Hive架构

Hive架构

Hive其实是架设在HDFS之上的SQL解析执行框架,就是说我们使用Hive可以通过SQL来操作HDFS上的数据。下面是Hive On MapReduce的架构图
Hive架构

  • 上图中描述了Hive中主要的组件和Hadoop的交互,下面是对主要组件的解释:
  • UI:提交SQL查询的user interface,我们前面接触过的hive命令行、beeline以及JDBC客户端程序都属于UI
  • Driver:这个组件负责接收SQL查询请求。这个Driver提供了对外服务的JDBC/ODBC的接口。
  • Compiler:这个组件负责SQL的解析,解析SQL中的关键词,然后结合Metastore中表或者分区等信息,最终生成并返回执行计划
  • Metastore:这个组件负责存储各种表以及分区等元数据信息,比如表名、分区字段等。当然也存储了表中的列以及列的数据类型、表的SerDe、表存储的数据的文件目录等元数据信息
  • Execution Engine:这个组件是执行Compiler组件生成的执行计划,这个执行计划其实是一个包含若干个stages的DAG,Execution Engine会维护这些不同stages之间的依赖,然后按照stage的执行顺序将stage翻译成对应的分布式执行引擎需要执行的代码进行执行,比如上图就是将stage中的逻辑翻译成MapReduce任务进行执行,当然Hive的执行引擎还可以是Spark或者Tez

除了上面4个组件,Hive还有一个HiveServer2的组件,这个组件是对外提供thrift服务的,使得客户端可以使用JDBC或者ODBC来访问Hive,当然,beeline客户端也是通过这个hiveserver2来链接Hive的

上图的查询流程步骤解释如下:

  1. 客户端发起SQL查询(可以通过beeline、JDBC、hive等客户端发起)给Driver
  2. Driver接收到客户端发起的SQL查询后,会创建一个查询会话(当执行hive或者beeline命令的时候就是创建了一个新的会话),然后将SQL发往给Compiler生成一个执行计划
  3. Compiler在解析字符串SQL生成执行计划的时候需要元数据信息,用这些元数据信息来做一些检查,比如检查SQL中查询的表名是否存在,要查询的字段名是否存在等。这些元数据信息肯定是从Metastore这个组件中获取
  4. 返回Compiler需要的元数据信息
  5. Compiler生成好的执行计划返回给Driver。在Compiler里生成的执行计划其实是一个包含若干个stages的DAG,每一个stage可以是一个map/reduce job、也可以是一个元数据操作、也可以是一个HDFS的操作。对于是map/reduce job的stage,则包含了一个map操作树(这些操作都是在Mapper中完成的),还包含一个reduce操作树(这些操作都是在Reducer中完成的)
  6. Compiler调用Execution Engine则是来调度并执行Compiler返回的Stages,执行的Stage如果是map/reduce job的话,则被被翻译成MR或者Spark的map task或者reduce task。执行的Stage如果是元数据操作的话,那么则会去更新或者查询Metastore
  7. 这个步骤,以及步骤8和9都是去拉取结果的操作

Compiler

在Compiler里生成的执行计划其实是一个包含若干个stages的DAG,每一个stage可以是一个map/reduce job、也可以是一个元数据操作、也可以是一个HDFS的操作。对于是map/reduce job的stage,则包含了一个map操作树(这些操作都是在Mapper中完成的),还包含一个reduce操作树(这些操作都是在Reducer中完成的)

  1. Parser解析步骤,这个步骤就是将字符串SQL解析成一棵解析树(我们也可以称之为AST,即Abstract syntax tree,抽象语法树)
  2. Semantic Analyser即语义分析步骤,将上面生成的AST转换成一个内部的查询结构。在这步一般会做:验证查询的表或者字段是否合法、字段类型检查或者类型转换等
  3. gical Plan Generator即生成逻辑执行计划,这步会将上面的内部查询结构转换成逻辑执行计划(一棵操作树),操作树中的操作一些是比如filter、join等操作,还有一些是比如reduceSink写文件的操作等。这棵操作树是逻辑上的,也就是要完成指定SQL查询的时候需要的逻辑操作步骤
  4. Optimizer优化器,这个是优化逻辑执行计划的步骤,可以通过这个步骤为上面生成的逻辑执行计划进行优化,比如:设置group by进行Map端进行聚合、filter push down等优化。这个步骤完成后,生成优化后的逻辑执行计划
  5. ery Plan Generator查询计划(也可以说成是物理执行计划)生成步骤,将上面生成的优化后的逻辑执行计划转换成物理执行计划,其实就是转换成一系列的map-reduce tasks,这些map-reduce tasks都是可以提交到分布式计算框架上的。

来自某位老师的指导大数据技术从业人员的福音