Windows Conda虚拟环境无法启动Spark Session问题求助
问题描述
在Windows系统的Conda虚拟Python环境中无法启动Spark Session。此前安装最新Java版本并配置系统环境变量后,曾成功执行以下代码:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("survival").getOrCreate()
但再次执行时出现如下错误:
Py4JJavaError Traceback (most recent call last) Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext. : java.lang.UnsupportedOperationException: getSubject is supported only if a security manager is allowed at java.base/javax.security.auth.Subject.getSubject(Subject.java:347) at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:577) at org.apache.spark.util.Utils$.$anonfun$getCurrentUserName$1(Utils.scala:2416) at scala.Option.getOrElse(Option.scala:189) at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2416) at org.apache.spark.SparkContext.<init>(SparkContext.scala:329) at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58) at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:501) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:485) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:374) at py4j.Gateway.invoke(Gateway.java:238) at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80) at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69) at py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182) at py4j.ClientServerConnection.run(ClientServerConnection.java:106) at java.base/java.lang.Thread.run(Thread.java:1575)
解决方案
该错误根源是Java 17及以上版本移除了SecurityManager相关API,而旧版本的Spark/Hadoop依赖此API导致兼容性问题。可通过以下方式解决:
降级Java版本至Java 8或Java 11
这两个版本是Spark官方推荐的兼容版本,仍保留SecurityManager支持:- 卸载当前高版本Java,安装Java 8/11
- 更新系统环境变量
JAVA_HOME指向新安装的Java路径 - 重启Conda环境和终端,确保环境变量生效
修改Spark配置绕过用户权限检查
在启动SparkSession时添加配置参数,强制采用简单认证并指定本地主机:from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("survival") \ .config("spark.hadoop.security.authentication", "simple") \ .config("spark.driver.host", "localhost") \ .getOrCreate()也可以在Spark的
spark-defaults.conf配置文件中添加全局配置:spark.hadoop.security.authentication simple升级Spark与Hadoop版本
使用Spark 3.3.0及以上、Hadoop 3.3.4及以上版本,这些版本已适配Java 17的API变更。
内容的提问来源于stack exchange,提问作者Prashant
相关产品推荐
相关产品推荐

