浅谈离线数据倾斜
💡
原文中文,约8100字,阅读约需20分钟。
📝
内容提要
本文介绍了优化大数据平台中的数据倾斜问题,包括增加内存、增加reduce个数、自定义分区、重新设计key和使用combinner合并等方法。同时,通过观察Spark UI定位问题,并通过参数调节和SQL语句调节来解决Hive数据倾斜问题。对于Shuffle时数据不均匀导致的数据倾斜,可以采用打散key进行二次聚合、改变join方式、开启spark自适应框架、优化SQL等方法来解决。Spark 3.0中提供了通用倾斜算法来处理更多场景的数据倾斜问题。
🎯
关键要点
- 数据倾斜是指大量相同key被分配到一个分区,导致计算效率低下。
- 数据倾斜的现象包括大多数task执行快,但个别task执行极慢,以及OOM异常。
- 常规解决方案包括增加JVM内存、增加reduce个数、自定义分区、重新设计key和使用combiner合并。
- 数据倾斜通常发生在shuffle操作中,常用算子包括distinct、groupByKey、reduceByKey等。
- Hive数据倾斜的原因包括key分布不均、业务数据特性、建表考虑不周和SQL语句问题。
- Hive数据倾斜的表现为某些TASK执行极慢,且任务进度长时间维持在99%。
- 解决Hive数据倾斜的方法包括参数调节和SQL语句调节,如开启mapjoin和使用合适的join方式。
- 在join操作中,选择key分布均匀的表作为驱动表,避免笛卡尔积。
- 对于count distinct操作,使用sum和group by代替count(distinct)。
- 监控数据倾斜需要关注数据分布,增加数据质量监控和健康度巡检。
- Spark 3.0提供了通用倾斜算法,支持更多场景的数据倾斜处理。
- 开启Spark SQL的自适应关联优化和调整BroadcastHashJoin的阈值可以减少数据倾斜。
- 通过SQL抽样和sample抽样可以定位倾斜key,帮助优化数据处理。
➡️