天天看點

[Spark進階]-- spark-client和spark-cluster詳解

摘要

在Spark中,有Yarn-Client和Yarn-Cluster兩種模式可以運作在Yarn上,通常Yarn-cluster适用于生産環境,而Yarn-Client更适用于互動,調試模式,以下是它們的差別

Spark插撥式資源管理

Spark支援Yarn,Mesos,Standalone三種叢集部署模式,它們的共同點:Master服務(Yarn ResourceManager,Mesos master,Spark standalone)來決定哪些應用可以運作以及在哪什麼時候運作,Slave服務(Yarn NodeManger)運作在每個節點上,節點上實際運作着Executor程序,此外還監控着它們的運作狀态以及資源的消耗

Spark On Yarn的優勢

1. Spark支援資源動态共享,運作于Yarn的架構都共享一個集中配置好的資源池

2. 可以很友善的利用Yarn的資源排程特性來做分類·,隔離以及優先級控制負載,擁有更靈活的排程政策

3.Yarn可以自由地選擇executor數量

4.Yarn是唯一支援Spark安全的叢集管理器,使用Yarn,Spark可以運作于Kerberized Hadoop之上,在它們程序之間進行安全認證 

Yarn-cluster VS Yarn-client

當在Spark On Yarn模式下,每個Spark Executor作為一個Yarn container在運作,同時支援多個任務在同一個container中運作,極大地節省了任務的啟動時間

Appliaction Master

為了更好的了解這兩種模式的差別先了解下Yarn的Application Master概念,在Yarn中,每個application都有一個Application Master程序,它是Appliaction啟動的第一個容器,它負責從ResourceManager中申請資源,配置設定資源,同時通知NodeManager來為Application啟動container,Application Master避免了需要一個活動的client來維持,啟動Applicatin的client可以随時退出,而由Yarn管理的程序繼續在叢集中運作

[Spark進階]-- spark-client和spark-cluster詳解

Yarn-cluster

在Yarn-cluster模式下,driver運作在Appliaction Master上,Appliaction Master程序同時負責驅動Application和從Yarn中申請資源,該程序運作在Yarn container内,是以啟動Application Master的client可以立即關閉而不必持續到Application的生命周期,下圖是yarn-cluster模式

[Spark進階]-- spark-client和spark-cluster詳解

Yarn-cluster模式下作業執行流程

1. 用戶端生成作業資訊送出給ResourceManager(RM)

2. RM在某一個NodeManager(由Yarn決定)啟動container并将Application Master(AM)配置設定給該NodeManager(NM)

3. NM接收到RM的配置設定,啟動Application Master并初始化作業,此時這個NM就稱為Driver

4. Application向RM申請資源,配置設定資源同時通知其他NodeManager啟動相應的Executor

5. Executor向NM上的Application Master注冊彙報并完成相應的任務

Yarn-client

在Yarn-client中,Application Master僅僅從Yarn中申請資源給Executor,之後client會跟container通信進行作業的排程,下圖是Yarn-client模式

[Spark進階]-- spark-client和spark-cluster詳解

Yarn-client模式下作業執行流程

1. 用戶端生成作業資訊送出給ResourceManager(RM)

2. RM在本地NodeManager啟動container并将Application Master(AM)配置設定給該NodeManager(NM)

3. NM接收到RM的配置設定,啟動Application Master并初始化作業,此時這個NM就稱為Driver

4. Application向RM申請資源,配置設定資源同時通知其他NodeManager啟動相應的Executor

5. Executor向本地啟動的Application Master注冊彙報并完成相應的任務

下表是Spark Standalone與Spark On Yarn模式下的比較

[Spark進階]-- spark-client和spark-cluster詳解

注意:

spark on yarn 的支援兩種模式

1)yarn-cluster:适用于生産環境;

2)yarn-client:适用于互動、調試,希望立即看到app的輸出

Yarn-cluster和yarn-client的差別在于appMaster:yarn appMaster,每個yarn app執行個體有一個appMaster程序,是為app啟動的第一個container;負責從ResourceManager請求資源,擷取到資源後,告訴NodeManager為其啟動container;appMaster消除了active client的需要,app client啟動app後可以結束,協調由運作在cluster上被yarn管理的程序繼續

Yarn-cluster mode

Spark的dirver 運作在 appMaster中,appMaster程序同時負責driving app,請求資源;

啟動spark app的client不需要一直存在于整個spark app運作生命周期

yarn-client mode

某些情況需要與spark互動,要求user input,如spark-shell和pyspark,這樣的spark app需要spark-driver運作在初始化spark app的client端程序中

這種情況,appMaster僅僅用于從yarn叢集請求executor,app client會和請求的container通信來排程他們工作

參考:

​​http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/​​

繼續閱讀