2015-02-26 29 views
27

我試圖運行使用bin/spark-submit的spark應用程序。當我在我的本地文件系統中引用我的應用程序jar時,它可以工作。然而,當我複製我的應用程序JAR在HDFS目錄,我得到以下異常:當應用程序jar在hdfs中時,spark-submit不工作

警告:跳過遠程罐子HDFS://本地主機:9000 /用戶/ HDFS /瓶/簡單項目1.0 -SNAPSHOT.jar。 拋出java.lang.ClassNotFoundException:com.example.SimpleApp

這裏的命令:

$ ./bin/spark-submit --class com.example.SimpleApp --master local hdfs://localhost:9000/user/hdfs/jars/simple-project-1.0-SNAPSHOT.jar

我使用Hadoop版本2.6.0,火花1.2.1版

+0

你最終在這裏決定了什麼?你是否切換到YARN或找到另一種解決方法?下面的Sanjiv指出了一個似乎與外圍相關的錯誤。你嘗試過--deploy-mode集羣嗎?謝謝,有趣的錯誤,如果它真的是一個錯誤,似乎並沒有直接提交給JIRA。也許檢查[this](https://issues.apache.org/jira/browse/SPARK-10643) – JimLohse

回答

18

只是它的工作對我的方式,我用

--master絲簇時

+3

如果他們不想使用YARN會怎麼樣?我看到這是OP正在嘗試使用本地[*]的公認答案? Eeen-teresting。 – JimLohse

0

是的,它必須是本地文件。我認爲這只是答案。

+5

但是在[官方文檔](https://spark.apache.org/docs/1.2.1/submitting -applications.html),它在那裏指出:「application-jar:捆綁jar的路徑,包括你的應用程序和所有的依賴關係。URL必須在你的集羣內是全局可見的,例如,一個** hdfs://路徑**或所有節點上存在的file://路徑。「 – dilm

+0

@dlim好點。這對user @郵件列表是一個值得提問的問題。從略讀代碼它看起來像它特別只允許本地文件 –

+0

謝謝。我現在試試郵件列表。 – dilm

4

爲了讓HDFS庫接觸到火花的工作,你必須在運行作業集羣模式。

$SPARK_HOME/bin/spark-submit \ 
--deploy-mode cluster \ 
--class <main_class> \ 
--master yarn-cluster \ 
hdfs://myhost:8020/user/root/myjar.jar 

此外,還有Spark JIRA針對尚未支持的客戶端模式引發。

SPARK-10643:在客戶端模式的火花支持HDFS下載應用程序提交

+0

對我來說這個應該是可以接受的:)但是你沒有顯示集羣模式,你顯示的是紗線,你需要'--deploy-mode cluster'和'--master spark:// yourmaster:7077'而不是' - 主紗線簇?如果OP說他在使用YARN,我錯過了它,但我猜HDFS是一個很好的線索。我認爲,正如所述,OP正在嘗試使用Spark作業管理器並發現本地模式的錯誤? – JimLohse

0

有一種變通方法。您可以將HDFS目錄(其中包含您的應用程序jar)掛載爲本地目錄。

和我一樣的(天青Blob存儲,但它應該是HDFS類似)爲天青wasb

例如命令現在

sudo mount -t cifs //{storageAccountName}.file.core.windows.net/{directoryName} {local directory path} -o vers=3.0,username={storageAccountName},password={storageAccountKey},dir_mode=0777,file_mode=0777

,在你的火花提交命令時,需要提供從上面的命令路徑

$ ./bin/spark-submit --class com.example.SimpleApp --master local {local directory path}/simple-project-1.0-SNAPSHOT.jar

相關問題