hive中reduce类函数说明

 order by 

需要reduce操作,且 只有一个reduce,与配置无关。 数据量很大时,慎用。

 

group by

使用了reduce操作, 受限于reduce数量,设置reduce参数 mapred.reduce.tasks 

输出文件个数与reduce数相同

数据倾斜,优化参数 hive.groupby.skewindata为true,会启动一个优化程序,避免数据倾斜。

 

left semi join

类似 exists。即查找a表中的数据, 是否在b表中存在,找出存在的数据。

 

mapjoin

在map端完成join操作,不需要用reduce,基于内存做join,属于优化操作,其中使用了分布式缓存技术。

mapjoin顾名思义,就是在map端完成join操作,把小数据集分发到map的每台机器上去做join,避免shuffle操作

 

distribute by与group by对比 

都是按key值划分数据 

都使用reduce操作 

**唯一不同的是**distribute by只是单纯的分散数据,而group by把相同key的数据聚集到一起,后续必须是聚合操作。

distribute by也是存在数据倾斜问题的,热点key会被分布到个别reduce节点上

 

order by与sort by 对比 

order by是全局排序 

sort by只是确保每个reduce上面输出的数据有序。如果只有一个reduce时,和order by作用一样。

 

cluster by

把有相同值的数据聚集到一起,并排序。 

效果等价于distribute by col sort by col 

cluster by col <==> distribute by col sort by col

 

union all

多个表的数据合并成一个表,hive不支持union


是不是map数越多越好?  

答案是否定的。如果一个任务有很多小文件(远远小于块大小128m),则每个

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值