Spark详解(一):Spark及其生态圈概述
1. Spark簡介
Spark是加州大學伯克利分校AMP實驗室(Algorithms, Machines, and People Lab)開發通用內存并行計算框架。
- Spark 運行速度快
- 易用性好
- 通用性強
- 隨處運行
1.1 Spark和MapReduce的比較
Spark繼承了其分布式并行計算的優點并改進了MapReduce明顯的缺陷,具體如下:
- Spark把中間數據放到內存中,迭代運算效率高。MapReduce中計算結果需要落地,保存到磁盤上,這樣勢必會影響整體速度,而Spark支持DAG圖的分布式并行計算的編程框架,減少了迭代過程中數據的落地,提高了處理效率。
- Spark容錯性高。Spark引進了彈性分布式數據集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一組節點中的只讀對象集合,這些集合是彈性的,如果數據集一部分丟失,則可以根據“血統”(即充許基于數據衍生過程)對它們進行重建。
- Spark更加通用。
2. Spark生態系統
2.1 Spark Core
Spark Core是整個BDAS生態系統地核心組件,是一個分布式大數據處理框架。Spark Core中提供了多種資源部調度管理,通過內存計算、有向無環圖(DAG)等機制來保證分布式計算的快速,并引入了RDD的抽象保證數據的高容錯性。
- Spark Core提供了多種運行方式,其中包括Standalone、YARN、MESOS等
- SPark Core提供了有向無環圖(DAG)的分布式計算框架,并提供了內存機制來支持多次迭代計算或者數據共享,大大減少了迭代計算之間讀取數據的開銷。
- 在Spark中引入了RDD的抽象,它是分布在一組節點中的只讀對象集合,這些集合是彈性的,如果數據集一部分丟失,則可以根據“血統”對他們進行重建,保證了數據的高容錯性。
2.2 Spark Streaming
SparkStreaming是一個對實時數據流進行高通量、容錯處理的流式處理系統,可以對多種數據源(如Kdfka、Flume、Twitter、Zero和TCP 套接字)進行類似Map、Reduce和Join等復雜操作,并將結果保存到外部文件系統、數據庫或應用到實時儀表盤。
由于使用DStreaming,Spark Streaming具有如下特性:
- 動態負載均衡:Spark Streaming將數據劃分為小批量,通過這種方式可以實現對資源更加細粒度的分配。
- 快速故障恢復機制:在Spark中,計算將分成許多小的任務,保證能夠在任何節點運行后能夠正確進行合并。因此,在某個節點出現的故障的情況,這個節點的任務將均勻的分散在集群中的節點進行計算。
- 批處理、流處理與交互式的一體化:Spark Streaming是將流式計算分解成一系列短小的批處理作業,也就是SparkStreaming的輸入數據按照批處理大小,分成一段一段的離散數據流(DStream),每一段數據都轉換成Spark中的RDD。
2.3 Spark SQL
Spark SQL允許開發人員直接處理RDD,同時也可查詢例如在 Apache Hive上存在的外部數據。Spark SQL的一個重要特點是其能夠統一處理關系表和RDD,使得開發人員可以輕松地使用SQL命令進行外部查詢,同時進行更復雜的數據分析。
Spark SQL的特點:
-
引入了新的RDD類型SchemaRDD,可以象傳統數據庫定義表一樣來定義SchemaRDD,SchemaRDD由定義了列數據類型的行對象構成。SchemaRDD可以從RDD轉換過來,也可以從Parquet文件讀入,也可以使用HiveQL從Hive中獲取。
-
內嵌了Catalyst查詢優化框架,在把SQL解析成邏輯執行計劃之后,利用Catalyst包里的一些類和接口,執行了一些簡單的執行計劃優化,最后變成RDD的計算
-
在應用程序中可以混合使用不同來源的數據,如可以將來自HiveQL的數據和來自SQL的數據進行Join操作。
2.4 BlinkDB
BlinkDB 是一個用于在海量數據上運行交互式 SQL 查詢的大規模并行查詢引擎,它允許用戶通過權衡數據精度來提升查詢響應時間,其數據的精度被控制在允許的誤差范圍內。為了達到這個目標,BlinkDB 使用兩個核心思想:
- 一個自適應優化框架,從原始數據隨著時間的推移建立并維護一組多維樣本;
- 一個動態樣本選擇策略,選擇一個適當大小的示例基于查詢的準確性和(或)響應時間需求。
2.5 MLBase/MLlib
MLBase是Spark生態圈的一部分專注于機器學習,讓機器學習的門檻更低,讓一些可能并不了解機器學習的用戶也能方便地使用MLbase。MLBase分為四部分:MLlib、MLI、ML Optimizer和MLRuntime。
- MLRuntime 基于Spark計算框架,將Spark的分布式計算應用到機器學習領域。
- MLlib是Spark實現一些常見的機器學習算法和實用程序,包括分類、回歸、聚類、協同過濾、降維以及底層優化,該算法可以進行可擴充;
- MLI 是一個進行特征抽取和高級ML編程抽象的算法實現的API或平臺;
- ML Optimizer會選擇它認為最適合的已經在內部實現好了的機器學習算法和相關參數,來處理用戶輸入的數據,并返回模型或別的幫助分析的結果
2.6 GraphX
GraphX是Spark中用于圖和圖并行計算的API,可以認為是GraphLab和Pregel在Spark上的重寫和優化。跟其他分布式圖計算框架相比,GraphX最大的優勢是:在Spark基礎上提供了一棧式數據解決方案,可以高效地完成圖計算的完整流水作業。
GraphX的底層設計有以下幾個關鍵點。
- 對Graph視圖的所有操作,最終都會轉換成其關聯的Table視圖的RDD操作來完成。這樣對一個圖的計算,最終在邏輯上,等價于一系列RDD的轉換過程。
- 兩種視圖底層共用的物理數據,由RDD[Vertex-Partition]和RDD[EdgePartition]這兩個RDD組成。
- 圖的分布式存儲采用點分割模式,而且使用partitionBy方法,由用戶指定不同的劃分策略(PartitionStrategy)。
總結
以上是生活随笔為你收集整理的Spark详解(一):Spark及其生态圈概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop详解(十二):Yarn资源调
- 下一篇: Spark详解(二):Spark完全分布