spark(一):生態機構與運行流程

說明

  • Spark生態系統已經發展成爲一個包含多個子項目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子項目,Spark是基於內存計算的大數據並行計算框架。除了擴展了廣泛使用的 MapReduce 計算模型,而且高效地支持更多計算模式,包括交互式查詢和流處理。Spark 適用於各種各樣原先需要多種不同的分佈式平臺的場景,包括批處理、迭代算法、交互式查詢、流處理。通過在一個統一的框架下支持這些不同的計算,Spark 使我們可以簡單而低耗地把各種處理流程整合在一起。

spark生態

  • spark現有五個子生態項目,具體功能如下:

Spark Core

  • spark內核,實現了 Spark 的基本功能,包含任務調度、內存管理、錯誤恢復、與存儲系統 交互等模塊。Spark Core 中還包含了對彈性分佈式數據集(resilient distributed dataset,簡稱RDD)的 API 定義。

Spark SQL

  • 結構化數據處理組件,支持SQL 或者 Apache Hive 版本的 SQL 方言(HQL)來查詢數據。Spark SQL 支持多種數據源,比 如 Hive 表、Parquet 以及 JSON 等。

Spark Streaming

  • 流處理組件,提供操作數據流的 API,並且與 Spark Core 中的 RDD API 高度對應。

Spark MLLib

  • 機器學習組件,提供包括分類、迴歸、聚類、協同過濾等,還提供了模型評估、數據 導入等額外的支持功能。

Spark Graphx

  • 圖計算

spark 架構

整體架構

  • spark 運行架構圖如下,遵從分佈式主從架構,集羣資源控制管理器(Cluster Manager)、多運行作業任務工作節點(Worker Node)、單應用任務控制節點(Driver)和各工作節點負責具體任務的執行進程(Executor)

  • 詳細架構流程如下圖:

運行流程

  • spark運行流程大概有4步。如下圖
  1. 構建 Spark Application 的運行環境,啓動 SparkContext,SparkContext 向 Cluster Manager 註冊,並申請運行 Executor 資源。
  2. Cluster Manager 爲 Executor 分配資源並啓動 Executor 進程,Executor 運行情況將隨着“心跳”發送到 Cluster Manager 。
  3. SparkContext 構建 DAG 圖,將 DAG 圖分解成多個 Stage,並把每個 Stage 的 TaskSet(任務集)發送給 Task Scheduler (任務調度器)。Executor 向 SparkContext 申請 Task, Task Scheduler 將 Task 發放給 Executor,同時,SparkContext 將應用程序代碼發放給 Executor
  4. Task 在 Executor 上運行,把執行結果反饋給 Task Scheduler,然後再反饋給 DAG Scheduler。運行完畢後寫入數據,SparkContext 向 ClusterManager 註銷並釋放所有資源。

細節說明

  • DAG

    • DAG Scheduler 把一個 Spark 作業轉換成 Stage 的 DAG,根據 RDD 和 Stage 之間的關係找出開銷最小的調度方法,然後把 Stage 以 TaskSet 的形式提交給 Task Scheduler。此外,DAG Scheduler 還處理由於 Shuffle 數據丟失導致的失敗,這有可能需要重新提交運行之前的 Stage。
    • DAG Scheduler 決定運行 Task 的理想位置,並把這些信息傳遞給下層的 Task Scheduler。
  • Stages

    • 每個 Spark Job 包含一系列 stages
    • Stages 按照數據是否需要 shuffle 來劃分(寬依賴)
    • Stages 之間的執行是串行的(除非stage 間計算的RDD不同)
    • 因爲 Stages 是串行的,所以 shuffle 越少越好
  • Task Scheduler

    • 維護所有 TaskSet,當 Executor 向 Driver 發送“心跳”時,Task Scheduler 會根據其資源剩餘情況分配相應的 Task。另外,Task Scheduler 還維護着所有 Task 的運行狀態,重試失敗的 Task。
  • Task

    • 每個 stage 包含一系列的 task
    • Task 是並行計算的最小單元
    • 一個 stage 中的所有 task 執行同一段代碼邏輯,只是基於不同的數據塊
    • 一個 task 只能在一個executor中執行,不能是多個
    • 一個 stage 輸出的 partition 數量等於這個 stage 執行 task 的數量
  • partition

    • Spark 中 partition(分區) 可以理解爲內存中的一個數據集
    • 一個 partition 對應一個 task,一個 task 對應 一個 executor 中的一個 slot,一個 slot 對應物理資源是一個線程 thread
      • 1 partition = 1 task = 1 slot = 1 thread

總結

  • spark是大數據計算引擎中重要組成部分,悠久的發展歷史,奠定很多計算框架的底層邏輯,值得深入學習和研究。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章