2017-03-01 67 views
0

我想知道如果下面的依賴聲明是不夠的,在運行時獲取正確的Maven的依賴性星火API

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/api/java/function/PairFunction 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:278) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:214) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 
Caused by: java.lang.ClassNotFoundException: org.apache.spark.api.java.function.PairFunction 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 

依賴訪問下面的類

org.apache.spark.api.java.function.PairFunction

錯誤宣稱

<dependencies> 
    <dependency> 
    <groupId>org.scala-lang</groupId> 
    <artifactId>scala-library</artifactId> 
    <version>2.12.1</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-core_2.10</artifactId> 
    <version>2.1.0</version> 
</dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

我運行的.jar像這樣:

hadoop jar target/secondarysortspark-1.0-SNAPSHOT.jar ~/projects/secondarysortspark/secondarysortspark/src/main/java/com/tom/secondarysortspark/data.txt 

感謝

+0

你使用這些類進行測試嗎? – Christian

+0

沒有特別說明。我有單元測試運行並通過,當我通過mvn包構建 – Slinky

回答

0

爲了您的火花版本中階版本也不行。我有以下的性質和它的作品

<properties> 
     <scala.tools.version>2.10</scala.tools.version> 
     <scala.version>2.10.4</scala.version> 
     <spark.version>1.6.1</spark.version> 
    </properties> 

至少2.10階需要,爲火花core_2.10你的火花核心依賴聲明(這裏看看spark

+0

更改Scala版本並沒有解決問題。無論如何謝謝 – Slinky

0

接口PairFunction在spark-core中,所以你聲明的依賴關係很好。

https://github.com/apache/spark/blob/master/core/src/main/java/org/apache/spark/api/java/function/PairFunction.java

的問題是,火花-core還沒有運行時類路徑中。

這個問題可以通過各種方式解決,具體取決於您的設置,但最簡單的情況是使用hadoop命令的-libjars選項來傳遞jar。

嘗試像

hadoop jar target/secondarysortspark-1.0-SNAPSHOT.jar ~/projects/secondarysortspark/secondarysortspark/src/main/java/com/tom/secondarysortspark/data.txt -libjars path/to/spark-core.jar 

讓我知道結果。

+0

同樣的結果。因此,奇怪的...... hadoop jar target/secondarysortspark-1.0-SNAPSHOT.jar AppDriver〜/ projects/secondarysortspark/secondarysortspark/src/main/java/com/tom/secondarysortspark/data.txt -libjars〜/ .m2/repository/com /sparkjava/spark-core/2.5/spark-core-2.5.jar – Slinky

+0

你傳遞的jar是(不幸命名的)spark java web框架,apache spark,即計算平臺的jar路徑應該是類似於/ repository/org/apache/... – oh54

+0

同樣的問題...... hadoop jar目標/ secondarysortspark-1.0-SNAPSHOT.jar AppDriver〜/ projects/secondarysortspark/secondarysortspark/src/main/java/com/tom/secondarysortspark/data.txt -libjars〜/ .m2/repository/org/apache/spark/spark-core_2.11.jar 線程「main」java.lang中的異常。NoClassDefFoundError:org/apache/spark/api/java/function/PairFunction – Slinky

0

我們在這裏有兩個選擇,做一個spark-submit並且在命令中給出依賴關係的jar包作爲-jars。否則,建立一個肥缸,並進行火花提交。構建fat jar將解決依賴性問題。

例如, spark-submit --master local -- class your_class jarfile_path --jars dependency_jars input_arguements