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

Kubeflow Notebook无法以YARN模式连接远程Spark Session(Client模式故障)

Kubeflow Notebook中Spark YARN Client模式无法运行的解决方案

问题描述

无法在Client模式下运行Spark,从Kubeflow Notebook以YARN模式连接Spark时触发以下错误:

Py4JJavaError: An error occurred while calling o81.showString.
: org.apache.spark.SparkException: Job 0 cancelled because SparkContext was shut down
at org.apache.spark.scheduler.DAGScheduler$$anonfun$cleanUpAfterSchedulerStop$1.apply(DAGScheduler.scala:932)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$cleanUpAfterSchedulerStop$1.apply(DAGScheduler.scala:930)

已验证的前置条件

  • 已在Notebook中成功提交Spark任务
  • 可从Kubeflow Notebook以Cluster模式连接Spark
  • 在Kubernetes Worker节点通过Python Shell能正常运行Spark Session并连接Cloudera管理的远程边缘节点
  • Hadoop与Kubernetes集群间无网络连通性问题

解决方案

1. 指定Spark Driver的可访问地址

初始化SparkSession时,显式配置spark.driver.host为Kubeflow Notebook Pod的IP,同时指定spark.driver.port,确保YARN集群能反向连接到Driver:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .master("yarn") \
    .appName("InteractiveSparkNotebook") \
    .config("spark.driver.host", "<Notebook Pod IP>") \
    .config("spark.driver.port", "4040") \
    .config("spark.driver.bindAddress", "0.0.0.0") \
    .getOrCreate()

获取Notebook Pod IP可在终端执行hostname -i,或通过Kubernetes控制台查看Pod详情。

2. 调整Notebook网络访问权限

确保Notebook Pod的指定端口(如4040)能被YARN集群节点访问:

  • 检查Kubernetes NetworkPolicy是否允许YARN集群网段的流量访问该端口
  • 若使用Istio,需配置VirtualService和DestinationRule开放对应端口

3. 防止SparkContext意外关闭

添加配置禁用SparkContext的自动销毁逻辑(仅用于调试场景):

.config("spark.driver.allowMultipleContexts", "true")

生产环境建议严格管理SparkContext单例,避免多实例冲突。

4. 排查YARN日志定位细节

通过YARN UI或执行以下命令查看Application日志,确认是否存在连接超时、拒绝等具体错误:

yarn logs -applicationId <你的Spark应用ID>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:06:20