hive sql语句执行原理

大致理解为:hive会对写好的sql语句进行拆解,按执行顺序拆分成树结构(AST)交给mapreduce处理;

hive对不同DML/DDL关键字有不同的反应,比较敏感的有select、from、join、group by、distinct、insert等;

对查询语句,hive首先会先根据from找到数据源(metastore),然后从查询内部开始找用到的字段及其类型,看语句要求对字段直接处理(加减乘除等)还是聚合处理(sum等),并检查语句是否正确——扫描表、语法分析、语义分析;

找出需要的字段,剩下的就是对字段下的取值进行的操作了

join的过程,因为涉及两个及以上的表,在map阶段会对不同表打上不同标签来区分,打上标签以后其实就可以按一个表来理解;

group by与distinct的过程,类似map端的combiner与reduce端的功能,就是按不同Key展示结果且key不重复;

order by的过程,只在reduce端执行,也就是只需要一个reducer,耗时耗内存,可以用 (distribute by col sort by col) order by这样的结构代替;

mapjoin用于大小表相连,提高效率;

hive用left semi join代替in


1.     left join  的条件,条件不同生成的job数量有什么不同,多个表join生成的job数量有什么不同.

2.     group by 生成的任务map阶段和reduce阶段都做了什么

3.     dictinct生成的任务map阶段和reduce阶段都做了什么
子查询生成几个job

4.     left semi join生成几个job map 阶段和reduce阶段都做什么事儿

5.     数据倾斜是怎么回事,写sql的时候要注意哪些防止数据倾斜

6.     常见的排序有哪些,各有什么优缺点,map阶段和reduce阶段都做了什么


表Course_z:8条记录

表SC_z:13条记录

表Student_z:8条记录

1.   Leftjoin

hive sql语句执行原理hive sql语句执行原理hive sql语句执行原理

N个表join生成n-1个job,读入几条记录就有几个mapper,在map端执行完后到1个reducer上执行;

内部join的结果看做1条记录所以有1+8个mapper

hive sql语句执行原理hive sql语句执行原理

当使用外关联时,如果将副表的过滤条件写在Where后面,那么就会先全表关联,之后再过滤,时间消耗更多

hive sql语句执行原理

2.   Groupby

Map阶段,group by的参数作key,有combiner的过程

Reduce阶段key去重并reduce

hive sql语句执行原理hive sql语句执行原理

 

3.   Distinct

Map阶段,distinct字段作key,没有combiner的过程

reduce阶段去重

group by比distinct效率高

hive sql语句执行原理hive sql语句执行原理

 

4.   Leftsemi join(效果相当于In,执行的时候按Join处理)

hive sql语句执行原理hive sql语句执行原理

相当于

hive sql语句执行原理hive sql语句执行原理

1个join对应1个job

Map阶段,表加tag,

Reduce阶段按tag操作,只保留左表字段

 

5.   数据倾斜

表现:某个或少数几个reducer长时间处于未完成状态,任务进度长时间维持在99%(或100%),处理时间远大于平均时长;数据倾斜的Job中reducer个数>1

原因: 1. 小表join大表

优化:我们要看有哪些过程是需要至少两个reducer来执行的,然后去优化那些运算;增加reduce 的jvm内存(不采用);增加reduce 个数(不采用);distinct;customer partition;pipeline;index 尤其是bitmap index;mapjoin;

 

6.   Order by,只在reduce端执行,且1个orderby对应1个reducer

         优点:总体有序

         缺点:只用1个reducer,数据越大运行越慢

Sort by,在各mapper端排序,reduce端不排序,所以总体是无序的

        优点:运行较快

        缺点:整体无序

Distribute by,reduce端执行

Cluster by, clusterby的功能就是distribute by和sort by相结合


 参考:http://tech.meituan.com/hive-sql-to-mapreduce.html