目录
本文首先介绍hive系统架构、编译过程和查询执行流程,接下来介绍hive编译形成的MRjob调度过程和MR原理,最后介绍了常见算子Join、group by、distribute by及排序的原理。
一、hive编译和执行
1.1 hive系统架构
1.2 hive编译过程
1.3 hive查询执行流程
二、job调度
Application在Yarn中的执行过程,如需了解详细执行过程请点击:Yarn的执行过程细分
三、job执行引擎(MapReduce原理)
Hadoop作业称为Job,Job分为Map、Shuffle和Reduce阶段,MAP和Reduce的Task都基于JVM进程运行的。
MAP阶段:从HDFS读取数据,split文件产生task,通过对应数量的Map处理,map输出的每一个键值对通过key的hash值计算一个partition,数据通过环形缓冲区,sort、spill、merge生成data和index文件;
Reduce阶段:reduce通过Shuffle Copy属于自己的那部分数据,然后sort、spill、merge形成一个大文件,调用reduce函数进行处理。
四、核心算子原理
4.1 Hive join原理
join原理--MapJoin
join原理--Reduce Join,又叫Common Join
1. Map阶段:构建(key(tag),value),key这里后面的数字是tag,后面在reduce阶段用来区分来自于那个表的数据,对key求hashcode设为hivekey;
2. Shuffle阶段:如果key在不同机器上,会通过网络传输把hivekey相同的数据汇集到一台机器;
3. Reduce阶段:把tag=1的内容,都加到tag=0的后面,合并输出。
Hadoop权威指南实现方式
4.2 Hive group by原理
默认设置了hive.map.aggr=true,会在mapper端先group by一次,最后把结果merge起来,为了减少reducer处理的数据量。
4.3 Hive distribute by 原理
只有一个distinct实现原理如下图:
有多个distinct字段,有两种实现方式,第一种同上,第二种对不同distinct字段编号膨胀,group by字段作为partition key,最后在reduce阶段保存LastKey区分不同的key。
4.4 Hive 排序原理
order by 是全局排序,可能性能会比较差,一个reduce;
sort by分区内有序,往往配合distribute by来确定该分区都有那些数据;
distribute by确定了数据分发的规则,满足相同条件的数据被分发到一个reducer;
cluster by当distribute by和sort by字段相同时,可以使用cluster by代替distribute by和sort by,但是cluster by默认是升序,不能指定排序方向。