Spark数据倾斜和Hive数据倾斜理解

Spark数据倾斜和Hive数据倾斜理解

Spark数据倾斜出现的现象,原因,方案

现象:

  • 单个或者某几个task拖延整个任务运行时间,导致整体耗时过大
  • 单个task处理数据过多,很容易导致oom

原因:

(1)数据的问题:本身Key的分布不均,这里面含有null值,无效数据,有效数据

解决的方案是对前两点可以直接对数据过滤;对有效数据可以进行隔离操作,将异常的key单独处理,处理好后和正常数据进行union操作,也可以向添加随机值,进行操作后,去掉随机值,再执行一次操作;使用reduceByKey 代替 groupByKey

df.select(“key”).sample(false,0.1).map(k=>(k,1)).reduceBykey(_+_).map(k=>(k._2,k._1)).sortByKey(false).take(10)

(2)spark的使用问题:

解决方案:提高shuffle并行度,rdd和dataframe以及spark sql都可以进行相应参数上的设置;使用map join 代替reduce join(主要考虑的是小表不是很大的情况下,避免shuffle的过程)

Hive数据倾斜出现的原因,方案

1.key分布不均 空值产生的数据倾斜

过滤空值:select * from userid where user_id is not null

赋予空值添加随机值:select * from log a left join user b on case when a.user_id is null then concat(‘hive’,rand()) else a.user_id =b.user_id

2.把不同的数据类型进行关联也会出现数据倾斜

把int类型id转换成为string类型的id

select * from user a left join log b on b.user_id=cast(a.user_id as string)

3.大小表关联查询产生数据倾斜

使用map join来解决小表关联大表的数据倾斜问题。在hive0.11版本后可以设置mapjoin优化开关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值