1.hive 执行流程的重要性
1)当我们执行sql时,sql任务非常慢,这个时候就需要分析它的执行流程
2)面试经常问:你对hive的理解,一定不要说hive就是写sql。要从表面的sql,在脑海里映射出MR流程,在哪里进行map,combiner,shuffle,reduce
2.解析sql执行计划流程
2.1 大数据sql两类执行框架:(不管多复杂的sql,最终底层都会是这两类)
1)单表查询:select a,聚合函数 from XXX group by b
2)多表join查询:select a.,b. from a join b on a.id=b.id
这两种sql框架几乎包括了所有的大数据sql,区别就在于 业务复杂程度
2.2解析sql执行计划图
1 | Parser:SQL传递进来,通过Parser解析,得到AST |
重点是优化逻辑执行计划和优化物理执行计划
3.sql执行计划映射MR流程
3.1过滤类查询sql
select a.id,a,city, a.cate form access a where a.day=’20190414’ and a.cate= ‘奔驰’
整个job是没有reduce的,类似etl作业。其中map数是由文件分片数决定。分区条件直接在数据读取时过滤,没有shuffle、仅仅就是过滤而已.
3.2分组聚合类查询sql
select city, count(1) form access a where a.day=’20190414’ and a.cate= ‘奔驰’ group by city
1 | mr count |
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语句的执行计划