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

GCP Dataproc上Spark-submit多模式运行异常问题求助

GCP Dataproc集群Spark运行异常排查方案

场景1:本地模式正常运行

本地模式下通过setMaster("local[*]")配置SparkConf,执行spark-submit运行JAR无问题,说明代码逻辑本身无错误,异常均来自集群环境配置或资源访问问题。


场景2:Standalone模式下MetricsSystem初始化失败

问题现象

配置Standalone模式SparkConf(指定master地址、资源参数等)后,执行spark-submit出现Master无响应,核心错误日志:

java.lang.IllegalArgumentException: requirement failed: Can only call getServletHandlers on a running MetricsSystem

解决步骤

  • 对齐Spark版本:确保本地编译JAR使用的Spark版本与Dataproc集群预装的Spark版本完全一致,版本不匹配会导致Metrics组件初始化逻辑冲突。
  • 移除代码硬编码配置:不要在代码中硬编码setMaster、资源参数(如setExecutorMemory),改用spark-submit命令行参数指定,例如:
    spark-submit --master spark://<dataproc-master-ip>:7077 --executor-memory 4g your-app.jar
    
    Dataproc的Standalone集群有默认配置,代码硬编码会覆盖集群配置引发异常。
  • 禁用自定义Metrics配置:如果代码中自定义了MetricsSystem相关配置,暂时注释掉,改用Dataproc集群默认的Metrics监控组件,避免初始化流程冲突。

场景3:YARN模式下文件路径不存在

问题现象

切换到YARN模式后,仅设置应用名称的SparkConf,执行spark-submit后作业被接受但无法运行,核心错误日志:

java.io.FileNotFoundException: /home/aavashbhandari/dataset/California_Edges.txt (No such file or directory)

解决步骤

  • 上传文件到GCS分布式存储:Dataproc的YARN集群中,Executor节点无法访问Master节点或本地机器的本地文件系统,必须将数据集上传到Google Cloud Storage(GCS),代码中使用GCS路径访问,例如:
    // 替换本地路径为GCS路径
    val df = spark.read.text("gs://your-bucket-name/dataset/California_Edges.txt")
    
  • 验证文件与权限:用gsutil ls gs://your-bucket-name/dataset/California_Edges.txt确认文件存在,同时检查Dataproc集群服务账号是否有该GCS Bucket的访问权限(默认服务账号具备基础访问权限,自定义权限需检查IAM配置)。
  • 避免本地路径依赖:永远不要在分布式集群模式下使用本地绝对路径,所有依赖文件必须放在分布式存储(GCS、HDFS等)中,确保所有Executor节点都能访问。

内容的提问来源于stack exchange,提问作者Aavash Bhandari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:55:34