我們在初始化SparkConf時挨摸,或者提交Spark任務(wù)時镇饮,都會有master參數(shù)需要設(shè)置广鳍,如下:
conf = SparkConf().setAppName(appName).setMaster(master)
sc = SparkContext(conf=conf)
/bin/spark-submit \
--cluster cluster_name \
--master yarn-cluster \
...
但是這個master到底是何含義呢逆趣?文檔說是設(shè)定master url蝶溶,但是啥是master url呢?說到這就必須先要了解下Spark的部署方式了宣渗。
我們要部署Spark這套計算框架抖所,有多種方式,可以部署到一臺計算機(jī)落包,也可以是多臺(cluster)。我們要去計算數(shù)據(jù)摊唇,就必須要有計算機(jī)幫我們計算咐蝇,當(dāng)然計算機(jī)越多(集群規(guī)模越大),我們的計算力就越強(qiáng)巷查。但有時候我們只想在本機(jī)做個試驗或者小型的計算有序,因此直接部署在單機(jī)上也是可以的。Spark部署方式可以用如下圖形展示:
下面我們就來分別介紹下岛请。
Local模式
Local模式就是運(yùn)行在一臺計算機(jī)上的模式旭寿,通常就是用于在本機(jī)上練手和測試。它可以通過以下集中方式設(shè)置master崇败。
- local: 所有計算都運(yùn)行在一個線程當(dāng)中盅称,沒有任何并行計算肩祥,通常我們在本機(jī)執(zhí)行一些測試代碼,或者練手缩膝,就用這種模式混狠。
- local[K]: 指定使用幾個線程來運(yùn)行計算,比如local[4]就是運(yùn)行4個worker線程疾层。通常我們的cpu有幾個core将饺,就指定幾個線程,最大化利用cpu的計算能力
- local[*]: 這種模式直接幫你按照cpu最多cores來設(shè)置線程數(shù)了痛黎。
使用示例:
/bin/spark-submit \
--cluster cluster_name \
--master local[*] \
...
總而言之這幾種local模式都是運(yùn)行在本地的單機(jī)版模式予弧,通常用于練手和測試,而實(shí)際的大規(guī)模計算就需要下面要介紹的cluster模式湖饱。
cluster模式
cluster模式肯定就是運(yùn)行很多機(jī)器上了掖蛤,但是它又分為以下三種模式,區(qū)別在于誰去管理資源調(diào)度琉历。(說白了坠七,就好像后勤管家,哪里需要資源旗笔,后勤管家要負(fù)責(zé)調(diào)度這些資源)
standalone模式
這種模式下彪置,Spark會自己負(fù)責(zé)資源的管理調(diào)度。它將cluster中的機(jī)器分為master機(jī)器和worker機(jī)器蝇恶,master通常就一個拳魁,可以簡單的理解為那個后勤管家,worker就是負(fù)責(zé)干計算任務(wù)活的苦勞力撮弧。具體怎么配置可以參考Spark Standalone Mode
使用standalone模式示例:
/bin/spark-submit \
--cluster cluster_name \
--master spark://host:port \
...
--master就是指定master那臺機(jī)器的地址和端口潘懊,我想這也正是--master參數(shù)名稱的由來吧。
mesos模式
這里就很好理解了贿衍,如果使用mesos來管理資源調(diào)度授舟,自然就應(yīng)該用mesos模式了,示例如下:
/bin/spark-submit \
--cluster cluster_name \
--master mesos://host:port \
...
yarn模式
同樣贸辈,如果采用yarn來管理資源調(diào)度释树,就應(yīng)該用yarn模式,由于很多時候我們需要和mapreduce使用同一個集群擎淤,所以都采用Yarn來管理資源調(diào)度奢啥,這也是生產(chǎn)環(huán)境大多采用yarn模式的原因。yarn模式又分為yarn cluster模式和yarn client模式:
- yarn cluster: 這個就是生產(chǎn)環(huán)境常用的模式嘴拢,所有的資源調(diào)度和計算都在集群環(huán)境上運(yùn)行桩盲。
- yarn client: 這個是說Spark Driver和ApplicationMaster進(jìn)程均在本機(jī)運(yùn)行,而計算任務(wù)在cluster上席吴。
使用示例:
/bin/spark-submit \
--cluster cluster_name \
--master yarn-cluster \
...