You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark SQL插入13M行至分区表失败,求故障排查方向

问题排查:Spark动态分区写入文件数超出限制导致任务失败

从报错核心信息java.lang.AssertionError: assertion failed: Created file counter 11 is beyond max value 10可以明确:Spark在写入动态分区表时,单个任务在同一个分区下创建的文件数超过了默认上限(10个),触发断言检查失败。以下是具体排查和解决方向:

  • 调整动态分区文件数上限参数
    Spark参数spark.sql.sources.maxConcurrentWrites默认值为10,控制单个任务每个分区允许创建的最大文件数。可在执行SQL前临时设置:

    set spark.sql.sources.maxConcurrentWrites=50;
    

    或提交任务时通过配置项指定:

    --conf spark.sql.sources.maxConcurrentWrites=50
    

    数值可根据数据量和分区实际情况调整。

  • 检查分区数据分布
    可能存在某个partition_name对应的数据量远大于其他分区,导致单个任务处理时生成过多小文件。先查询各分区数据量:

    select partition_name, count(*) from (你的子查询) group by partition_name order by count(*) desc;
    

    若发现极端数据量分区,考虑拆分分区或调整任务并行度。

  • 优化任务并行度
    增加任务并行度,减少单个任务处理的数据量,从而降低单分区文件数。可调整以下参数:

    set spark.sql.shuffle.partitions=200; -- 默认200,可按数据量放大
    set spark.default.parallelism=200;
    
  • 排查数据倾斜问题
    如果某个分区数据量异常大,大概率是数据倾斜导致。通过抽样分析partition_name的分布,确认是否存在分区键选择不合理、异常数据等情况,针对性优化数据分布。

  • 控制单文件记录数
    设置spark.sql.files.maxRecordsPerFile限制每个输出文件的记录数,减少小文件生成:

    set spark.sql.files.maxRecordsPerFile=1000000; -- 每个文件最多100万条记录
    

内容的提问来源于stack exchange,提问作者Jaumzera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:05:23