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

如何阻止PySpark使用内存会话并连接WSL本地Spark集群?

本地Spark+Jupyter Notebook连接问题解决方案

环境背景

目标是搭建模拟Azure Synapse Analytics的本地开发沙箱:

  • WSL(Ubuntu)部署Spark 3.3.0
  • Windows端Anaconda Jupyter Notebook作为开发工具
  • 需对接Azure Data Lake Storage Gen2

问题核心

Spark与Notebook单独运行正常,但Notebook无法连接WSL中的Spark集群:

  • 测试代码创建的SparkSession显示master local[1]
  • Spark UI指向http://host.docker.internal:4040/jobs/
  • WSL端Spark UI无任何连接记录

解决步骤

1. 区分本地模式与集群模式

你当前代码使用的master("local[1]")是本地单机模式,会在Notebook进程内启动Spark,而非连接WSL中的独立Spark集群。若要连接WSL的集群,需:

  • 在WSL中启动独立Spark集群:
    $SPARK_HOME/sbin/start-master.sh
    $SPARK_HOME/sbin/start-worker.sh spark://<WSL_IP>:7077
    
  • 修改SparkSession的master参数为WSL集群地址:
    from pyspark.sql import SparkSession
    spark = SparkSession \
        .builder \
        .master("spark://192.168.x.x:7077")  # 替换为你的WSL实际IP(可通过WSL内`hostname -I`获取)
        .appName("Python Spark SQL basic example") \
        .getOrCreate()
    

2. 配置跨环境的Spark环境变量

Windows端Anaconda环境需正确指向WSL中的Spark:

  • 安装findspark库简化配置:
    conda install findspark
    
  • 在Notebook中初始化Spark环境:
    import findspark
    # 替换为WSL中Spark的实际安装路径
    findspark.init("/home/your-user/spark-3.3.0-bin-hadoop3")
    
  • 或直接在Windows系统环境变量中添加:
    • SPARK_HOME: 指向WSL中Spark的路径(例如\\wsl$\Ubuntu\home\your-user\spark-3.3.0-bin-hadoop3)
    • PYSPARK_PYTHON: 指向Windows端Anaconda的Python路径(例如C:\Users\your-user\anaconda3\python.exe)

3. 修复网络与端口问题

  • 端口开放: 在Windows防火墙中开放7077(Spark Master)、4040(Spark UI)、8080(Spark Master UI)端口
  • Spark UI地址修正: 在WSL的spark-env.sh(位于$SPARK_HOME/conf)中添加:
    export SPARK_LOCAL_IP=$(hostname -I | awk '{print $1}')
    export SPARK_MASTER_HOST=$(hostname -I | awk '{print $1}')
    
    重启Spark集群后,UI地址会指向WSL的实际IP,而非host.docker.internal

4. 验证连接

  • 在WSL中访问http://<WSL_IP>:8080,查看Worker节点状态
  • 在Notebook中执行spark.sparkContext.master,确认输出为spark://<WSL_IP>:7077
  • 运行简单Spark任务(如读取本地文件),检查WSL的Spark UI是否显示Job记录

额外:对接Azure Data Lake Storage Gen2

连接ADLS Gen2需在SparkSession中添加相关配置:

spark = SparkSession \
    .builder \
    .master("spark://<WSL_IP>:7077") \
    .appName("ADLS Gen2 Test") \
    .config("fs.azure.account.auth.type.<storage-account-name>.dfs.core.windows.net", "OAuth") \
    .config("fs.azure.account.oauth.provider.type.<storage-account-name>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider") \
    .config("fs.azure.account.oauth2.client.id.<storage-account-name>.dfs.core.windows.net", "<client-id>") \
    .config("fs.azure.account.oauth2.client.secret.<storage-account-name>.dfs.core.windows.net", "<client-secret>") \
    .config("fs.azure.account.oauth2.client.endpoint.<storage-account-name>.dfs.core.windows.net", "https://login.microsoftonline.com/<tenant-id>/oauth2/token") \
    .getOrCreate()

# 测试读取ADLS Gen2文件
df = spark.read.csv("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/path/to/file.csv")
df.show()

内容的提问来源于stack exchange,提问作者Andreas Sundström

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:24:27