Hive学习系列(二)Hive的查询流程详解

此文为翻译的文档,英文连接为

https://cwiki.apache.org/confluence/display/Hive/Design#Design-HiveArchitecture

 

Hive 查询流程图如下

Hive学习系列(二)Hive的查询流程详解_第1张图片

图中可以看出查询主要组件包含

  • UI(user interface) –用户提交查询或者其他操作,现在标准UI有CLI(command line interface),Thrift Serve,Hive web interface(HWI)。
  • Driver(驱动) –负责接收查询及其他操作,Driver 实现了会话句柄的概念,并提供在基于JDBC / ODBC的execute和fetch API
  • Compiler(编译器) – 解析查询的sql,对不同的块和不同的查询表达式进行语义分析,借助metastore中的表和分区的元数据定义生成执行计划。
  • Metastore –存储所有表及分区的结构信息,包含列名,列的数据类型,读取和写入的序列化器和反序列化器以及相关的HDFS文件存储目录
  • Execution Engine(执行引擎) –执行compiler所产生的执行计划。该执行计划是一个阶段的DAG,执行引擎关联执行计划中不同阶段的之间依赖,并负责在不同的系统组件中执行不同的阶段。

执行流程详细解析

(1)Step 1:UI(user interface)调用Driverexecute接口

(2)Step 2:Driver为查询创建会话句柄,并将查询发送给compiler以生成执行计划,

(3)Step 3 and 4compiler从metastore获取相关的元数据定义

(4)Step 5:元数据用于对查询树中的表达式进行类型检查,以及基于查询谓词调整分区,生成计划

(5)Step 6, 6.1, 6.2 and 6.3:由compiler生成的执行计划是阶段的DAG,每个阶段都会涉及到Map/Reduce job,元数据的操作或者HDFS文件的操作。在Map/Reduce阶段,执行计划包含Map 操作树(操作树在Mappers上执行)和reduce操作树(Reduce 操作树在 Reducers上执行),Execution Engine 将各个阶段提交个适当的组件执行。

(6)Step 7, 8 and 9:在每个任务(mapper / reducer)中,表或者中间输出相关的反序列化器从HDFS读取行,并通过相关的操作树进行传递。一旦这些输出产生,将通过序列化器生成零时的的HDFS文件(这个只发生在只有Map没有reduce的情况),生成的HDFS零时文件用于执行计划后续的Map/Reduce阶段。对于DML操作,零时文件最终移动到表的位置。该方案确保不出现脏数据读取(文件重命名是HDFS中的原子操作),对于查询,临时文件的内容由Execution Engine直接从HDFS读取,作为从Driver Fetch API的一部分

 

这个我现在基于英文做了翻译,后面还的好好看看

 

Hive学习系列(二)Hive的查询流程详解 

 Hive学习系列(一)什么是Hive及Hive的架构

 

你可能感兴趣的:(Hive)