You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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支持:

    1. 卸载当前高版本Java,安装Java 8/11
    2. 更新系统环境变量JAVA_HOME指向新安装的Java路径
    3. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:22:34