2017-06-16 36 views
0

我在Ubuntu上使用spark-submit在Spark上執行java檔案。該命令在下面給出。這個JAR文件是使用Maven Package構建的。依賴關係在pom.xml文件中指定。java.lang.ClassNotFoundException:com.github.lwhite1.tablesaw.api.Table運行時使用Eclipse提交的錯誤

]$ spark-submit --class HighScore.Driver --master local[*] JarfilePath/Levelwise_PCFS-0.0.1-SNAPSHOT.jar InputFilePath/K9_Site1.csv 1000. 

即使在命令中指定了packageName.className(HighScore.Driver),我也會收到跟隨錯誤。

這是錯誤消息。

Exception in thread "main" java.lang.NoClassDefFoundError: com/github/lwhite1/tablesaw/api/Table 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048) 
    at java.lang.Class.getMethod0(Class.java:3018) 
    at java.lang.Class.getMethod(Class.java:1784) 
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:727) 
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187) 
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
    Caused by: java.lang.ClassNotFoundException: com.github.lwhite1.tablesaw.api.Table 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 10 more 

com/github/lwhite1/tablesaw/api /表依賴關係也在pom.xml文件中指定。但它仍然會拋出異常。

有人能幫助我糾正這個錯誤。

回答

0

請記住,類加載器(特別是java.net.URLClassLoader)將在類路徑中的每個條目的文件夾a/b/c /中的程序包a.b.c中查找類。

NoClassDefFoundError也可以表示您錯過了一個.jar文件的傳遞性依賴關係,您已經編譯並嘗試使用該文件。

例如,如果您有一個類com.example.Foo,編譯後您將擁有一個類文件Foo.class。 例如說你的工作目錄是.../project/.這個類文件必須放在.../project/com/example中,你可以將你的類路徑設置爲.../project/

欲瞭解更多詳情,請參閱此post。這將有所幫助。

+0

.class文件存在於/home/workspace/project/target/classes/HighScore/Driver.class中。 classpath文件有。我希望classpath設置正確。我無法弄清楚它出錯的地方。 –

+0

我有兩個HighScore包下的類。一個是具有主類的HighScore.Driver,另一個是從Driver類調用的HighScore.AttributeSelector。我需要在上面的spark-submit命令中指定這兩個類爲:$ spark-submit --class HighScore.Driver,HighScore.AttributeSelector --master local [*] /home/hadoopuser/workspace/Levelwise_PCFS/target/Levelwise_PCFS-0.0 .1-SNAPSHOT.jar InputFilePath/K9_Site1.csv 1000.試過了。這仍然說ClassNotFoundException。 –