hive执行计划解析

1.hive执行流程的重要性

  • 1)当sql任务非常慢时,就需要分析它的执行流程
  • 2)常见的面试中,问对hive的理解?回答只是写sql,这个是很片面的。要从表面的sql,在脑海中映射出MR流程,在哪儿进行map,combiner,shuffle,reduce

2.解析sql执行计划流程

2.1 大数据两类sql框架
  • 单表分析:select a,聚合函数 from XXX group by b
  • 多表join分析:select a.,b. from a join b on a.id=b.id

这两种sql框架,概括了所有的大数据sql,几乎不可能有第三种写法,区别可能是业务复杂,写的复杂点儿而已。

2.2 解析sql执行计划流程详解

1

  • 1)parser:将sql解析为AST(抽象语法树),会进行语法校验,AST本质* * 还是字符串
  • 2)Analyzer:语法分析,生成QB(query block)
  • 3)Logicl Plan:逻辑执行计划解析,生成一堆Opertator Tree
  • 4)Logicl Optimizer:进行逻辑执行计划优化,生成一堆Opertator Tree
  • 5)Phsical plan:物理执行计划解析,生成 tasktree
  • 6)Phsical Optimizer:进行物理执行计划优化,生成 t优化后tasktree,该任务即是在集群上执行的作业 任务

六步将普通的sql映射成了作业任务。重点是 逻辑执行计划优化和物理执行计划优化

3.sql执行计划映射MR流程

3.1过滤类查询sql
  • select a.id,a,city, a.cate form access a where a.day=’20190414’ and a.cate= ‘奔驰’
    2
    整个job是没有reduce的,类似etl作业。其中map数是由文件分片数决定。分区条件直接在数据读取时过滤
3.2分组聚合类查询sql
  • select city, count(1) form access a where a.day=’20190414’ and a.cate= ‘奔驰’ group by city
    3
    和WC的流程没有本质区别,如上图combiner是本地局部的redece,好处是减少shuffle的数据量,但不是任何场景都会发生combiner,如求平均数。
3.3join类查询sql

待补充

4. 执行计划优化

待补充

扩展1:reducebykey和groupbykey的区别,前者会发生combiner 局部聚合,而后者不会,前者获得的是相同key对应的一个元素,后者是获取元素集合。reducebykey更加适合大数据,少用groupbykey(全数据shuffle)

扩展2:map task数是由数据文件分片数决定的分片数即是map任务数,程序员只能给个期望值

扩展3:reduce task数是由输入reduce的数据的分区(partitions)数决定的即分区数为map任务数,默认是1,程序员可直接设置reduce个数来改变reduce task数,reduce task数决定来 生成的文件数。

扩展4: MR数据shuffle确定数据发往哪一个reduce分区的规则是:取key的hashcode值对分区数模。

扩展5:explain sql ;查看某sql语句的执行计划

猜你喜欢

转载自blog.csdn.net/qq_32641659/article/details/89421655