博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDFS + WEB 项目 报java.lang.VerifyError... 异常
阅读量:5923 次
发布时间:2019-06-19

本文共 1992 字,大约阅读时间需要 6 分钟。

hot3.png

今天在用web项目整合 HDFS 的时候发生了非常诡异的事情。我将java项目的HDFS功能整合至 web项目的时候创建FileSystem对象就报Exception in thread "main" java.lang.VerifyError: (class: com/google/common/collect/Interners, method: newWeakInterner signature: ()Lcom/google/common/collect/Interner;) Incompatible argument to function

异常。而同样的程序在java项目中却运行的正常。

FileSystem创建代码

File workaround = new File(".");System.getProperties().put("hadoop.home.dir", workaround.getAbsolutePath());new File("./bin").mkdirs();new File("./bin/winutils.exe").createNewFile();String hdfsURL = "hdfs://192.168.1.118:50040";Configuration configuration = new Configuration();FileSystem fileSystem = FileSystem.get(new URI(hdfsURL), configuration);
抛异常:

Exception in thread "main" java.lang.VerifyError: (class: com/google/common/collect/Interners, method: newWeakInterner signature: ()Lcom/google/common/collect/Interner;) Incompatible argument to function

    at org.apache.hadoop.util.StringInterner.<clinit>(StringInterner.java:48)
    at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2472)
    at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2364)
    at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2281)
    at org.apache.hadoop.conf.Configuration.get(Configuration.java:888)
    at org.apache.hadoop.conf.Configuration.getTrimmed(Configuration.java:907)
    at org.apache.hadoop.conf.Configuration.getBoolean(Configuration.java:1308)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:366)

因此我怀疑,这里存在web项目的包和hdfs相关包冲突了。于是花了好长的时间找啊找,终于找到了冲突的包。

冲突来自 Java_EE_6 中的weld-osgi-bundle.jar 和 guava-11.0.2.jar 这两个包。 com/google/common/collect/Interners 类是 HDFS在创建FileSystem时所需要使用的一个创建Interner类的工具类,但是 weld-osgi-bundle.jar和guava-11.0.2.jar 存在了一样的结构,而weld-osgi-bundle.jar中却不存在Interners类,导致在运行过程中的冲突。

解决方法一:

将web工程应用Java EE 5。笔者的项目使用Java EE 5已经足够了,如果你们的项目中有使用到Java EE 6的功能可以通过另外导入需要的工具实现。

解决方法二:

将Java EE 6 的包通过 ADD JARs... 的方式导入。
注意:不要将 Java EE 6中的包直接放到WebRoot/WEB-INF/lib 下,这样同样会导致包冲突

转载于:https://my.oschina.net/u/998693/blog/540979

你可能感兴趣的文章
大数据时代的商业银行数字化转型
查看>>
MapXtreme 2005 GIS开发入门系列 索引
查看>>
光伏答疑解惑part1:安装篇
查看>>
视频应用多元化 以视频为核心的运营服务兴起
查看>>
C#中的 ref 传进出的到底是什么 解惑篇
查看>>
普林斯顿大学:物联网设备安全性堪忧
查看>>
CloudCC CRM观点:SaaS模式CRM产品步入成熟期
查看>>
智能家居渐成趋势 如何正确理解它
查看>>
“三网”竞合升温 智能家居入口泛化
查看>>
全新WiFi技术问世 功率更低穿墙性能更强
查看>>
台积电 2 月份业绩度小月,营收月减 6.8%
查看>>
联想看好印度巴西市场 能弥补中国市场下滑影响
查看>>
《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——第3章 数据安全工具DRBD、extundelete 3.1 数据镜像软件DRBD介绍...
查看>>
最新的黑客大杀器:Google Dorking
查看>>
中国移动再启大规模光缆集采:产业界喜迎大蛋糕
查看>>
竞争抄袭? 如何占领SaaS产品市场
查看>>
世界最大OpenStack私有云是如何运营的
查看>>
全球物联网专利竞争态势分析
查看>>
《网络安全法》为大数据保驾护航
查看>>
微软Edge浏览器开始支持WebVR
查看>>