解决:springboot项目访问hdfs文件提示guava版本不兼容

1、问题描述

版本说明:我用的hadoop版本:3.1.3

项目可以正常启动,但是调用访问hdfs的服务时候报错,报错消息如下:com.google.common.base.preconditions.checkArgument(ZL java/lang/String;Ljava/lang/Object:)V

原因分析:

  • java.lang.NoSuchMethodError:这个错误表示在运行时尝试调用一个不存在的方法
  • com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object:)V这个方法找不到,通常是是因为类路径(classpath)上有不兼容的版本

Apache Hadoop 使用 Guava 库(之前叫做 Google Collections),Guava 库中的 Preconditions 类提供了各种前置条件检查的方法。NoSuchMethodError 表明项目中包含的 Guava 库版本与 Hadoop 预期的版本不一致。可能的情况是,项目中包含了一个较旧或较新的 Guava 版本,而这个版本中没有 Configuration.java 文件中调用的那个特定方法签名。

2、解决方法

在项目的pom文件中加入与hadoop版本兼容的guava版本:

复制代码
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>21.0</version>
        </dependency>
3、补充知识
  • guava库:

Guava库是由Google开发和维护的一组开源的Java库,它提供了许多Google内部Java项目依赖的核心库。Guava库包含了大量用于集合、缓存、支持原语操作、并发库、通用注解、字符串处理、I/O等等的实用工具类和增强功能。使用Guava库可以帮助开发者写出更加简洁、可读性更强、更可靠的Java代码,同时提高代码质量,减少开发时间,并鼓励使用Java平台的最佳实践。因此,Guava库在Java开发者中非常受欢迎,是Java开发中不可或缺的工具之一。

相关推荐
山河亦问安5 天前
令牌桶算法的限流组件实现
guava
聊天QQ:2769988511 天前
多智能体分布式模型预测控制在编队中的奇幻之旅
guava
武子康12 天前
Java-193 Spymemcached 深入解析:线程模型、Sharding 与序列化实践全拆解
java·开发语言·redis·缓存·系统架构·memcached·guava
武子康13 天前
Java-192 深入拆解 EVCache 内部原理:Memcached 架构、Slab 分配与 LRU 过期机制全解析
数据库·redis·缓存·架构·memcached·guava·evcache
武子康14 天前
Java-190 EVCache入门:Netflix 级分布式缓存架构、性能指标与多区域部署全解析
java·redis·分布式·缓存·架构·guava·guava cache
武子康14 天前
Java-189 Guava Cache 源码剖析:LocalCache、Segment 与 LoadingCache 工作原理全解析
java·redis·后端·spring·缓存·guava·guava cache
Dolphin_Home14 天前
【实用工具类】基于 Guava Cache 实现通用 Token 缓存工具类(附完整源码)
spring·缓存·guava
武子康15 天前
Java-187 Guava Cache 并发参数与 refreshAfterWrite 实战:LoadingCache 动态加载与自定义 LRU 全解析
java·开发语言·spring boot·redis·spring·缓存·guava
武子康15 天前
Java-188 Guava Cache 疑难问题实战:OOM、过期清理、命中率异常和阻塞排查
java·spring boot·redis·后端·spring·缓存·guava