Spark啟動時的master引數以及Spark的部署方式
我們在初始化SparkConf時,或者提交Spark任務時,都會有master引數需要設定,如下:
conf = SparkConf().setAppName(appName).setMaster(master)
sc = SparkContext(conf=conf)
/bin/spark-submit \
--cluster cluster_name \
--master yarn-cluster \
...
但是這個master到底是何含義呢?文件說是設定master url,但是啥是master url呢?說到這就必須先要了解下Spark的部署方式了。
我們要部署Spark這套計算框架,有多種方式,可以部署到一臺計算機,也可以是多臺(cluster)。我們要去計算資料,就必須要有計算機幫我們計算,當然計算機越多(叢集規模越大),我們的計算力就越強。但有時候我們只想在本機做個試驗或者小型的計算,因此直接部署在單機上也是可以的。Spark部署方式可以用如下圖形展示:
Spark部署方式下面我們就來分別介紹下。
Local模式
Local模式就是執行在一臺計算機上的模式,通常就是用於在本機上練手和測試。它可以通過以下集中方式設定master。
- local: 所有計算都執行在一個執行緒當中,沒有任何平行計算,通常我們在本機執行一些測試程式碼,或者練手,就用這種模式。
- local[K]: 指定使用幾個執行緒來執行計算,比如local[4]就是執行4個worker執行緒。通常我們的cpu有幾個core,就指定幾個執行緒,最大化利用cpu的計算能力
- local[*]: 這種模式直接幫你按照cpu最多cores來設定執行緒數了。
使用示例:
/bin/spark-submit \
--cluster cluster_name \
--master local[*] \
...
總而言之這幾種local模式都是執行在本地的單機版模式,通常用於練手和測試,而實際的大規模計算就需要下面要介紹的cluster模式。
cluster模式
cluster模式肯定就是執行很多機器上了,但是它又分為以下三種模式,區別在於誰去管理資源排程。(說白了,就好像後勤管家,哪裡需要資源,後勤管家要負責排程這些資源)
standalone模式
這種模式下,Spark會自己負責資源的管理排程。它將cluster中的機器分為master機器和worker機器,master通常就一個,可以簡單的理解為那個後勤管家,worker就是負責幹計算任務活的苦勞力。具體怎麼配置可以參考Spark Standalone Mode
使用standalone模式示例:
/bin/spark-submit \
--cluster cluster_name \
--master spark://host:port \
...
--master就是指定master那臺機器的地址和埠,我想這也正是--master引數名稱的由來吧。
mesos模式
這裡就很好理解了,如果使用mesos來管理資源排程,自然就應該用mesos模式了,示例如下:
/bin/spark-submit \
--cluster cluster_name \
--master mesos://host:port \
...
yarn模式
同樣,如果採用yarn來管理資源排程,就應該用yarn模式,由於很多時候我們需要和mapreduce使用同一個叢集,所以都採用Yarn來管理資源排程,這也是生產環境大多采用yarn模式的原因。yarn模式又分為yarn cluster模式和yarn client模式:
- yarn cluster: 這個就是生產環境常用的模式,所有的資源排程和計算都在叢集環境上執行。
- yarn client: 這個是說Spark Driver和ApplicationMaster程序均在本機執行,而計算任務在cluster上。
使用示例:
/bin/spark-submit \
--cluster cluster_name \
--master yarn-cluster \
...