2016-12-14 97 views
1

我試圖將我們的應用程序遷移到在紗線上運行的火花上。我用CMDLINE作爲spark-submit --master yarn --deploy-mode cluster -jars ${my_jars}...在紗線上運行火花時參數列表太長

但紗線拋出Expections與以下日誌: Container id: container_1462875359170_0171_01_000002 Exit code: 1 Exception message: .../launch_container.sh: line 4145: /bin/bash: Argument list too long

我想原因可能是,我們必須通過選項--jars ${my_jars}指定太多罐(684罐用逗號隔開),我的問題指定所有罐子的優雅方式是什麼?或者我們如何避免這種紗線錯誤?

+0

順便說一句,我可以成功地在本地模式下運行我的應用程序。 –

回答

2

檢查您可以使用spark.driver.extraClassPathextraClassPath Spark Documentation

spark.driver.extraClassPath /fullpath/firs.jar:/fullpath/second.jar 
spark.executor.extraClassPath /fullpath/firs.jar:/fullpath/second.jar 

剛剛發現線程spark-submit-add-multiple-jars-in-classpath

+0

嘗試使用這兩個類路徑而不是「-jars」配置的罐子,它沒有解決問題,我認爲這隻會改變我們如何將罐子提交給紗線,或者如何在Spark端配置它,但紗線cmdline不變,它是這樣的:{{JAVA_HOME}}/bin/java -server -Xmx1024m ... --user-class-path my_first.jar --user-class-path my_second.jar ... --user-class-路徑my_684th.jar,所以cmdline太長。 –

+0

謝謝,我再次嘗試,發現它工作,我的第一次嘗試在配置中有一些錯誤。 –

+0

很高興聽到它解決了這個問題。如果您將問題解決後發佈,以便對其他人有所幫助。 –

1

我想嘗試這兩種東西

  1. 建立火花脂肪罐子提交申請或
  2. 建立一個薄罐子Maven和安裝不可用罐子在Maven回購。以便它可以在羣集中的運行時加載。
+0

謝謝,我們的應用程序是私人的,不能投入maven回購。脂肪罐是一種選擇,但是建立它對我們來說是一個額外的步驟,特別是一些罐子可能會頻繁變化。我想知道是否有一個配置或什麼東西來避免這個錯誤(谷歌搜索,但沒有找到),我認爲這是一個常見的用例。 –

+0

**我們的應用程序是私人的,不能放入maven repo。**我們可以使用nexus /歸檔工具爲maven維護自己的存儲庫。 **我不知道是否有配置或某些東西來避免這個錯誤(谷歌搜索,但沒有找到)**你可以使用maven來建立脂肪罐。 _some罐子可能經常變化_什麼是變化版本或罐子? – mrsrinivas

+0

謝謝,但是維護一個倉庫來解決這個問題有點奇怪。變化是版本,例如我們編寫代碼,編譯一些新版本的jar,並進行測試運行。每次我們建立一個脂肪罐都不被接受,但是如果可以的話,我想避免它。這是我最後的希望。 –

0

嘗試sbt-assembly它將所有類和依賴類打包到一個超級jar中。

這是非常容易和舒適的使用,但你必須採取的兩件事情護理:

  1. 版本衝突
  2. 罐子會稍微有點大