我們在初始化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部署方式可以用如下圖形展示:

下面我們就來分別介紹下。
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 \
...
作者:geekpy
鏈接:https://www.jianshu.com/p/aaac505908dd
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。