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 流程类似。只是在筛选条件上有不同。

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值