安装Hadoop 3.3.1后pyspark异常,spark-shell却正常,原因何在?
问题描述
原本安装Spark 3.3.1时,spark-shell和pyspark命令均可正常运行。安装Hadoop 3.3.1后,pyspark命令出现异常:
- 执行
pyspark2 --num-executors 4 --executor-memory 1g后仅打开Jupyter Notebook,界面无Spark标识,且无法像之前一样在CMD中启动Python Shell交互环境; spark-shell仍可正常启动并进入Scala交互环境。
环境配置
系统变量
JAVA_HOME : C:\ProgramData\OpenJDK HADOOP_HOME : C:\ProgramData\hadoop SPARK_HOME : C:\ProgramData\spark PYSPARK_PYTHON : python PYSPARK_DRIVER_PYTHON : jupyter PYSPARK_DRIVER_PYTHON_OPTS : notebook PYTHONPATH : %SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-0.10.9.5-src.zip;%PYTHONPATH%
系统路径
C:\ProgramData\OpenJDK\bin C:\ProgramData\spark\bin C:\ProgramData\hadoop\bin C:\ProgramData\hadoop\sbin C:\Users\A\AppData\Local\Programs\Python\Python311 C:\Users\A\AppData\Local\Programs\Python\Python311\Lib\site-packages
解决方案
1. 修正PYSPARK_DRIVER_PYTHON配置
当前系统变量PYSPARK_DRIVER_PYTHON设为jupyter,这会强制pyspark启动Jupyter而非Python Shell:
- 临时生效:打开CMD,执行
set PYSPARK_DRIVER_PYTHON=python,随后运行pyspark --num-executors 4 --executor-memory 1g即可进入CMD的Python Shell; - 永久生效:在系统变量中修改
PYSPARK_DRIVER_PYTHON值为python,并删除或清空PYSPARK_DRIVER_PYTHON_OPTS变量。
2. 检查Hadoop Windows依赖
Spark在Windows环境依赖Hadoop的winutils组件:
- 确认
C:\ProgramData\hadoop\bin目录下存在winutils.exe和hadoop.dll,版本需与Hadoop 3.3.1匹配; - 若缺失,下载对应版本的winutils包放入该目录,并确保
C:\ProgramData\hadoop\bin在系统PATH的最前列,避免路径冲突。
3. 使用正确的pyspark命令
用户执行的pyspark2并非Spark 3.3.1的标准命令,可能是旧版本残留或错误命名:
- 直接执行
pyspark --num-executors 4 --executor-memory 1g调用正确的Spark Python客户端。
4. 验证PythonPATH路径有效性
确认%SPARK_HOME%\python和py4j压缩包路径实际存在:
- 检查
C:\ProgramData\spark\python\lib\py4j-0.10.9.5-src.zip是否存在,若路径错误或文件缺失,修正PythonPATH配置或重新下载对应版本的py4j包。
内容的提问来源于stack exchange,提问作者user20551429
相关产品推荐
相关产品推荐

