Spark-2.0.3中spark.sql.shuffle.partitions设置不生效问题咨询
解决Hive-On-Spark中Shuffle分区数不符合预期及Full GC问题
首先,我得拆解你遇到的两个核心问题:shuffle分区数未达到设置值,以及复杂CUBE SQL触发的Full GC——这两者其实高度相关:分区数不足导致单任务处理的数据量过大,最终引发GC异常。下面分场景给你具体的排查和解决思路:
一、为什么spark.sql.shuffle.partitions=1201不生效?
默认情况下,Spark 3.x及以上版本开启了自适应执行(Adaptive Execution, AE),它会根据实际数据量动态调整shuffle分区数:如果shuffle后出现大量小分区,Spark会自动合并它们,减少任务数以提升运行效率。这就是你看到任务数远低于1201的核心原因。
针对简单GROUP BY场景的解决方法
如果你必须强制使用指定的shuffle分区数,或者希望避免自动合并小分区,可以调整以下参数:
- 关闭自适应的分区合并功能:
set spark.sql.adaptive.coalescePartitions.enabled=false; - 或者提高合并小分区的阈值,让Spark只合并极小的分区(根据你的数据量调整):
set spark.sql.adaptive.coalescePartitions.minPartitionSize=1g; - 另外,检查Hive预聚合参数的影响:
hive.map.aggr=true(默认开启)会在Map端做预聚合,减少Shuffle的数据量,也可能间接导致最终Reduce任务数减少。如果不需要预聚合,可以临时关闭:set hive.map.aggr=false;
二、GROUP BY CUBE场景的Stage-2任务数过少及Full GC问题
CUBE操作会生成维度的所有组合,数据处理量本身就大,如果分区数不足,单个任务要处理的数据集会非常庞大,直接触发Full GC。除了自适应执行的影响,还有几个特定的参数和优化手段:
1. 强制指定CUBE阶段的分区数
Hive-On-Spark对CUBE/ROLLUP这类多维聚合操作有专门的参数控制Reduce任务数,你可以直接设置:
set hive.cube.reduce.tasks=1201;
这个参数会覆盖Spark默认的shuffle分区设置,专门作用于多维聚合场景。
2. 解决数据倾斜(根治Full GC的关键)
如果CUBE的某些维度值(比如NULL值、高频热点值)数据量极大,即使设置了足够的分区数,也会出现单个分区数据量过载的情况。可以尝试:
- 加盐打散:对倾斜的维度字段添加随机后缀,打散到多个分区后再聚合,最后再合并结果:
select a, b, sum(total_c) from ( select a, b, sum(c) as total_c from ( select a, b, c, concat(b, '_', cast(rand()*10 as int)) as b_salt -- 对倾斜字段b加盐 from tbl_a ) t1 group by a, b, b_salt ) t2 group by a, b; - 启用Spark倾斜自动优化:让Spark自动识别并拆分倾斜分区:
set spark.sql.adaptive.skewJoin.enabled=true; set spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes=256m; -- 设置倾斜分区的阈值
3. 内存优化缓解Full GC
如果分区数调整后仍有GC问题,可以进一步优化Executor内存配置:
- 增大Executor内存(根据集群资源调整):
set spark.executor.memory=16g; set spark.executor.cores=4; -- 对应调整CPU核心数,保证内存-CPU比例合理 - 调整Spark内存分配比例,给执行内存更多空间:
set spark.memory.fraction=0.7; -- 默认0.6,提高执行内存占比 set spark.memory.storageFraction=0.2; -- 降低存储内存占比,腾给执行内存
三、验证方法
每次调整参数后,你可以通过Spark UI的Stage页面验证:
- 查看Shuffle Read/Write的数据量,确认分区数是否符合预期
- 检查每个Task处理的数据量,如果大部分Task的数据量接近(比如100MB-1GB),说明分区设置合理
- 观察GC日志,看Full GC的频率是否降低
内容的提问来源于stack exchange,提问作者KAs
相关产品推荐
相关产品推荐

