1. 程式人生 > >轉載:Spark中文指南(入門篇)-Spark程式設計模型(一)

轉載:Spark中文指南(入門篇)-Spark程式設計模型(一)

原文:https://www.cnblogs.com/miqi1992/p/5621268.html

前言

 

本章將對Spark做一個簡單的介紹,更多教程請參考: Spark教程

本章知識點概括

  • Apache Spark簡介
  • Spark的四種執行模式
  • Spark基於Standlone的執行流程
  • Spark基於YARN的執行流程

Apache Spark是什麼?

Spark是一個用來實現快速而通用的叢集計算的平臺。擴充套件了廣泛使用的MapReduce計算模型,而且高效地支援更多的計算模式,包括互動式查詢和流處理。在處理大規模資料集的時候,速度是非常重要的。Spark的一個重要特點就是能夠在記憶體中計算,因而更快。即使在磁碟上進行的複雜計算,Spark依然比MapReduce更加高效。

Spark重要概念

(1)Spark執行模式

目前Spark的執行模式主要有以下幾種:

  • local:主要用於開發除錯Spark應用程式
  • Standlone:利用Spark自帶的資源管理與排程器執行Spark叢集,採用Master/Slave結構,為解決單點故障,可以採用Xookeeper實現高可靠(High Availability, HA)
  • Apache Mesos:執行在著名的Mesos資源管理框架基礎之上,該叢集執行模式將資源管理管理交給Mesos,Spark只負責執行任務排程和計算
  • Hadoop YARN:叢集執行在Yarn資源管理器上,資源管理交給YARN,Spark只負責進行任務排程和計算
    Spark執行模式中Hadoop YARN的叢集方式最為常用,前面一章關於

    Spark叢集搭建就是採用的YARN模式。

    (2)Spark元件(Components)

    一個完整的Spark應用程式,如前面一章當中的SparkWorkdCount程式,在提交叢集執行時,它涉及到如下圖所示的元件:

 

每個Spark應用都由一個驅動器程式(drive program)來發起叢集上的各種並行操作。驅動器程式包含應用的main函式,驅動器負責建立SparkContext,SparkContext可以與不同種類的叢集資源管理器(Cluster Manager),例如Hadoop YARN,Mesos進行通訊,獲取到叢集進行所需的資源後,SparkContext將
得到叢集中工作節點(Worker Node)上對應的Executor(不同的Spark程式有不同的Executor,他們之間是相互獨立的程序,Executor為應用程式提供分散式計算以及資料儲存功能),之後SparkContext將應用程式程式碼傳送到各Executor,最後將任務(Task)分配給executors執行

  • ClusterManager:在Standalone模式中即為Master節點(主節點),控制整個叢集,監控Worker.在YARN中為ResourceManager
  • Worker:從節點,負責控制計算節點,啟動Executor或Driver。在YARN模式中為NodeManager,負責計算節點的控制。
  • Driver:執行Application的main()函式並建立SparkContect。
  • Executor:執行器,在worker node上執行任務的元件、用於啟動執行緒池執行任務。每個Application擁有獨立的一組Executor。
  • SparkContext:整個應用的上下文,控制應用的生命週期。
  • RDD:Spark的計算單元,一組RDD可形成執行的有向無環圖RDD Graph。
  • DAG Scheduler:根據作業(Job)構建基於Stage的DAG,並提交Stage給TaskScheduler。
  • TaskScheduler:將任務(Task)分發給Executor。
  • SparkEnv:執行緒級別的上下文,儲存執行時的重要元件的引用。
    SparkEnv內構建幷包含如下一些重要元件的引用。

    1、MapOutPutTracker:負責Shuffle元資訊的儲存。
    2、BroadcastManager:負責廣播變數的控制與元資訊的儲存。
    3、BlockManager:負責儲存管理、建立和查詢快。
    4、MetricsSystem:監控執行時效能指標資訊。
    5、SparkConf:負責儲存配置資訊。

Spark的整體流程

1、Client提交應用。  
2、Master找到一個Worker啟動Driver  
3、Driver向Master或者資源管理器申請資源,之後將應用轉化為RDD Graph  
4、再由DAGSchedule將RDD Graph轉化為Stage的有向無環圖提交給TaskSchedule。  
5、再由TaskSchedule提交任務給Executor執行。  
6、其它元件協同工作,確保整個應用順利執行。  

圖片:

 

Spark on Yarn流程:

1、基於YARN的Spark作業首先由客戶端生成作業資訊,提交給ResourceManager。  
2、ResourceManager在某一NodeManager彙報時把AppMaster分配給NodeManager。  
3、NodeManager啟動SparkAppMaster。
4、SparkAppMastere啟動後初始化然後向ResourceManager申請資源。  
5、申請到資源後,SparkAppMaster通過RPC讓NodeManager啟動相應的SparkExecutor。  
6、SparkExecutor向SparkAppMaster彙報並完成相應的任務。  
7、SparkClient會通過AppMaster獲取作業執行狀態。  

 

參考文件

問題

  • 針對SparkContext和Drive program還沒有解釋清楚
  • 關於Driver向Master請求資源這一塊還沒搞懂
  • 關於Spark的整體流程圖還是不太準確,以後找到好的再補上