Created 06-15-2016 03:32 AM
Hi, I'm experimenting with using Zeppelin / Spark to perform geo-location on IP addresses using the Maxmind GeoIP library. I am encountering a NoSuchMethodError which from reading the forums appears to be a dependency issue with the method not being in certain versions of the jackson lib. How can I go about identifying and resolving this dependency issue in Zeppelin? I load geoip2 via %dep and have removed the older versions of the jackson lib from zeppelin/lib/lib to no avail. Thanks!
%dep z.addRepo("geoip2").url("http://mvnrepository.com/artifact/com.maxmind.geoip2/geoip2/2.7.0") z.load("com.maxmind.geoip2:geoip2:2.7.0")
java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.node.ArrayNode.<init>(Lcom/fasterxml/jackson/databind/node/JsonNodeFactory;Ljava/util/List;)V
Created 06-16-2016 06:48 PM
Spark includes some Jackson libraries as it's own dependencies, including this one:
<fasterxml.jackson.version>2.6.5</fasterxml.jackson.version>
Therefore, if your additional third-party library also includes this library with a different version, then the classloader will get errors. You can use the Maven Shade plugin to "relocate" the third-party jar, as described here:
https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html
Here is an example of relocating the "com.fasterxml.jackson" library:
Created 06-15-2016 05:30 AM
seems you have library mismatch for jackson, could you please verify which jars contain this class com.fasterxml.jackson.databind.node.ArrayNode,isolate those jars and maintain a single version of jars available across the classpath. if you still want to use to different jar version then please consider jar shading.
Created 06-15-2016 05:52 AM
Hi @Rajkumar Singh, I believe the jar in question is jackson-databind. For Spark / Zeppelin which classpath / directories should I be look at?
Created 06-15-2016 05:58 AM
please look into zeepline lib folder.
Created 06-15-2016 06:25 AM
Yeah have tried that but still encountering the same error
Created 06-15-2016 07:10 AM
@KCcan you lookout for these two jars, i m suspecting that zepplien spark dependency is causing this issue.
zeppelin/lib/interpreter/spark/dep/zeppelin-spark-dependencies-0.6.0.2.4.0.0-169.jar
/zeppelin/lib/interpreter/flink/jackson-databind-2.4.2.jar
Created 06-15-2016 07:30 AM
@Rajkumar Singh yeah i removed the jackson-databind jar in the flink folder, the zeppelin-spark-dependencies jar is still there. How do I determine which version / jar is being used by Zeppelin / Spark at run-time?
Created 06-15-2016 07:44 AM
this jar is used by the zeppelin server at runtime zeppelin/lib/interpreter/spark/dep/zeppelin-spark-dependencies-0.6.0.2.4.0.0-169.jar, will be good if you have your version of jar shaded.
Created 06-16-2016 01:35 AM
thanks @Rajkumar Singh for the suggestion. are you able to provide some instructions or direct me to some resources on how I should shade the jar?
Created 06-16-2016 04:34 AM
@KC could you please follow this tutorial http://www.mkyong.com/maven/create-a-fat-jar-file-maven-shade-plugin/