安装无Hadoop版Spark2.3.0时遇java.lang.ExceptionInInitializerError错误
解决Spark 2.3.0在Windows下运行spark-shell的初始化异常问题
你这是踩了Windows环境下运行Spark的两个典型坑:JDK版本不兼容和缺少Hadoop本地依赖库,我给你一步步梳理解决办法:
问题根源拆解
Spark确实能脱离Hadoop集群独立运行,但它核心依然依赖Hadoop的客户端工具类(比如文件系统操作、安全认证相关的基础库);另外Spark 2.3.0官方只支持JDK 7/8,JDK 10的语法和类加载机制变化会直接触发这类初始化异常。
具体修复步骤
1. 降级JDK到8版本
Spark 2.3.x系列对JDK 9及以上版本兼容性极差,官方文档明确推荐使用JDK 8:
- 卸载现有JDK 10,安装JDK 8(Oracle JDK 8或OpenJDK 8都可以)
- 配置环境变量
JAVA_HOME指向JDK 8的安装目录,确保PATH里优先加载JDK 8的bin目录 - 打开新命令行窗口,输入
java -version确认版本显示为1.8.x
2. 配置Hadoop本地工具(winutils)
Windows下运行Spark必须要有Hadoop的本地执行文件(winutils.exe),哪怕你不用Hadoop集群:
- 下载对应Hadoop 2.7版本的winutils包,解压后把
winutils.exe放到一个固定目录(比如D:\hadoop\bin) - 新建系统环境变量
HADOOP_HOME,值设为D:\hadoop(注意是bin目录的上级文件夹) - 将
D:\hadoop\bin添加到系统PATH环境变量中 - 新建环境变量
HADOOP_CONF_DIR,值设为D:\hadoop\etc\hadoop(如果这个目录不存在,手动创建即可)
3. 验证运行
重启命令行窗口,依次执行以下命令确认配置:
echo %JAVA_HOME% echo %HADOOP_HOME% java -version
确认所有配置正确后,再运行spark-shell,应该就能正常启动Spark交互环境了。
内容的提问来源于stack exchange,提问作者Mengge
相关产品推荐
相关产品推荐

