1. 程式人生 > >Spark Core 的核心理論

Spark Core 的核心理論

1. Spark Core的核心功能

 (1)SparkContext:

   通常而言,DriverApplication 的執行與輸出都是通過SparkContext完成的,在正式提交Application 之前,首先需要初始化SparkContext。SparkContext隱藏了網路通訊、分散式部署、訊息通訊、儲存能力、計算能力、快取、測量系統、檔案服務、web服務等內容。應用程式的開發者只需要使用SparkContext 提供的API完成功能開發。
  一個application ---> 一個或者多個job----->一個或者多個stage----->多個task


  SparkContext 內建的DAGScheduler 負責去建立Job,將一個application轉化成為多個Job。(相應的Job的劃分,是看應用程式中,執行了多少個action運算元)
  SparkContext 內建的TaskScheduler :負責進行任務的派發,傳送到相應的節點,執行task。

 (2)儲存體系:

   Spark優先考慮使用節點的記憶體作為儲存,當記憶體不足時槽考慮使用磁碟,這極大的減少了磁碟I/O,提升了執行的效率,使得Spark適用於實時計算、流式計算等場景。此外,Spark還提供了以記憶體為中心的高容錯的分散式檔案系統Tachyon ,供使用者選擇。

 (3)計算引擎:

Spark Core 的核心理論
   計算引擎由 SparkContext 中的 DAGScheduler、RDD 以及具體節點上的 Executor 負責執行的 Map 和 Reduce 任務組成。DAGScheduler 和 RDD 雖然位於 SparkContext 內部,但是在任務正式提交與執行之前將Job 中的 RDD 組織成有向無環圖(簡稱 DAG)、並對 Stage 進 行劃分決定了任務執行階段任務的數量、迭代計算、shuffle 等過程。

 (4)部署模式:

   單節點不足以提供足夠的儲存計算能力,所以作為大資料處理的Spark在SparkContext的TaskScheduler 元件中提供了,Standalone

部署模式的實現和YANR、Mesos 等分散式資源管理系統的支援。除了可用於實際生產環境 的 Standalone、YARN、Mesos、kubernetes、Cloud 等部署模式外,Spark 還提供了 Local 模式和 local-cluster 模式便於開發和除錯。
  Standalone、YARN、Mesos、kubernetes、Cloud:用於分散式生產場景。
  Local用於本地測試。

2. Spark 叢集架構:

Spark Core 的核心理論
   Cluster Manager:spark叢集的管理者,主要負責資源你的分配與管理。叢集管理分配的資源屬於一級分配,它將各個worker上的記憶體、CPU,等資源分配給應用程式,但是並不對executor的資源分配。目前:StandaloneYARN、Mesos、K8S,EC2 等都可以作為 Spark 的叢集管理器。
   Master:spark叢集的主節點。
   Worker:Spark叢集的工作節點,對spark應用程式來說,由叢集管理器分配得到資源的worker主要負責以下工作:建立 Executor,將資源和任務進一步分配給 Executor,同步資源資訊給 Cluster Manager。
   Executor:執行計算任務的程序。主要負責執行任務,以及與 Worker、Driver Application 的資訊同步。(主要是初始化一個執行緒池,排程其中的執行緒執行相應的計算任務)
   Driver Appication:客戶端驅動程式,也可以理解為客戶端的應用程式,用於將任務程式轉化為RDD和DAG,並與Cluster Manager 進行通訊與排程,其中SparkContext這個物件的建立就是在Driver Appication中。
  Deploy mode:部署的模式,在寫好的程式碼,提交到叢集中執行時:--master 指定資源的管理器。
其中常見的有yarn,在使用yarn的方式進行任務提交的時候,通常必須配置另一個引數:--deploy-mode client/cluster 有client和cluster兩種。
client,表示就把Driver程式,放在提交的節點。
cluster 表示把Driver程式,放在叢集中的任意節點。Driver程式決定了SparkContext物件在哪裡建立。

各個角色之間的關係:
    Spark Core 的核心理論
   Spark 計算平臺有兩個重要角色,Driver 和 executor,不論是 StandAlone 模式還是 YARN 模式, 都是 Driver 充當 Application 的 master 角色,負責任務執行計劃生成和任務分發及排程; executor 充當 worker 角色,負責實際執行任務的 task,計算的結果返回 Driver。

3. Spark 程式設計模型:

 (1)spark應用程式從編寫到輸出的流程:

Spark Core 的核心理論
   - 使用者使用SparkContext 提供的 API(常用的有 textFile、sequenceFile、runJob、stop 等) 編寫Driver Application程式。
   - 使用sparkContext物件提交的使用者應用程式,首先會使用 BlockManager 和 BroadcastManager 將任務的資源配置進行廣播。然後由 DAGScheduler 將任務轉換為 RDD 並組織成 DAG, DAG 還將被劃分為不同的 Stage。最後由 TaskScheduler 藉助 ActorSystem 將任務提交給叢集管理器(ClusterManager)。
   - 叢集管理器(ClusterManager)給任務分配資源,即將具體任務分配到 Worker 上,Worker 建立 Executor 來處理任務的執行。Standalone、YARN、Mesos、kubernetes、EC2 等都可以作 為 Spark 的叢集管理器。

 (2)spark計算模型:

Spark Core 的核心理論
   RDD 可以看做是對各種資料計算模型的統一抽象,Spark 的計算過程主要是 RDD 的迭代計算 過程,如上圖。RDD 的迭代計算過程非常類似於管道。分割槽數量取決於 partition 數量的設定,每個分割槽的資料只會在一個 Task 中計算。所有分割槽可以在多個機器節點的 Executor 上 並行執行。