Spark各運行模式詳解


一、測試或實驗性質的本地運行模式 (單機)

該模式被稱為Local[N]模式,是用單機的多個線程來模擬Spark分布式計算,通常用來驗證開發出來的應用程序邏輯上有沒有問題。

其中N代表可以使用N個線程,每個線程擁有一個core。如果不指定N,則默認是1個線程(該線程有1個core)。

   

指令示例:

   

1)spark-shell --master local 效果是一樣的

2)spark-shell --master local[4] 代表會有4個線程(每個線程一個core)來並發執行應用程序。

   

運行該模式非常簡單,只需要把Spark的安裝包解壓后,改一些常用的配置即可使用,而不用啟動Spark的Master、Worker守護進程( 只有集群的Standalone方式時,才需要這兩個角色),也不用啟動Hadoop的各服務(除非你要用到HDFS),這是和其他模式的區別,要記住才能理解。

   

   

二、測試或實驗性質的本地偽集群運行模式(單機模擬集群)

這種運行模式,和Local[N]很像,不同的是,它會在單機啟動多個進程來模擬集群下的分布式場景,而不像Local[N]這種多個線程只能在一個進程下委屈求全的共享資源。通常也是用來驗證開發出來的應用程序邏輯上有沒有問題,或者想使用Spark的計算框架而沒有太多資源。

   

指令示例:

   

1)spark-shell --master local-cluster[2, 3, 1024]

   

用法是:提交應用程序時使用local-cluster[x,y,z]參數:x代表要生成的executor數,y和z分別代表每個executor所擁有的core和memory數。

   

上面這條命令代表會使用2個executor進程,每個進程分配3個core和1G的內存,來運行應用程序。

   

該模式依然非常簡單,只需要把Spark的安裝包解壓后,改一些常用的配置即可使用。而不用啟動Spark的Master、Worker守護進程( 只有集群的standalone方式時,才需要這兩個角色),也不用啟動Hadoop的各服務(除非你要用到HDFS),這是和其他模式的區別哦,要記住才能理解。

   

   

三、Spark自帶Cluster ManagerStandalone Client模式(集群)

   

和單機運行的模式不同,這里必須在執行應用程序前,先啟動Spark的Master和Worker守護進程。不用啟動Hadoop服務,除非你用到了HDFS的內容。

   

可以在想要做為Master的節點上用start-all.sh一條命令即可

   

這種運行模式,可以使用Spark的8080 web ui來觀察資源和應用程序的執行情況了。

   

用如下命令提交應用程序

指令示例:

1)spark-shell --master spark://wl1:7077

或者

2)spark-shell --master spark://wl1:7077 --deploy-mode client

   

產生的進程:

①Master進程做為cluster manager,用來對應用程序申請的資源進行管理

②SparkSubmit 做為Client端和運行driver程序

③CoarseGrainedExecutorBackend 用來並發執行應用程序

   

四、spark自帶cluster managerstandalone cluster模式(集群)

   

這種運行模式和上面第3個還是有很大的區別的。使用如下命令執行應用程序

指令示例:

1)spark-submit --master spark://wl1:6066 --deploy-mode cluster

   

第四種模式和第三種模型的區別:

①客戶端的SparkSubmit進程會在應用程序提交給集群之后就退出

②Master會在集群中選擇一個Worker進程生成一個子進程DriverWrapper來啟動driver程序

③而該DriverWrapper 進程會占用Worker進程的一個core,所以同樣的資源下配置下,會比第3種運行模式,少用1個core來參與計算

④應用程序的結果,會在執行driver程序的節點的stdout中輸出,而不是打印在屏幕上

   

五、基於YARNResource ManagerClient模式(集群)

現在越來越多的場景,都是Spark跑在Hadoop集群中,所以為了做到資源能夠均衡調度,會使用YARN來做為Spark的Cluster Manager,來為Spark的應用程序分配資源。

   

在執行Spark應用程序前,要啟動Hadoop的各種服務。由於已經有了資源管理器,所以不需要啟動Spark的Master、Worker守護進程。

   

使用如下命令執行應用程序

指令示例:

1)spark-shell --master yarn 

或者

2)spark-shell --master yarn --deploy-mode client

   

提交應用程序后,各節點會啟動相關的JVM進程,如下:

①在Resource Manager節點上提交應用程序,會生成SparkSubmit進程,該進程會執行driver程序。

②RM會在集群中的某個NodeManager上,啟動一個ExecutorLauncher進程,來做為ApplicationMaster。

③另外,RM也會在多個NodeManager上生成CoarseGrainedExecutorBackend進程來並發的執行應用程序。

   

六、基於YARNResource ManagerCuster模式(集群)

使用如下命令執行應用程序

指令示例:

1)spark-shell --master yarn --deploy-mode cluster

   

和第5種運行模式,區別如下:

①在Resource Manager端提交應用程序,會生成SparkSubmit進程,該進程只用來做Client端,應用程序提交給集群后,就會刪除該進程。

②Resource Manager在集群中的某個NodeManager上運行ApplicationMaster,該AM同時會執行driver程序。緊接着,會在各NodeManager上運行CoarseGrainedExecutorBackend來並發執行應用程序。

③應用程序的結果,會在執行driver程序的節點的stdout中輸出,而不是打印在屏幕上。

   

   

此外,還有Spark On Mesos模式,對這部分感興趣的同學自行查詢了解。可以參閱:

http://ifeve.com/spark-mesos-spark/

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM