《大數據庫》答案——第五章內存數據庫Spark

本文爲 對劉鵬著《大數據庫》一書學習後對課後部分習題的個人理解,歡迎同學們與我討論。


1. 簡述Spark的定義。

Spark是基於內存計算的大數據並行計算框架。Spark基於內存計算,提高了在大數據環境下數據處理的實時性,同時保證了高容錯性和高可伸縮性,允許用戶將Spark部署在大量廉價硬件之上,形成集羣。

2. 對比Spark和Hadoop,分別指出兩者之間的區別。

  • Spark是一個計算框架;Hadoop的兩個核心組件是分佈式計算框架MapReduce和分佈式文件系統HDFS,Hadoop還包括在其生態系統上的其他系統,如HBase、Hive等。
  • Spark是MapReduce的升級方案,其兼容HDFS、Hive等分佈式存儲層,可融入Hadoop的生態系統,以彌補缺失MapReduce的不足,與Hadoop的MapReduce相比,Spark有以下優勢:
  1. 中間結果不輸出到磁盤上

    Spark提供了內存計算,可將中間結果放到內存中,對於迭代運算效率更高。Hadoop需要將計算的中間結果輸出到磁盤中。

  2. RDD方式對數據進行分區和處理

    Spark使用RDD(彈性分佈式數據集)對數據進行分區和處理;Hadoop的MapReduce Schema on Read處理方式會引起較大的處理開銷。
    RDD提供了一個抽象的數據架構,我們不必擔心底層數據的分佈式特性,只需將具體的應用邏輯表達爲一系列轉換處理,不同RDD之間的轉換操作形成依賴關係,可以實現管道化,避免中間數據存儲。

  3. 任務執行策略高效

    MapReduce再數據Shuffle時需要花費大量時間來排序,Spark可減輕上述問題帶來的開銷。因爲Spark任務再Shuffle中不是所有情景都需要排序,它支持基於Hash的分佈式聚合,調度中採用更爲通用的任務執行計劃圖(DAG),每一輪次的輸出結果都在內存中緩存。

  4. 任務調度開銷小

    傳統的MapReduce系統是爲了運行長達數小時的批量作業而設計的,MapReduce上的不同作業在同一個節點運行時,會各自啓動一個JVM。在某些極端情況下,提交一個任務的延遲非常高。而Spark採用時間驅動的類庫AKKA來啓動任務,通過線程池複用線程以避免進程或線程啓動和切換的開銷,Spark同一節點的所有任務都可以在一個JVM上運行。

3. Spark有那些特性?

  • 快速性:使用DAG執行引擎以支持循環數據流與內存計算。
  • 易用性:支持使用Scala、Java、Python和R語言進行編程,可以通過Spark Shell進行交互式編程。
  • 通用性:Spark提供了完整而強大的技術棧,包括SQL查詢、流式計算、機器學習和圖算法組件。
  • 兼容性:可運行於獨立的集羣模式中,可運行於Hadoop中,也可運行於Amazon EC2等雲環境中,並且可以訪問HDFS、Cassandra、HBase、Hive等多種數據源

4. 請分層簡述Spark生態系統BDAS。

  1. 資源管理層(Resource Scheduling Layer)
    1. Mesos
    2. YARN
    3. Standalone
  2. 存儲層(Storage Layer)
    1. HDFS
    2. Tachyon
  3. 核心層(Core Computer Layer)
  4. 應用組建層(Model Layer)
    1. Spark SQL(支持SQL查詢與分析的查詢引擎)
    2. Spark Streaming(流計算)
    3. MLbase(機器學習)
    4. GraphX
    5. BlinkDB
    6. SparkR

5. 簡述Spark的工作流程。

在這裏插入圖片描述
在Spark應用中,整個執行流程在邏輯上會形成有向無環圖(DAG)。Action算子出發之後,將所有累計的算子形成一個DAG,然後由調度器調度該圖上的任務進行運算。Spark的調度方式與MapReduce有所不同。Spark根據RDD之間不同的依賴關係切分形成不同的階段(Stage),一個階段包含一系列函數執行流水線。圖中 A、B、C、D、E、F、G分別代表不同的RDD,RDD內的方框代表分區。數據從HDFS輸入Spark,形成RDD A 和 RDD C,RDD C上執行map操作,轉換爲RDD D,RDD B和RDD F執行join操作,轉換爲RDD G,最後RDD G 通過函數saveAs TextFile輸出並保存到HDFS中。

6. 彈性分佈式數據集(RDD)有哪幾種創建方式?

  • 基於程序中的集合創建。
  • 基於本地文件創建。
  • 從Hadoop文件系統HDFS(或與Hadoop兼容的其他持久化存儲系統,如Hive,HBase)輸入數據創建。

7. 分別簡述Spark算子的作用及分類。

Spark算子大致上可分三大類算子:

  1. Value數據類型的Transformation算子,這種變換不觸發提交作業,針對處理的數據項是Value型的數據。
  2. Key-Value數據類型的Transformation算子,這種變換不觸發提交作業,針對處理的數據項是Key-Value型的數據。
  3. Action算子,這類算子會觸發SparkContext提交作業。

8. Spark工作機制包含哪些模塊?

調度與任務分配、I/O模塊、通信控制模塊、容錯模塊、Shuffle模塊

9. Spark調度機制有哪些運行模式?

Local模式、Standalone模式、YARN模式、Mesos模式。

10. Spark有哪些容錯機制?

  • 基於血統的容錯機制(Lineage)

在Spark中RDD具有不變性,在數據處理過程中,Spark通過Lineage圖記錄了各個RDD之間的變換關係,一旦某個數據處理過程出現錯誤,Spark可以根據Lineage圖快速進行容錯恢復。特別是對於map操作來說,當某個節點的任務失敗,Spark只需要重新計算相應分區的數據,而不必將整個任務重新計算。在很多分佈式數據處理系統中通過備份來進行容錯,相比於這種會導致巨大存儲消耗的容錯方式,Spark的Lineage圖只需要十幾kb的存儲空間。Spark允許用戶將數據cache下來,對於將來可能頻繁使用的某個計算結果,將這個RDDcache下來是明智的選擇。

  • 檢查點支持(Checkpoint)

雖然 lineage 可用於錯誤後 RDD 的恢復,但對於很長的 lineage 的 RDD 來說,這樣的恢復耗時較長。由此,可以考慮將某些 RDD 進行檢查點操作(Checkpoint)保存到穩定存儲上。 Spark 當前提供了爲 RDD 設置檢查點操作的 API , 讓用戶自行決定需要爲哪些數據設置檢查點操作。 由於 RDD 的只讀特性使得比常用的共享內存更容易做 checkpoint.由於不需要關心一致性的問題,RDD 的寫出可在後臺進行,而不需要程序暫停或進行分佈式快照

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章