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

多Spark-submit作业运行报错:DSE Cassandra集群资源配置排查

问题分析与解决方案

咱们先从资源核算入手,看看你当前的配置为啥没办法并行跑多个Spark作业:

集群资源总览

你的集群是4个节点,每个节点4核、6GB内存,那:

  • 集群总CPU核心:4节点 × 4核 = 16核
  • 集群可用内存(要留一部分给DSE/Cassandra自身运行,不能全给Spark):每个节点大概能给Spark分配4GB左右,总可用内存约4节点 × 4GB = 16GB

当前单作业的资源占用问题

你给每个Spark作业设置的参数,已经把集群的大部分资源占满了:

  • CPU方面:spark.executor.instances=4 × spark.executor.cores=2 = 8核,直接占了总核心的50%
  • 内存方面:spark.executor.instances=4 × spark.executor.memory=2g = 8GB,再加上cluster模式下driver会占用worker节点的2GB内存,单作业总共要占10GB内存,几乎把可用内存用掉大半

更关键的是,每个节点只有4核,你给每个executor分配2核,意味着单个节点最多只能跑2个executor,但同时还要容纳driver或者Cassandra的进程,资源根本腾不出来给第二个作业,这就是为什么第二个作业会报"Initial job has not accepted any resources"的错误。

调整建议(让多作业并行运行)

1. 缩减单作业的固定资源配置

把单个作业的资源需求降下来,给其他作业留空间:

  • 调低executor实例数和核数:比如把spark.executor.instances改为2,spark.executor.cores改为1,这样单作业只占用2×1=2核,CPU资源压力瞬间减小
  • 调整executor内存:考虑到每个节点要给Cassandra留至少2GB内存,把spark.executor.memory改为1.5g,单作业内存占用变为2×1.5g=3g,加上driver的1GB(可以把spark.driver.memory降到1g,非必要别占太大),总内存只占4GB,剩余资源足够跑多个作业

调整后的参数示例:

.set("spark.executor.memory", "1.5g")
.set("spark.driver.memory", "1g")
.set("spark.submit.deployMode", "cluster")
.set("spark.executor.instances", "2")
.set("spark.executor.cores", "1")

2. 开启动态资源分配

开启Spark的动态资源分配功能,让Spark根据作业的实际需求自动调整executor数量,最大化资源利用率:

.set("spark.dynamicAllocation.enabled", "true")
.set("spark.dynamicAllocation.minExecutors", "1")
.set("spark.dynamicAllocation.maxExecutors", "6")

开启后,单个作业不会一直占用固定数量的executor,当作业完成或者资源空闲时,会释放executor给其他作业使用。

3. 注意DSE与Spark的资源隔离

确保每个节点给Cassandra预留了足够的内存(至少2GB),避免Spark占用过多内存导致Cassandra性能下降甚至崩溃,这也是DSE集群中必须注意的点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:34:08