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

Windows本地spark-submit提交任务SparkContext初始化失败

问题原因
  • Spark的底层文件操作逻辑依赖Hadoop的相关实现,Windows环境下运行Spark(包括本地模式)不需要部署完整的Hadoop集群,但必须依赖winutils.exe这个Windows平台适配工具,用来处理文件权限校验、路径格式转换等底层操作,你收到的报错就是因为缺少这个工具的相关配置。
  • spark-shell可以正常启动的原因是,spark-shell启动脚本默认会自动将%SPARK_HOME%临时设置为hadoop.home.dir参数的值,优先读取Spark安装目录下bin文件夹里的winutils.exe,而你自行开发的应用通过spark-submit提交时,默认不会自动注入这个配置,所以会触发找不到配置的报错。
解决方法

以下方案任选其一即可:

方案1:提交命令临时添加配置(无需修改系统环境,适合临时测试)

在原spark-submit命令中添加JVM参数指定hadoop.home.dir为你的Spark安装根目录即可:

%SPARK_HOME%\bin\spark-submit --master local --conf spark.driver.extraJavaOptions="-Dhadoop.home.dir=%SPARK_HOME%" --class example.bd.MyApp target\scala-2.12\sparkapp_2.12-1.5.5.jar

注意:需要确保%SPARK_HOME%\bin目录下存在对应版本的winutils.exe,大部分官方提供的Windows版Spark预编译包已经自带该文件。

方案2:配置系统环境变量(永久生效,推荐)

  • 新增系统环境变量HADOOP_HOME,变量值填写你的Spark安装根目录的绝对路径(和SPARK_HOME的值完全一致即可)
  • 编辑系统变量Path,新增一条%HADOOP_HOME%\bin
    配置完成后重启命令行窗口,再次执行spark-submit命令即可正常运行。

方案3:代码中硬编码配置(仅适合本地测试场景,不推荐生产使用)

在创建SparkConf实例之前,手动设置系统属性指定hadoop.home.dir路径:

package example.bd
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._

object MyApp {
    def main(args : Array[String]) {
        // 新增这一行,路径替换为你本地的Spark安装根目录绝对路径
        System.setProperty("hadoop.home.dir", "C:\\spark-3.x.x-bin-hadoop3")
        val conf = new SparkConf().setAppName("My first Spark application")
        val sc = new SparkContext(conf)
        println("hi everyone")
    }
}

内容的提问来源于stack exchange,提问作者Aron Latis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:54:04