2016-03-02 27 views
3

在官方火花documentation它解釋的是,術語應用罐子對應於:什麼特定的Spark庫「提供」?

甲包含用戶的火花應用罐子。在某些情況下,用戶需要創建一個包含應用程序及其依賴關係的「超級jar」。用戶的罐子不應該包括Hadoop的或Spark庫,但是,這些將在運行時添加

這可以通過使用很容易照顧「提供」的行家或SBT範圍:

"org.apache.spark" % "spark-core_2.10" % sparkVersion % Provided 

不過,我可能會在這裏忽略一些明顯的東西,但是我找不到直接的答案,在運行時會添加哪些特定的庫?它會僅僅是核心內容(例如spark-core,hadoop-core)還是其他一些內容(例如:spark-streaming,hadoop-hdfs)?

有沒有辦法來檢查這個並獲得實際的Spark依賴項列表,這些依賴項將在運行時添加,因此可以標記爲提供?

回答

4

簡短的回答是:所有Spark庫和您從download page下載Spark時選擇的hadoop版本。

較長的答案是:這取決於部署模式你使用:

  1. 本地模式:因爲只有一個在本地模式下的JVM,這是驅動程序的應用程序的JVM - 那麼這取決於你打包你的驅動程序的方式。如果你沒有(例如直接從IDE運行),那麼定義一個依賴爲「提供」並不意味着什麼,所以無論你在SBT文件中擁有哪些庫,它們都會在運行時出現。如果打包驅動程序應用程序並嘗試使用標記爲Spark的Spark來運行它,則可能會看到失敗,除非您以其他方式將這些Jar放入組合中(但本地模式並非真正意義上的那種方式) 。

  2. 單機模式:如果部署可在下載頁面的預編譯包的一個到羣集(主機和工人的機器),它們包含所有Spark的庫(包括星火SQL,流媒體,GraphX的。 ..)和您選擇的Hadoop版本。如果部署,你自己建罐子 - 嗯,那就要看是什麼和如何包裝...

  3. 紗模式:當您提交申請星火向紗線的經理,你設置的星火罐子位置爲應用程序使用(通過參數spark.yarn.jar) - 無論該jar(或罐子)包含將被加載。再次 - 如果該罐是預建的罐之一,則它包含所有的Spark庫和所選的Hadoop版本

+0

此答案很明確,並且重點突出。在我的情況下,解釋三種模式特別有用。順便說一句,當我們處於供應商特定的世界時,情況會變得更加複雜,並且jar不一定是標準的,但即使在這種情況下,這個答案也提供了必要的提示以獲得正確的信息 – djsecilla