You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spark集群作业无法获取资源且Executor持续退出问题求助

看起来你已经把双节点Spark集群的基础搭建工作搞定了,Master和Worker能正常启动、Worker也成功注册,但运行代码时出了问题——结合你给出的环境信息(Spark 2.3.0、CentOS7、已关防火墙),我整理了几个常见的排查方向,你可以一步步验证:

1. 先确认资源配置的合理性

你设置了SPARK_WORKER_MEMORY=2g,但集群总内存是10G,这里可能存在资源分配不匹配的问题:

  • 首先检查Worker的CPU核数配置:集群总共有4核,建议给Worker分配3核(留1核给系统和Master进程),可以在Worker的环境变量里添加:
    export SPARK_WORKER_CORES=3
    
  • 其次,提交任务时要明确指定executor的资源参数,比如用spark-shell启动时:
    spark-shell --executor-memory 4g --total-executor-cores 2
    
    如果请求的资源超过Worker能提供的上限,任务会直接报错。
2. 确保Python环境在集群节点间一致

你配置了PYSPARK_PYTHON=/opt/anaconda3/bin/python,这一步要注意Master和Worker节点的Python路径、版本必须完全一致

  • 登录Worker节点,执行以下命令验证:
    which python
    /opt/anaconda3/bin/python --version
    
    如果Worker上没有这个Anaconda路径,或者Python版本和Master不匹配,PySpark任务会因为找不到正确的Python环境失败。解决办法要么在Worker上安装相同的Anaconda环境,要么把PYSPARK_PYTHON改成两边都存在的Python路径(比如系统默认的/usr/bin/python,注意Spark2.3.0支持Python3.6及以下版本)。
3. 检查网络与Spark配置细节

虽然你设置了SPARK_MASTER_IP,但还有几个网络配置点要确认:

  • Master和Worker节点要能互相ping通对方的IP和主机名,确保主机名解析正常(可以修改/etc/hosts添加双方的IP和主机名映射)
  • $SPARK_HOME/conf/spark-defaults.conf里添加spark.driver.host配置,指定Master节点的IP,避免Worker无法连接Driver进程:
    spark.driver.host=你的Master节点IP
    
  • 最关键的一步:查看Spark日志!Worker节点的日志在$SPARK_HOME/logs目录下的worker-*.out/worker-*.log,Master的日志看master-*.log,日志里会明确给出报错的具体原因(比如资源不足、网络连接失败、依赖缺失等)。
4. 验证Java环境的一致性

你设置了JAVA_HOME=/usr/java/jdk1.8.0_144,同样要保证Worker节点的JAVA_HOME和Master完全一致,且JDK版本是Spark2.3.0支持的(必须是JDK1.8,不能用1.9及以上版本)。在Worker上执行:

echo $JAVA_HOME
$JAVA_HOME/bin/java -version

确认输出和Master节点一致。

5. 排查任务代码本身的问题

如果是运行非常简单的代码(比如sc.parallelize(range(100)).count())报错,那大概率是环境配置问题;如果是自定义代码,要检查Worker节点是否安装了代码依赖的Python库,或者有没有把依赖包上传到集群中。


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

火山引擎 最新活动