Our Community is getting an upgrade! To get everything ready for the relaunch, we’ll be placing the site in read-only mode starting September 21st.
We really appreciate your understanding while we get things set up behind the scenes. Catch up on all the exciting details about the move here.
Need help or have questions? Drop us a line at [email protected]
Created 06-01-2018 05:36 PM
Hello,
artifact org.apache.curator, version 2.7.1 and higher doesn't work in a spark job.
pom.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>"test"</name>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>test</id>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
</project>
Source code:
cat src/main/java/com/test/Test.java
package com.test;
import org.apache.curator.utils.PathUtils;
public class Test {
public static void main(String[] args) throws Exception {
PathUtils.validatePath("/tmp");
}
}
The result is
spark-submit --class com.test.Test --master local test-0.0.1-SNAPSHOT.jar
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.curator.utils.PathUtils.validatePath(Ljava/lang/String;)Ljava/lang/String;
at com.test.Test.main(Test.java:7)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
The issue is replicated in spark version 1.6.2 and 2.2.0.2.6.4.0-91. Can you please help to resolve this issue?
Created 06-01-2018 05:46 PM
Perhaps when you are packaging your jar file is not adding the curator-client jar correctly to the fat jar.
I tested the following and it works fine:
1. wget http://central.maven.org/maven2/org/apache/curator/curator-client/2.7.1/curator-client-2.7.1.jar
2. spark-shell --jar curator-client-2.7.1.jar
3.
scala> import org.apache.curator.utils.PathUtils;
import org.apache.curator.utils.PathUtils
scala> PathUtils.validatePath("/tmp")
No errors thrown while running the above. You can try adding the --jars and point to the jar file as well and see if that helps.
spark-submit --jars curator-client-2.7.1.jar --class com.test.Test --master local test-0.0.1-SNAPSHOT.jar
Otherwise I suggest you check your fat/uber jar.
HTH
*** If you found this answer addressed your question, please take a moment to login and click the "accept" link on the answer.
Created 06-01-2018 05:46 PM
Perhaps when you are packaging your jar file is not adding the curator-client jar correctly to the fat jar.
I tested the following and it works fine:
1. wget http://central.maven.org/maven2/org/apache/curator/curator-client/2.7.1/curator-client-2.7.1.jar
2. spark-shell --jar curator-client-2.7.1.jar
3.
scala> import org.apache.curator.utils.PathUtils;
import org.apache.curator.utils.PathUtils
scala> PathUtils.validatePath("/tmp")
No errors thrown while running the above. You can try adding the --jars and point to the jar file as well and see if that helps.
spark-submit --jars curator-client-2.7.1.jar --class com.test.Test --master local test-0.0.1-SNAPSHOT.jar
Otherwise I suggest you check your fat/uber jar.
HTH
*** If you found this answer addressed your question, please take a moment to login and click the "accept" link on the answer.
Created 06-01-2018 07:21 PM
@Felix Albani thank you for your answer, spark-shell in your sample works because it uses embedded PathUtils artifact:
scala> classOf[PathUtils].getProtectionDomain().getCodeSource().getLocation() res1: java.net.URL = file:/usr/hdp/2.6.4.0-91/spark/lib/spark-assembly-1.6.3.2.6.4.0-91-hadoop2.7.3.2.6.4.0-91.jar<br>
In my sample I have only one dependency, so the issue can't be caused by the fat jar.
Using --jars curator-client-2.7.1.jar with spark-submit doesn't resolve the issue.
Created 06-01-2018 08:00 PM
@Maxim Dashenko sorry about that. The following is working fine:
spark-shell --driver-class-path curator-client-2.7.1.jar scala> import org.apache.curator.utils.PathUtils; import org.apache.curator.utils.PathUtils scala> classOf[PathUtils].getProtectionDomain().getCodeSource().getLocation() res0: java.net.URL = file:/root/curator-client-2.7.1.jar
Try adding --driver-class-path curator-client-2.7.1.jar to your spark-submit and let me know if it works fine. Also you may want to try using --conf spark.driver.userClassPathFirst=true with the jar and see if that helps.
Thanks!
Created 06-01-2018 08:43 PM
@Felix Albani using --driver-class-path curator-client-2.7.1.jar for spark-submit has resolved the issue, thank you very much for your help!
Created 06-01-2018 08:49 PM
@Maxim Dashenko I'm glad it got resolved. Please take a moment to login and click the "accept" link on the answer!