Win10运行无Hadoop版Spark3.3.0报FSDataInputStream类缺失错误咨询
问题根因
你当前是Windows 10运行环境,之前修改的spark-env.sh是类Unix系统(Linux/macOS)专属的Spark配置文件,Windows终端不会加载执行该脚本,因此你配置的SPARK_DIST_CLASSPATH完全没有生效,Spark启动时无法加载Hadoop依赖包,才会抛出org/apache/hadoop/fs/FSDataInputStream类找不到的错误。
额外两个Windows环境特有的注意点:
- 你写的
export SPARK_DIST_CLASSPATH=$(hadoop classpath)是Linux Shell语法,Windows CMD/PowerShell既不识别export关键字,也不支持$()的命令替换写法,就算改对配置文件,直接抄这段配置也会失效。 - 你已经验证Hadoop组件运行正常,说明对应版本的
winutils.exe、hadoop.dll已经配置到位,后续如果Spark启动报原生库、权限类错误,再核对这两个文件版本和Hadoop 3.2.3匹配、放置在%HADOOP_HOME%\bin目录即可。
修复步骤
- 忽略你之前修改的
spark-env.sh文件,Windows环境不需要改动该文件。 - 进入Spark安装目录下的
conf文件夹,找到spark-env.cmd文件,若不存在则将同目录下的spark-env.cmd.template复制一份,重命名为spark-env.cmd。 - 编辑
spark-env.cmd,写入Windows格式的环境变量配置,直接填入你之前执行hadoop classpath返回的完整路径(不要写命令替换逻辑,避免转义问题导致失效):
set SPARK_DIST_CLASSPATH=C:\hadoop-3.2.3\etc\hadoop;C:\hadoop-3.2.3\share\hadoop\common;C:\hadoop-3.2.3\share\hadoop\common\lib\*;C:\hadoop-3.2.3\share\hadoop\common\*;C:\hadoop-3.2.3\share\hadoop\hdfs;C:\hadoop-3.2.3\share\hadoop\hdfs\lib\*;C:\hadoop-3.2.3\share\hadoop\hdfs\*;C:\hadoop-3.2.3\share\hadoop\yarn;C:\hadoop-3.2.3\share\hadoop\yarn\lib\*;C:\hadoop-3.2.3\share\hadoop\yarn\*;C:\hadoop-3.2.3\share\hadoop\mapreduce\lib\*;C:\hadoop-3.2.3\share\hadoop\mapreduce\*
- 关闭所有已打开的终端窗口,重新打开新的CMD/PowerShell,先执行
echo %SPARK_DIST_CLASSPATH%(CMD环境)或$env:SPARK_DIST_CLASSPATH(PowerShell环境),确认能打印出完整的Hadoop类路径,再执行spark-shell/pyspark即可正常启动。
排查技巧&替代方案
- 配置后如果依然报错,可以在启动Spark前先执行
set SPARK_PRINT_LAUNCH_COMMAND=1(CMD环境),再启动Spark,终端会打印实际执行的Java启动命令,查看-classpath参数后的内容是否包含你配置的Hadoop路径,就能快速定位配置是否生效。 - 不想改Spark内置配置的话,可以直接在Windows系统环境变量中新建名为
SPARK_DIST_CLASSPATH的系统变量,变量值填入上述完整Hadoop类路径,保存后重启终端即可全局生效。 - 临时测试的话,可以在当前PowerShell会话中先执行
$env:SPARK_DIST_CLASSPATH = (hadoop classpath),再启动Spark,该配置仅对当前终端会话生效。
内容的提问来源于stack exchange,提问作者meyssam rostamzadeh
相关产品推荐
相关产品推荐

