2015-10-20 62 views
5

我使用YARN運行Spark。Spark-submit/spark-shell> yarn-client和yarn-cluster模式之間的區別

從鏈接:http://spark.apache.org/docs/latest/running-on-yarn.html

我發現不同的紗線模式的解釋,即--master選項,與星火可以運行:

「有兩種部署模式,可以使用在紗線羣集模式下,Spark驅動程序在由羣集上的YARN管理的應用程序主進程中運行,客戶端可以在啓動應用程序後離開,在紗線客戶端模式下,驅動程序運行在客戶端進程中,而應用程序主服務器僅用於從YARN請求資源「

在此,我只能理解這個驅動程序在哪裏運行,但我無法理解哪個運行速度更快。 Morevover:

  • 在運行星火提交的情況下,--master可以是客戶集羣
  • 相應星火殼的主選項可以紗客戶,但它不支持集羣模式

所以我不知道如何做出選擇,即當使用火花外殼,什麼時候用火花提交,尤其是當使用客戶模式,當使用集羣模式

+0

看看這個[相關答案](http://stackoverflow.com/questions/24909958/spark-on-yarn-concept-understanding/38598830#38598830) – mrsrinivas

回答

6

火花殼應該用於交互查詢,它需要讓機器你在充當司機跑紗,客戶端模式下運行。

對於spark-submit,您將作業提交到羣集,然後任務在羣集中運行。通常情況下,您可以在集羣模式下運行,以便YARN可以使用可用資源將驅動程序分配到集羣上合適的節點。

某些命令(如.collect())會將所有數據發送到驅動程序節點,這會在驅動程序節點位於羣集內或羣集外的某臺計算機上導致顯着的性能差異(例如,用戶筆記本電腦)。

4

對於學習目的客戶端模式已經足夠好了。在生產環境中,您應始終使用集羣模式。

我會在一個例子的幫助下解釋你。想象一下你想要啓動多個應用程序的場景。比方說,你有一個節點爲A,B,C,D,E的5節點羣集。

工作負載將分佈在所有5個工作節點上,另外還有1個節點也用於提交作業(比如說'A'用於此)。現在,每次使用客戶端模式啓動應用程序時,驅動程序過程總是在'A'上運行。

它可能對一些工作很好,但隨着工作不斷增加,'A'將缺乏CPU和內存等資源。

想象一下對運行多個此類作業的非常大的羣集的影響。

但是,如果您選擇集羣模式,驅動程序將每次運行在'A'上,但分佈在所有5個節點上。這種情況下的資源得到更均勻的利用。

希望這可以幫助您決定選擇哪種模式。