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

Spark2.3.0+Hadoop3.1.0环境下Java API调用groupByKey异常求助

问题分析与解决方案

我之前在Spark 2.x搭配Hadoop 3.x的环境里碰到过一模一样的问题,这个异常的核心原因是依赖版本冲突:Spark 2.3.0默认依赖的ASM库(asm5.x)和Hadoop 3.1.0依赖的更高版本ASM(7.x)不兼容,导致Spark的ClosureCleaner在处理闭包代码时触发了IllegalArgumentException。

从你的异常栈也能看出来,错误发生在org.apache.xbean.asm5.ClassReader的初始化环节——这是因为类加载器同时加载了两个版本的ASM类,导致版本不匹配的问题。

具体解决方案

你需要在项目构建文件中排除Spark自带的ASM依赖,然后引入与Hadoop 3.1.0兼容的ASM版本(推荐7.0)。

如果使用Maven构建

修改你的pom.xml,添加依赖排除和兼容版本的ASM:

<dependencies>
    <!-- Spark Core依赖,排除自带的ASM -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.3.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm-commons</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.ow2.asm</groupId>
                <artifactId>asm-tree</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- 引入与Hadoop 3.1.0兼容的ASM版本 -->
    <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm</artifactId>
        <version>7.0</version>
    </dependency>
    <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm-commons</artifactId>
        <version>7.0</version>
    </dependency>
    <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm-tree</artifactId>
        <version>7.0</version>
    </dependency>
</dependencies>

如果使用SBT构建

修改你的build.sbt:

// 排除Spark自带的ASM依赖
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.0" excludeAll(
  ExclusionRule(organization = "org.ow2.asm"),
  ExclusionRule(organization = "org.ow2.asm", name = "asm-commons"),
  ExclusionRule(organization = "org.ow2.asm", name = "asm-tree")
)

// 添加兼容的ASM版本
libraryDependencies += "org.ow2.asm" % "asm" % "7.0"
libraryDependencies += "org.ow2.asm" % "asm-commons" % "7.0"
libraryDependencies += "org.ow2.asm" % "asm-tree" % "7.0"

验证方法

修改依赖后,重新编译运行你的简化测试用例:

  • 第一个saveAsTextFile本来就不会触发闭包清理,所以之前能成功;
  • 修改后,groupByKey对应的闭包清理逻辑会使用兼容的ASM版本,应该能正常执行并生成/TEST/testfile2文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:11:21