Docker部署Spark独立集群Executor频繁退出问题求助
解决Docker Spark独立集群中Executor无法连接Driver的问题
问题核心
Docker容器内的Spark Executor无法访问外部运行的Python Driver,因为Driver默认绑定本地/Docker网桥IP(如172.17.0.2),容器内的Executor无法通过该IP建立连接,导致Executor启动后超时退出,进而触发Initial job has not accepted any resources警告。
解决方案
1. 显式配置Driver的可访问地址
在SparkSession构建时添加两个关键配置,强制Driver暴露给Executor可访问的外部IP和固定端口:
from pyspark.sql import SparkSession if __name__ == '__main__': spark = SparkSession.builder.appName('test') \ .master('spark://192.168.1.169:7077') \ .config("spark.executor.memory", "512m") \ .config('spark.cores.max', '1') \ .config("spark.executor.cores", "1") \ .config("spark.executor.instances", "1") \ # 指定Driver所在机器的外部可访问IP .config("spark.driver.host", "192.168.1.169") \ # 指定固定端口,避免随机端口导致的网络拦截 .config("spark.driver.port", "54321") \ .getOrCreate() data = [("A", 1), ("B", 2), ("C", 3)] columns = ["Letter", "Number"] df = spark.createDataFrame(data, columns) df.show() spark.stop()
2. 验证网络连通性
- 检查Driver所在机器的防火墙,确保开放了指定的
spark.driver.port(如示例中的54321) - 在Spark Worker容器内执行
ping 192.168.1.169,确认能正常连通Driver所在机器
3. 调整Docker网络模式(可选)
如果默认桥接网络存在连通性问题,可将Spark容器切换为host网络模式:
- 启动Master容器时添加参数:
docker run --network host ... - 启动Worker容器时添加参数:
docker run --network host ... - 此模式下容器直接使用宿主机网络栈,Executor可直接访问Driver的宿主机IP,无需额外端口配置
验证
修改配置后重新运行测试代码,若Executor日志不再出现连接超时错误,且df.show()正常输出结果,说明问题已解决。
内容的提问来源于stack exchange,提问作者MagentaPink
相关产品推荐
相关产品推荐

