2016-05-04 37 views
14

TL; DR:在Spark Standalone集羣中,客戶端和集羣部署模式之間有什麼不同?如何設置我的應用程序將運行在哪個模式?Spark Standalone:客戶端和集羣部署模式之間的區別


我們有三個用機火花獨立集羣,它們都與星火1.6.1:

  • 主計算機,這也正是我們的應用程序正在使用運行​​
  • 2相同的工人機

Spark Documentation,我讀:

(...)對於獨立羣集,Spark當前支持兩種部署模式。在客戶端模式下,驅動程序在與提交應用程序的客戶端相同的進程中啓動。然而,在集羣模式下,驅動程序是從集羣內的其中一個Worker進程啓動的,客戶端進程在完成其提交應用程序的責任時立即退出,而無需等待應用程序完成。

但是,通過閱讀本文,我不太瞭解實際差異,我不明白不同的部署模式有哪些優缺點。

此外,當我使用開始提交,即使我設置屬性spark.submit.deployMode到「集羣」開始我的申請,我的背景下,星火UI顯示以下條目:

Context UI

所以我我無法測試兩種模式以查看實際差異。話雖這麼說,我的問題是:

1)什麼是星火獨立客戶部署模式和集羣部署模式之間的實際差異?什麼是使用每一個的專業人士和騙子?

2)如何使用​​來選擇我的應用程序正在運行的哪一個?

回答

21

Spark Standalone客戶端 部署模式和集羣部署模式之間的實際區別是什麼? 使用每一個的親和和騙局是什麼?

讓我們試着看看客戶端和集羣模式之間的差異。

客戶:

  • 驅動的專用服務器(主節點)的專用處理內部上運行。這意味着它擁有可用於執行工作的所有可用資源。
  • 驅動程序打開專用的Netty HTTP服務器並將指定的JAR文件分發給所有Worker節點(很大的優勢)。
  • 由於主節點擁有自己的專用資源,因此您無需爲驅動程序「花費」工作人員資源。
  • 如果驅動程序進程死亡,您需要一個外部監視系統來重置它的執行。

集羣:

  • 驅動程序在羣集的工人的一個節點上運行。工作人員由主領隊選擇
  • 驅動程序作爲工作人員內部的專用獨立進程運行。
  • 驅動程序佔用至少 1個內核和來自其中一個工作者(可以配置)的專用內存量。
  • 驅動程序可以使用--supervise標誌從主節點監控,並在其死亡的情況下進行重置。
  • 在集羣模式下工作時,與應用程序執行相關的所有JAR都需要公開給所有工作人員。這意味着您可以手動將它們放置在共享位置或每個工作人員的文件夾中。

哪一個更好?不確定,那實際上是讓你去實驗和決定的。在這裏沒有更好的決定,你從前者和後者中獲得了一些東西,取決於你的使用情況,哪一個更適合你。

如何選擇我的應用程序將使用​​

的方式選擇在是使用--deploy-mode標誌運行的模式下運行時, 哪一個。從Spark Configuration頁:

/bin/spark-submit \ 
    --class <main-class> 
    --master <master-url> \ 
    --deploy-mode <deploy-mode> \ 
    --conf <key>=<value> \ 
    ... # other options 
    <application-jar> \ 
    [application-arguments] 
+0

我注意到的一點是,驅動程序需要訪問數據,雖然它不會做任何事情。因此,如果您使用文件系統來保留某些文件,則需要在驅動程序節點和羣集上都具有相同的文件。 –

+0

@DurgaSwaroop你指的是哪一種模式? –

+0

在客戶端模式下。 –

0

我也有同樣的情況,在這裏主節點使用一個獨立的EC2集羣。在此設置中,客戶端模式是適當的。在這個驅動程序中直接啓動spark-submit進程,作爲集羣的客戶端。輸入應用程序的輸出&附加到控制檯。因此,此模式特別適用於涉及REPL的應用程序。

否則,如果您的應用程序是從遠離工作機器的機器提交的,那麼使用羣集模式將B/W驅動程序&執行程序的網絡延遲降至最低是相當常見的。

相關問題