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

如何强制Spark仅使用单个CPU核心开展加速实验

Spark单核心强制限制方案

配置失效原因

原有配置不生效的核心原因:

  1. local模式下spark.executor.instances、spark.executor.cores等集群执行器配置无任何作用,所有计算逻辑均运行在Driver进程内
  2. 默认master("local")等价于master("local[*]"),会自动使用设备全部可用核心
  3. 未限制Spark默认并行度,多分区会触发多任务并行执行

完整配置方案

  • 修改master声明指定单线程
    将master配置改为.master("local[1]"),方括号内的数值为Spark Driver可用的最大线程数,设为1即强制所有Spark任务串行执行
  • 补充并行度限制配置
    在原有配置基础上增加以下参数:
    os.environ['NUMBEXPR_MAX_THREADS'] = 1
    os.environ['NUMEXPR_NUM_THREADS'] = 1
    spark = SparkSession.builder \
        .master("local[1]") \
        .config("spark.executor.instances", "1") \
        .config("spark.executor.cores", "1") \
        .config("spark.driver.cores", "1") \
        .config("spark.task.cpus", "1") \
        .config("spark.sql.shuffle.partitions", "1") \
        .config("spark.default.parallelism", "1") \
        .config("spark.driver.memory", "50g") \
        # 关闭内置多线程优化组件,避免隐性并行
        .config("spark.shuffle.io.numConnectionsPerPeer", "1") \
        .config("spark.reducer.maxReqsInFlight", "1") \
        .config("spark.sql.execution.arrow.enabled", "false") \
        .config("spark.sql.parquet.enableVectorizedReader", "false") \
        .getOrCreate()
    
  • 可选:操作系统级CPU绑定
    若要彻底避免进程被调度到其他核心,可在启动脚本前通过taskset命令绑定进程到指定核心:
    taskset -c 0 python your_spark_script.py
    
    该命令会将整个Python进程及内部所有子线程绑定到0号核心,实现单核心100%占满的效果

注意事项

  • 所有涉及shuffle、重分区的算子都要手动确认最终分区数为1,避免多分区触发多任务
  • 避免使用自带线程池的功能(如pandas UDF、多线程第三方库),这类功能会绕过Spark配置启动额外线程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:36:02