记一次yarn环境中应用程序jar冲突解决办法

用户编写的spark程序打包成jar后提交到yarn执行时,经常会遇到jar包中明显存在某个类,但任务提交到yarn运行时却找不到类或方法(java.lang.NoSuchMethodError)的问题。仔细看自己代码,明明有这个jar,那多半就是jar冲突了。

只有当jar的版本不一致时候才会冲突,那么本着治本精神去百度,可以找到如下文章

https://www.jianshu.com/p/0fe48bc43a8c

http://www.mamicode.com/info-detail-2338161.html

https://www.cnblogs.com/princessmeiyi/p/5238236.html

解决思路有三个1.修改hadoop配置文件  2.在提交任务时,命令行加参数  3.根据原理在代码里加片段

1,2两种方法在公司环境,行不通。3.水平有限,尝试写了,没用

所以不得不想想其他办法,那简单啊,版本不一致改为一致不就行了,过程如下

SpingBoot管理项目

用的gson是2.8.5,本地测试没问题,到yarn上报

Caused by: java.lang.NoSuchMethodError: com.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder;
    at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
    at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:975)
    at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1000)
    at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1394)
    at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1750)
    at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)

查看yarn的启动日志,发现

 

 

在启动时加载的gson版本为2.2.4,导致冲突报错,前面已经说了,3种方法都没解决问题,那只好找到这个jar,删除,替换为

gson-2.8.5.jar,

解决问题

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页