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

PySpark集群模式Executor异常终止(KILLED exitStatus143)问题排查

解决Docker部署Spark集群模式下Worker无法连接Cassandra的问题

问题根源

Docker容器的网络隔离特性导致:Spark Worker容器内的localhost指向容器自身,而非Cassandra容器或宿主机,因此集群模式下Worker无法通过localhost:9042访问Cassandra。而local模式下Driver运行在宿主机(或与Cassandra同网络的容器),所以能正常连接。

解决方案

1. 统一Docker网络

确保Spark Master、Worker及Cassandra容器处于同一个自定义Docker网络中:

  • 创建自定义网络:
    docker network create spark-cassandra-net
    
  • 启动所有容器时加入该网络:
    • Cassandra启动命令示例:
      docker run -d --name cassandra --network spark-cassandra-net cassandra:latest
      
    • Spark Master启动命令示例:
      docker run -d --name spark-master --network spark-cassandra-net -p 7077:7077 -p 8080:8080 spark:latest master
      
    • Spark Worker启动命令示例:
      docker run -d --name spark-worker --network spark-cassandra-net spark:latest worker spark://spark-master:7077
      

2. 修改Cassandra连接地址

将PySpark应用中Cassandra的连接地址从localhost:9042改为Cassandra容器的容器名(或自定义网络内的IP,容器名更稳定):

  • 在代码中配置:
    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder \
        .appName("KafkaToCassandra") \
        .config("spark.cassandra.connection.host", "cassandra") \
        .getOrCreate()
    
  • 或在spark-submit命令中添加配置:
    spark-submit --master spark://localhost:7077 --conf spark.cassandra.connection.host=cassandra your_app.py
    

3. 检查Cassandra监听配置

确保Cassandra允许外部容器访问:

  • 修改Cassandra的cassandra.yaml配置文件:
    • 将listen_address和rpc_address设置为0.0.0.0(允许所有网络访问)
    • 官方Cassandra镜像默认已配置为允许外部访问,若使用自定义镜像需确认此配置。

4. 验证网络连通性

进入Spark Worker容器,测试与Cassandra的连通性:

docker exec -it spark-worker nc -zv cassandra 9042

若返回succeeded!则说明网络连通正常。

关于exitStatus143的说明

Executor的exitStatus143是收到SIGTERM信号导致的终止,本质是Worker因无法连接Cassandra导致任务失败,被Spark集群终止进程,解决网络连接问题后该状态会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:25:57