Hive_ Hive DISTINCT , JOIN 运行流程

  对Hive 有一定了解的同学们,一定要对 Hive 几种常用的语句的内部运行机制做一定的了解。这样我们才能更好的去优化Hive,对SQL 做一定的调整。

下面我们主要通过  

  DISTINCT 

  JOIN 

两类操作,详细的去介绍 Hive 底层 的 MapReduce 执行流程。

DISTINCT 流程图:

可以看到上面的第一个阶段就是 Mapping ,将数据切分成几个片段,读入进来

第二个阶段就是 Shuffling

从缓冲区写到磁盘的时候,会进行分区并排序,分区指的是某个key应该进入到哪个分区,同一分区中的key会进行排序

第三个阶段就是 Reducing, 由于这里面我们是 DISTINCT , 我们只需要对 相同 key 的 list,  任取一个就可以了。

JOIN 流程图 

(JOIN /  LEFT JOIN /  RIGHT JOIN ) 都属于此类范畴

而 MAP JOIN 不属于此类范畴

Mapping 阶段主要是数据的读取,把数据分割,并作上标识。

比如

来源A 的数据为

a : [a,3,4,A]

b: [b,2,3,A]

c: [c,5,6,A]

来源B 的数据为

d:[d,20,B]

a:[a,2,B]

b:[b,9,B]

Shuffling 阶段涉及到了数据的排序,将相同 Key 的数据放在一起

Reducing 阶段, 相同的key 放到了一起,

比如 key : a

来源于A的组成了一个List

a:{[a,3,4]}

来源于B的组成了一个List

a{[a,2]}

由于不同来源相同的key 只有一个,所以是一对一的关系。

对于多对多关系,就会形成循环,最终会产生笛卡尔积。

同理,LEFT JOIN , RIGHT JOIN 流程类似。只是在筛选条件上有不同。

发布了519 篇原创文章 · 获赞 1146 · 访问量 283万+

猜你喜欢

转载自blog.csdn.net/u010003835/article/details/105253639
今日推荐