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

Windows系统下Jupyter Notebook创建SparkContext挂起问题求助

问题原因分析及解决办法

我之前在Windows上折腾Spark和Jupyter的时候也碰到过一模一样的卡壳问题,结合你的环境配置和症状,大概率是这几个原因在搞鬼:

1. 环境变量冲突/配置不规范

你的用户变量和系统变量里的HADOOP_HOME、SPARK_HOME路径不一致,比如:

  • 用户变量HADOOP_HOME指向winutils根目录,但系统变量指向了winutils\bin
  • 用户变量SPARK_HOME是Spark根目录,系统变量却指向了bin子目录

Spark启动Java网关时会读取这些变量,路径不一致会导致它找不到正确的依赖文件或执行程序,直接卡在等待Java进程初始化的环节。

2. Jupyter与pyspark-shell的Python环境不匹配

pyspark-shell默认使用的是系统默认Python或者Spark配置的Python解释器,但Jupyter可能用的是虚拟环境、Anaconda环境或者另一个版本的Python。环境不匹配会导致Spark相关依赖加载异常,Java网关启动失败。

3. Winutils权限/版本问题

Windows下Spark依赖winutils模拟Hadoop的文件系统功能,如果:

  • winutils版本和你的Spark对应的Hadoop版本(2.7)不匹配
  • 临时目录(比如C:\tmp\hive)没有足够的读写权限

都会导致Java进程启动失败,而pyspark一直在等待它生成的连接文件,最终卡壳。


解决步骤

第一步:统一规范环境变量

把用户变量和系统变量里的配置统一成以下内容,避免冲突:

  • HADOOP_HOME:C:\spark-2.3.3-bin-hadoop2.7\winutils(不要加\bin,这是HADOOP_HOME的标准配置)
  • SPARK_HOME:C:\spark-2.3.3-bin-hadoop2.7(同样不要加\bin)
  • JAVA_HOME:C:\Java\jdk1.8.0_212
  • PATH中添加:%SPARK_HOME%\bin、%HADOOP_HOME%\bin、%JAVA_HOME%\bin,并把这些路径移到PATH最前面,避免其他版本的程序干扰。

配置完成后重启电脑,确保环境变量生效。

第二步:验证Python环境一致性

  1. 在Jupyter Notebook中运行这段代码,查看当前使用的Python路径:
import sys
print(sys.executable)
  1. 打开命令行运行pyspark-shell,在交互式环境中同样运行上面的代码,对比两个路径是否一致。
  2. 如果不一致:
    • 要么切换Jupyter的内核到pyspark-shell使用的Python环境
    • 要么在Jupyter的Python环境中重新安装对应版本的pyspark:pip install pyspark==2.3.3

第三步:修复Winutils权限

打开命令行,进入C:\spark-2.3.3-bin-hadoop2.7\winutils\bin目录,执行以下命令(如果没有C:\tmp\hive目录,先手动创建):

winutils.exe chmod 777 C:\tmp\hive

这一步是给Spark需要的临时目录赋予足够的读写权限,避免Java进程启动失败。

第四步:在Jupyter中手动初始化Spark(绕过环境变量冲突)

如果上面的步骤还没解决问题,可以在Jupyter中手动指定环境变量后再初始化SparkContext,避免系统环境变量的干扰:

import os
import sys

# 手动设置环境变量
os.environ['SPARK_HOME'] = 'C:\\spark-2.3.3-bin-hadoop2.7'
os.environ['HADOOP_HOME'] = 'C:\\spark-2.3.3-bin-hadoop2.7\\winutils'
os.environ['JAVA_HOME'] = 'C:\\Java\\jdk1.8.0_212'

# 添加Spark的Python依赖路径
sys.path.append(os.path.join(os.environ['SPARK_HOME'], 'python'))
sys.path.append(os.path.join(os.environ['SPARK_HOME'], 'python\\lib\\py4j-0.10.7-src.zip'))  # Spark2.3.3对应的py4j版本是0.10.7,别搞错

# 初始化SparkContext
from pyspark import SparkContext, SparkConf
conf = SparkConf().setAppName("JupyterTest").setMaster("local[*]")
sc = SparkContext(conf=conf)

# 测试是否正常
print(sc.version)

第五步:查看错误日志定位问题

如果还是卡壳,可以去临时目录(一般是C:\Users\<你的用户名>\AppData\Local\Temp)找前缀为spark-的日志文件,里面会记录Java进程启动失败的具体错误信息,比如找不到类、权限不足等,根据日志再针对性解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:02:34