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

配置Spark ThriftServer与Spark Connect Server实现同时运行

解决Spark单节点同时运行ThriftServer和Spark Connect的配置问题

问题根源

你的spark-env.sh中executor资源配置总和远超虚拟机可用核心:

  • 虚拟机总可用核心:SPARK_WORKER_CORES=4
  • 配置的executor总核心:SPARK_EXECUTOR_INSTANCES=4 × SPARK_EXECUTOR_CORES=2 = 8
    启动任意一个服务时,Spark会尝试申请远超实际的资源,直接耗尽worker节点的所有核心,导致另一个服务因无法获取资源陷入等待。

配置调整方案

1. 修改全局spark-env.sh配置

调整executor参数,让总核心数不超过worker的可用核心,同时预留资源给两个服务共享:

export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-21.0.7.0.6-1.portable.jdk.x86_64
export SPARK_MASTER_HOST=192.168.2.5
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_URL=spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT
export SPARK_WORKER_CORES=4
export SPARK_WORKER_MEMORY=4g
# 方案1:单executor占用3核,留1核给服务调度
export SPARK_EXECUTOR_INSTANCES=1
export SPARK_EXECUTOR_CORES=3
# 方案2:双executor各占1核,总核心2,剩余2核给另一个服务
# export SPARK_EXECUTOR_INSTANCES=2
# export SPARK_EXECUTOR_CORES=1

2. 启动服务时单独指定资源(无需修改全局配置)

如果不想改动全局配置,可以在启动每个服务时单独限制资源,避免冲突:

  • 启动ThriftServer:
./sbin/start-thriftserver.sh --executor-cores 2 --executor-memory 2g --total-executor-cores 2
  • 启动Spark Connect:
./sbin/start-connect-server.sh --executor-cores 2 --executor-memory 2g --total-executor-cores 2

两个服务各占用2核,刚好匹配虚拟机4核资源,内存也各分配2g,不超过worker总内存。

额外检查项

  • 启动两个服务前,先确保Spark Master和Worker已启动:./sbin/start-all.sh
  • 通过Spark Web UI(默认端口8080)查看资源使用情况,确认两个服务均成功获取到分配的资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 02:04:52