基于YARN的SPARK管理過程
前言
MapReduce與Spark中Job概念的區(qū)別
在MapReduce中的一個抽象概念是Job,在Job執(zhí)行時系統(tǒng)會加載數(shù)據(jù),然后執(zhí)行Map, Shuffle, Reduce等操作,再對結(jié)果進行持久化。
在Spark中則是有Application,一個Application下面有多個Job,多個Job可以并行也可以串行,一個Job由多個Stage組成。
Spark執(zhí)行過程中各組成部分介紹
Application
一個Application與Spark API接口中的一個SparkContext相對應(yīng)(目前有更高級的抽象SparkSession封裝著SparkContext)。
一個Application可以用于:
- 一批Job(如:一個包含SparkContext的腳本,在限定時間內(nèi)執(zhí)行完成)
- 一個有多個Job的交互式會話(如:Spark Shell)
- 一個長期存活的Server程序(如:帶SparkContext,死循環(huán)接收Spark任務(wù)的Server腳本)
Application在Spark集群中會擁有執(zhí)行進程,稱為Executors。Executors即便在沒有Job可運行的情況下也會運行在集群中。
Job
一個Job則拆分成不同的stage。
** Stage**
一個Stage則包含Map, Shuffle, Reduce等操作。一個Stage可進一步細化為一系列Task。
Task
一個Stage細化為一系列Task,這些Task都執(zhí)行相同的代碼,只是執(zhí)行在輸入數(shù)據(jù)集上的不同部分。
Executors
在MapReduce中每個Task運行在各自的進程中,當Task結(jié)束的時候,殺掉進程。
在Spark中多個Task可以并行的運行在一個進程中,即Executor。這個進程即便在沒有Job可運行的情況下也會運行在集群中,生命周期與Application一樣長。(好處是調(diào)用速度快,壞處是資源利用率不高)
一個節(jié)點中可以有多個Executor。
Driver
Driver進程負責運行Spark Context,將Application轉(zhuǎn)化為DAG圖,以及初始化Job。
Driver與Application一一對應(yīng)。
Resource Management
Spark支持三種類型集群管理方式:YARN, Mesos, Standalone
三種方式都由兩部分組成:
- Central Master Service:<u>YARN ResourceManager</u>, <u>Mesos Master</u>, <u>Spark Standalone Master</u>
- Slave Service:<u>YARN NodeManager</u>, <u>Mesos Slave</u>, <u>Spark Standalone Slave</u>
Central Master Service用于決定Applications的運行時機、地方。
Slave Service運行在各個節(jié)點 ,真正的啟用Executor進程。有時會監(jiān)測Executor的是否活著,還有其資源消費情況。
基于YARN的Spark資源管理
YARN結(jié)合Spark運行方式簡介
一個Spark Executor以一個YARN Container的形式運行。Spark在一個Container中持有多個Task。
Spark支持兩種運行在YARN上的方式:"yarn-cluster", "yarn-client"
YARN Cluster模式
一個Application實例對應(yīng)一個Application Master進程,也是運行在一個YARN Container中,并且是第一個Container。
Application Master負責從Resource Manager處獲取資源(合適的Hosts和Containers),再通知NodeManagers啟動Containers。
YARN Cluster Mode
YARN Client模式
Application Master只負責從Resource Manager處獲取資源。由Client與各個Container進行通信確認如何工作。
YARN Client Mode
YARN Cluster模式與Client模式的區(qū)別
||YARN Cluster|YARN Client|
|:---|:---|:---|
|Driver runs in|Application Master|Client|
|Who controls running process|Application Master|Client|
|Spark interactively, like spark-shell|No|Yes|
|Spark driver run inside client process (initiates the Spark Application)|No|Yes|
參考文獻
[1] http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/
[2] http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-1/
[3] https://spark.apache.org/docs/1.0.2/job-scheduling.html