一、測試或實驗性質的本地運行模式 (單機)
該模式被稱為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 Manager的Standalone 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 manager的standalone 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中輸出,而不是打印在屏幕上
五、基於YARN的Resource Manager的Client模式(集群)
現在越來越多的場景,都是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進程來並發的執行應用程序。
六、基於YARN的Resource Manager的Custer模式(集群)
使用如下命令執行應用程序
指令示例:
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/