2015-02-10 61 views
1

我是新來的火花。我正在嘗試編譯並運行需要本地機器上的(外部)jar文件中的類的Spark應用程序。如果我打開罐子(在〜/桌面),我可以看到丟失的類在當地的罐子,但是當我運行的火花,我得到爲什麼Spark無法找到這個罐子裏的類?

NoClassDefFoundError: edu/stanford/nlp/ie/AbstractSequenceClassifier 

我的jar添加到火花背景下這樣

String[] jars = {"/home/pathto/Desktop/stanford-corenlp-3.5.0.jar"}; 
SparkConf conf = new SparkConf().setAppName("Simple Application").setJars(jars); 

然後我嘗試運行一個提交這樣的腳本

/home/pathto/Downloads/spark-1.2.0-bin-hadoop2.4/bin/spark-submit \ 
    --class "SimpleApp" \ 
    --master local[4] \ 
    target/simple-project-1.0.jar \ 
    --jars local[4] /home/abe/Desktop/stanford-corenlp-3.5.0.jar 

,撞上的NoClassDefFoundError。

我知道這意味着工作線程無法從jar中找到類。但我不確定我做錯了什麼。我已經嘗試了最後一行的不同語法(下面),但沒有任何作用。

--addJars local[4] /home/abe/Desktop/stanford-corenlp-3.5.0.jar 
    --addJars local:/home/abe/Desktop/stanford-corenlp-3.5.0.jar 
    --addJars local:/home/abe/Desktop/stanford-corenlp-3.5.0.jar 

我該如何解決這個錯誤?

+0

你還得到'ClassNotFoundException'嗎? http://stackoverflow.com/a/5756989/3318517 – 2015-02-10 22:29:47

+0

@DanielDarabos是的。我得到那個異常 – bernie2436 2015-02-11 16:12:06

+0

作爲一項解決方案,我將依賴項打包到主應用程序jar中,並使用Maven進行部署。這讓它工作。但問題仍然存在。 – bernie2436 2015-02-11 18:42:18

回答

0

嘗試使用file:/path/to/jar/jarfile.jar/指定jar文件的位置。使用local:意味着該jar文件必須已經存在於每個工作節點上的指定位置。有關更多信息,請參見Submitting Applications文檔的「高級相關性管理」部分。

0

你應該使用你的主類的完整路徑 例如。 :com.package.MyMainClass

./bin/spark-submit --class com.MyMainClass /home/hadoop/Documents/Harish/HelloSpark-0.0.1-SNAPSHOT.jar -config /家庭/ Hadoop的/文件/ Harish/Config.properties

這就是我使用的....也檢查在Linux機器上的權限。