数据倾斜及治理方法

2 篇文章 0 订阅
1 篇文章 0 订阅

常见会产生数据倾斜的框架:
hadoop,hive,hbase,flink,spark,sqoop,以及各种Shuffle阶段

一、对于数据倾斜的定义
1.是什么:
在shuffle过程中大量同一key的数据被分配至同一分区,导致其中一节点压力过大,而其他节点过于清闲的情况。
2.现象:
①绝大多数map Task运行快速,而个别Task,尤其多见于reduce task运行过慢。
②OOM(Hadoop——container,Spark——driver)
3.原理:
进行Shuffle的过程中将相同的key的数据拉取到某个reduce Task节点上进行处理,而相同key下数据量过大。

二、解决思路
1.增加JVM
2.指定分区策略
3.重新设计key

三、具体措施
1.排查空值问题:多见于爬取数据时网站设防,爬取到大量空数据。若同一key中存在大量null值则选择剔除空值、或对其进行打散的操作。
2.设置负载均衡,set hive.groupby.skewindata = true;//底层将其转为多job关联模式
3.检查类型是否需要强转:最新版本的hive中会对类型进行默认强转操作,但若hive版本较老,则需要手动使用cast强转。
4.SQL优化:①使用group by 代替distinct group
②mapjoin, 在map阶段进行提前聚合,降低reduce阶段Shuffle量。

PS:网上存在一些通过更改reduce Task个数来尝试解决数据倾斜问题的,但这种操作本质上不可取。因为reduce阶段的操作都是task从所有mapTask中拉取运算结果进行计算,reduceTask相互不存在并行执行同一任务的关系。每个reduceTask单独计算全部任务,故无效。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值