MacBook运行pyspark启动时报Java异常如何排查修复?
问题根因
你遇到的报错核心是Spark 3.1.2版本与JDK 16不兼容:Java 9之后引入的模块化系统限制了跨模块反射访问权限,而Spark 3.1.x系列官方仅支持JDK 8和JDK 11,使用JDK 16会触发java.nio模块的访问权限异常,导致Java网关进程启动失败。
解决方案
方案一(推荐):切换到兼容的JDK版本
操作步骤如下:
- 执行命令查看本机所有已安装的JDK版本:
/usr/libexec/java_home -V - 在输出中找到JDK 8(你已经安装了jre-8u301,对应版本号为1.8.0_301)对应的路径,修改
~/.bash_profile中的JAVA_HOME配置,替换原有配置为:export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
如果偏好使用JDK 11,将上方命令中-v后的参数改为11即可。 - 执行命令让配置生效:
source ~/.bash_profile
注意:如果你的终端使用的是macOS Catalina之后默认的zsh,需要将上述配置添加到
~/.zshrc文件中,再执行source ~/.zshrc生效。
- 验证JDK版本是否切换成功:
java -version
确认输出为1.8.x或11.x版本后,重新执行pyspark即可正常启动。
方案二:保留JDK 16,添加启动参数绕过权限限制
如果需要保留JDK 16作为系统默认Java版本,可以通过添加JVM启动参数放开模块访问限制:
修改~/.bash_profile(或~/.zshrc),添加以下环境变量:
export PYSPARK_SUBMIT_ARGS="--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED pyspark-shell"
配置生效后重新启动pyspark即可。
内容的提问来源于stack exchange,提问作者Ying Xiong
相关产品推荐
相关产品推荐

