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

CDH从5.5.4升级至5.13.0后Spark作业因Jackson依赖失败

解决CDH 5.13.0升级后Spark作业Jackson Databind冲突及Oozie状态不稳定问题

我之前帮不少用户处理过这类CDH升级后的Spark兼容性问题,咱们先把问题拆解清楚:

问题根源

你遇到的java.lang.VerifyError本质是类兼容性冲突:CDH 5.5.4到5.13.0的升级中,Spark 1.6.0依赖的Jackson版本(尤其是com.fasterxml.jackson.databind)和Codahale Metrics的MetricsModule版本不匹配,导致MetricsModule无法被识别为jackson.databind.Module的实现类,触发了字节码验证错误。而Oozie启动器状态时好时坏,是因为类加载顺序的随机性——有时候集群的正确类先加载就成功,有时候用户作业带的旧依赖先加载就失败。

分步解决方案

1. 清理作业依赖,排除冲突Jar包

检查你的Spark作业打包配置(Maven/Gradle),排除掉所有和Jackson、Codahale Metrics相关的依赖,改用CDH集群提供的版本:

  • Maven示例配置:
<dependencies>
    <!-- Spark核心依赖,设置为provided避免打包进Jar -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.10</artifactId>
        <version>1.6.0-cdh5.13.0</version>
        <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.codahale.metrics</groupId>
                <artifactId>metrics-json</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 其他业务依赖同理,排除冲突的Jackson/Metrics组件 -->
</dependencies>
  • Gradle示例配置:
dependencies {
    provided "org.apache.spark:spark-core_2.10:1.6.0-cdh5.13.0"
    // 排除冲突依赖
    configurations.all {
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
        exclude group: 'com.codahale.metrics', module: 'metrics-json'
    }
}

2. 配置Oozie使用集群系统库

在Oozie的job.properties里添加以下配置,强制Oozie使用CDH 5.13.0的Spark环境,避免加载旧依赖:

oozie.use.system.libpath=true
spark.yarn.jars=hdfs:///path/to/cdh5.13.0/spark/jars/*.jar

注意替换hdfs:///path/to/cdh5.13.0/spark/jars/为你集群中Spark Jar包的实际HDFS路径。

3. 重新打包作业,清理旧Jar

执行mvn clean package(或Gradle的clean build),确保打包后的Jar包中不包含任何Jackson、Codahale Metrics的Jar文件。可以用jar tf your-job.jar命令检查打包内容,确认没有冲突的Jar。

4. 检查Spark集群配置

确保Spark的以下配置没有被错误修改:

  • spark.driver.userClassPathFirst=false(默认值,不要改成true,否则用户Jar的类会优先加载,覆盖集群版本)
  • spark.executor.userClassPathFirst=false

如果之前为了其他需求修改过这两个参数,改回默认值即可。

验证效果

按照以上步骤处理后,重新提交Oozie作业:

  • Jackson的类兼容性问题会被解决,VerifyError不再出现
  • Oozie启动器的状态会稳定为成功,因为类加载冲突被彻底消除

内容的提问来源于stack exchange,提问作者Fawze Abujaber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:38:25