HiveQL执行过程

参考之前的博客:https://blog.csdn.net/liweihope/article/details/89740863

Hive是基于hadoop的数据仓库工具,可以将结构化的数据文件映射成一张数据表,并且提供SQL查询。讲SQL语句转换成MapReduce任务进行运行,实现简单的MapReduce统计,不必开发专门的MapReduce程序。hive的设计是为了减轻MapReduce的开发,它用来和hadoop做交互,相当于MapReduce的客户端。
HiveQL执行过程_第1张图片

Hive元数据存放在MySQL里。
Hive的表数据存在HDFS上的。
主要过程:
①一个客户端发送一条HQL语句给Hive的驱动器driver。
②Hive的驱动器driver里面有:解析器、分析器、编译器、优化器、执行器等。这些主要完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS上,并在随后由MapReduce调用执行。
③由第二步driver把HQL语句解析成对应的MapReduce程序,并生成相应的MapReduce jar包,结合元数据里提供的对应的文件路径,把jar包提交到Hdoop的Yarn上面执行(提交给ResourceManager执行task)。最后将执行结果输出到客户端,让用户看到结果。

具体的Hive执行计划:
①读取元数据信息,对AST进行词法语法语义分析,表、字段是否存在,SQL语义是否有误
②解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,然后把抽象语法树转换成查询块QB(query block)
③:Logicl Plan:逻辑执行计划解析,进来是QB,生成一堆Opertator Tree(操作,比如select)
④Logicl Optimizer:进行逻辑执行计划优化,会重写逻辑执行计划,生成的还是一堆Opertator Tree,逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量。优化主要有:MapJoinProcessor、GroupByOptimizer、PredicatePushDown等
⑤Phsical plan:物理执行计划解析,生成 tasktree
⑥Phsical Optimizer:进行物理执行计划优化,会重写物理执行计划,生成tasktree,(MapReduce程序)。优化比如:SortMergeJoinResolver、CommonJoinResolver + MapJoinResolver等
⑦优化后生成TaskTree,根据类别比如,是Hive SQL还是SparkSQL还是其它的,会各自提交到集群上去运行

重点是 逻辑执行计划优化和物理执行计划优化。
不是每个Hive SQL都都有reduce任务,由于当前Hive的优化,使得一般简单的任务不会去用reduce任务,复杂的才会有。

HiveQL执行过程_第2张图片
HiveQL执行过程_第3张图片

你可能感兴趣的:(Hive)