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

如何解决Java提交Spark Jobserver作业时出现JOB Loading Failed错误

报错详情:

{
  "status": "JOB LOADING FAILED",
  "result": {
    "message": "com.sample.wordcount.SparkJavaJob cannot be cast to spark.jobserver.api.SparkJobBase",
    "errorClass": "java.lang.ClassCastException"
  }
}

问题根因

该类转换异常本质是提交的作业类和Spark JobServer服务端的类定义不匹配,服务端要求作业类必须继承spark.jobserver.api.SparkJobBase,当前实现的类不符合这个要求。

排查步骤

  • 核对Spark JobServer服务端版本和本地代码依赖的jobserver API版本是否完全一致,大小版本都要对齐,不同版本的Java API接口继承规则有差异。
  • 检查作业jar的打包配置,确认是否把spark-jobserver相关依赖打进了jar包,同包名的重复类会被JVM识别为不同类型,直接触发转换异常。
  • 查看本地依赖的JSparkJob接口源码,确认它是否默认继承了SparkJobBase,部分老旧版本的Java API没有做这个默认继承。

解决方案

1. 调整依赖配置

把本地构建配置里spark-jobserver相关依赖的版本改成和服务端完全一致,同时把依赖scope设为provided,避免相关类打进作业jar。
Maven配置示例:

<dependency>
    <groupId>spark.jobserver</groupId>
    <artifactId>spark-jobserver-japi_2.12</artifactId>
    <version>替换为你的服务端实际版本号</version>
    <scope>provided</scope>
</dependency>

Gradle配置示例:

compileOnly 'spark.jobserver:spark-jobserver-japi_2.12:你的服务端版本号'

2. 修正作业类继承关系

如果版本对齐后还是报错,说明你使用的JobServer版本需要作业类显式继承SparkJobBase,修改代码如下:

package com.sample.wordcount;

import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import spark.jobserver.japi.JSparkJob;
import spark.jobserver.api.JobEnvironment;
import spark.jobserver.api.SparkJobBase;

public class SparkJavaJob extends SparkJobBase implements JSparkJob {
    @Override
    public Object run(Object sc, JobEnvironment runtime, Config data) {
        return "OK";
    }

    @Override
    public Config verify(Object sc, JobEnvironment runtime, Config config) {
        return ConfigFactory.empty();
    }
}

3. 重新提交作业

清理历史构建产物,重新打包作业jar后提交到Spark JobServer即可正常加载。


内容的提问来源于stack exchange,提问作者Abhisek Ray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:18:03