2017-09-01 66 views
0

我知道一個人可以通過spark-submit和--files選項發送文件,但是也可以發送整個文件夾嗎?我可以使用spark-submit發送整個文件夾嗎?

其實我想發送lib文件夾,包含外部庫的jar文件。或者--jar選項已經在執行文件目錄中創建了一個lib文件夾?在我的情況下,有必要,有一個lib文件夾,否則會給出錯誤。

+0

當你說jar文件時,你的意思是你的代碼需要外部庫嗎?或者你編譯的Spark代碼可執行文件 – tricky

+0

是的外部庫 – pythonic

回答

1

不,火花提交--files選項不支持發送文件夾,但可以將所有文件放在一個zip文件中,使用--files列表中的文件。您可以在火花作業中使用SparkFiles.get(filename)加載文件,將其分解並使用分解文件。 '文件名'不需要是絕對路徑,只是文件名就可以。

PS:它只在SparkContext初始化後才起作用。

+0

我不明白你的答案。所以,如果我把這些文件放在一個zip文件中,比如說lib.zip,會不會在執行程序的目錄中的文件夾lib中提取文件? – pythonic

+0

Nopes,我指的是傳遞一個包含多個conf文件的文件夾,而我的答案與--files相關。 --jars和--files都將文件複製到執行程序的工作目錄,但在--files中給出的jar列表不會包含在classpath中。爲了在classpath中使用jar,jar必須在--jars列表中給出。 --jar不支持文件夾包含。 – Shahzad

+0

在--jars列表中提供--files,依賴項中的conf文件,你應該很好,因爲它們會被自動複製到執行程序的工作目錄中。 – Shahzad

-1

我認爲你有多種解決方案來做到這一點。

首先我可以理解你想自動化這個,但是如果你沒有太多的罐子,你可以把它們作爲參數一一傳遞給- 罐子選項。

否則,你可以只是sudo mv你的Spark安裝的spark/jars目錄中的所有jar文件,但是在羣集的情況下它很煩人。

所以最後,你可以做到這一點

bash solution

此,如果您需要在集羣模式不能解決問題。對於集羣模式,我只需修改用於查詢JAR的HDFS目錄的bash代碼。並把所有的罐子放在HDFS目錄中。

可能還有其他的解決方案,但是這是我的想法,

有良好的週末!

+0

嗯,我有一個python腳本,它可以讀取所有jar文件,但問題是如何讓它們在執行程序目錄的lib文件夾中。默認情況下spark-submit將由--jars指定的所有文件放在lib文件夾中,或者我必須自己創建一個。 – pythonic

相關問題