栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

NoClassDefFoundError - hadoop/crypto/key/KeyProviderTokenIssuer && hadoop/fs/BatchListingOperations

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NoClassDefFoundError - hadoop/crypto/key/KeyProviderTokenIssuer && hadoop/fs/BatchListingOperations

一.引言

使用 spark.hadoopFile 读取 RCFile 时,报错 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/crypto/key/KeyProviderTokenIssuer 与 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/BatchListingOperations,修改依赖解决对应问题。

二.KeyProviderTokenIssuer

由于报错原因为 java.lang.NoClassDefFoundError 而不是 NoSuchMethod,所以基本排除是依赖冲突的高低版本的问题,如果不放心也可以使用编辑器进行全局搜索,这里全局搜索是没有该类的:

确实没有该类,提高 hadoop-common 消除该报错:

        
            org.apache.hadoop
            hadoop-common
            3.1.0
            provided
        

此时代码已有该类:

三.BatchListingOperations

修改 pom 后再次运行任务,再次提示 NoClassDefFoundError,根据上面的经验,这里判断还是没有依赖,所以再次修改 hadoop 版本。

hadoop-common 提高至 3.3.3:

        
            org.apache.hadoop
            hadoop-common
            3.3.3
            provided
        

再次运行任务没有问题:

 

四.判断与排查 1.如何判断没有依赖还是依赖冲突

一般情况下:

NoSuchMethod -> 依赖冲突

NoClassDefFoundError ->

A. 报错有自己代码的异常栈:对应 Class / Object 初始化失败

B. 报错均为官方异常栈:无对应依赖

2.最简单的确认方式

在 idea 或者 maven-tree 中查看报错对应依赖,如果有多个,大概率是依赖冲突,如果一个也搜不到则为无对应依赖,像这样快速查找,即可确定是单个,多个还是没有对应 class。

3.如果寻找对应版本

博主一般直接将报错贴至 Bing 国际版,像上面的错就可以直接得到版本。

 

4.最确切的版本定位

如果要寻找项目真实的版本,可以寻找底层代码的 GitHub,查看你当前调用版本 API 所在 branch 的 pom.xml,其内部的版本即为最确切的版本。例如之前在 Spark - ml.dmlc.xgboost4j / spark 版本匹配与 NoSuchMethodError 解决 一文中我们通过排查源码 pom.xml,才最终定位到当前 spark 版本与 xgboost 指定 spark 版本不一致导致依赖冲突。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031349.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号