spark引用jar包_spark程序jar与spark lib jar冲突,加载顺序

用户编写的spark程序打包成jar后提交到yarn执行时,经常会遇到jar包中明显存在某个类,但任务提交到yarn运行时却找不到类或方法(java.lang.NoSuchMethodError)的问题。本文总结下产生此类问题的原因及解决方案。

例子

比如我们有个spark程序用到了guava的Splitter类:

import com.google.common.base.Splitter;

...

List list = Splitter.on("/").splitToList(output);

程序在本地模式下能正常运行,打好的jar包也的确包含Splitter类(验证方法参考附录1),但是在yarn-cluster模式时,会出现“java.lang.NoSuchMethodError: com.google.common.base.Splitter.splitToLis” 的错误,具体错误如下:

[2017-07-21 18:16:16,922] ERROR User class threw exception: java.lang.NoSuchMethodError: com.google.common.base.Splitter.splitToList(Ljava/lang/CharSequence;)Ljava/util/List; (org.apache.spark.deploy.yarn.ApplicationMaster)

java.lang.NoSuchMethodError: com.google.common.base.Splitter.splitToList(Ljava/lang/CharSequence;)Ljava/util/List;

at cn.creditease.bdp.jsoncook.core.string.Variable.(Variable.java:14)

你可能感兴趣的:(spark引用jar包)