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

Spark on Mesos集群模式提交任务报Driver cores正数异常排查

问题根因

这个报错是Spark客户端侧的逻辑bug导致的,和实际传入的driver核数参数没有关系,核心触发逻辑:

  • 开启spark.master.rest.enabled=true走REST协议向Mesos dispatcher提交cluster模式任务时,受旧版本Spark的两个逻辑缺陷影响:
    1. 参数映射错位:命令行传入的--driver-cores只会被写入Mesos专属配置spark.mesos.driver.cores,不会同步给通用配置spark.driver.cores,但客户端本地的参数校验逻辑恰恰是读spark.driver.cores判断核数合法性,读不到值就会取默认值0,直接抛出Driver cores must be a positive number异常。
    2. 执行顺序颠倒:这个参数校验的步骤,是在REST请求已经发给dispatcher、dispatcher已经成功接收任务之后才执行的。所以才会出现本地命令行抛错,但任务实际已经在集群正常运行的现象——这个报错根本没发生在dispatcher端,只出现在本地跑spark-submit的进程里,自然在dispatcher的WebUI日志里找不到相关报错记录。
  • 这个是Spark 2.4.4及更早版本的已知问题,在Mesos cluster部署模式下非常容易复现。
解决方案

按优先级选以下方案处理即可:

  • 临时修复(不用改版本,立刻生效)
    不要只靠--driver-cores传参,提交时显式通过配置项给两个参数都赋值,绕开参数映射的bug:
    --conf spark.driver.cores=4 \
    --conf spark.mesos.driver.cores=4
    
    加完这两个配置再提交,本地校验能正常读到核数值,就不会再抛错。
  • 永久修复
    升级Spark到2.4.5、3.0.0及以上版本,官方已经在这些版本里修复了这个参数映射和执行顺序的bug,升级后正常用--driver-cores传参就可以,不需要额外加配置。
  • 额外优化点:当前提交命令里--py-files传的文件和最后指定的主程序文件是同一个,--py-files是用来上传依赖的py脚本、zip/egg格式依赖包的,主程序直接写在命令末尾即可,重复传不会报错但属于冗余配置,可以删掉。

内容的提问来源于stack exchange,提问作者Calvin Valentino Gosal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:57:33