Hive查询过程
根据上图,查询组件主要包括:
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)调用的Driver的execute接口
(2)Step 2:Driver为查询创建会话句柄,并将查询发送给compiler以生成执行计划,
(3)Step 3 and 4:compiler从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读取行,并通过相关的操作树进行传递。一旦这些输出产生&#