解决Hive和Spark数据倾斜

本文探讨了Hive和Spark中的数据倾斜问题,包括Hive中的group by和join on引起的倾斜,以及Spark中executor丢失、OOM等问题。解决策略涉及数据预处理、调整shuffle并行度、局部和全局聚合、广播变量以及拆分和打散数据等方法。通过这些方法,可以有效缓解和解决数据倾斜带来的性能瓶颈。
摘要由CSDN通过智能技术生成

一、Hive数据倾斜

一般都发生在Sql中group by和join on上

1.不同数据类型关联产生数据倾斜

例如:两个表进行关联,其中一个字段类型是int一个是String

解决:把数字类型转换成字符串类型

2.空值分布:经常有大量的空值数据进入到一个reduce中导致数据倾斜

解决:自定义分区,将为空的key转变为字符串+随机数,将因为空值造成的数据倾斜数据分不到不同的reducer中(如果一下特殊异常值不需要可以直接where过滤掉)

3.group by代替distinct

4.开启mapjoin

5.开启负载均衡:先随机分发处理再按照key group by来分发处理

6.设置多个reduce数量,默认为1


二、Spark数据倾斜

  • Executor lost,OOM,Shuffle过程出错
  • Driver OOM
  • 单个Executor执行时间特别久 整体任务卡住
  • 正常运行的任务突然失败

1.快速定位到导致数据倾斜的代码

Spark数据倾斜只会发生在shuffle过程中

触发shuffle的算子有:distinct/groupByKey/reduceByKey/aggregateByKey/join/repatition/cogroup等

(出现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值