Spark生態圈簡介

Spark 生態圈是加州大學伯克利分校的 AMP 實驗室打造的,是一個力圖在算法(Algorithms)、機器(Machines)、人(People)之間通過大規模集成來展現大數據應用的平臺。

AMP 實驗室運用大數據、雲計算、通信等各種資源及各種靈活的技術方案,對海量不透明的數據進行甄別並轉化爲有用的信息,以供人們更好地理解世界。該生態圈已經涉及機器學習、數據挖掘、數據庫、信息檢索、自然語言處理和語音識別等多個領域。

如圖 1 所示,Spark 生態圈以 Spark Core 爲核心,從 HDFS、Amazon S3 和 HBase 等持久層讀取數據,以 Mesos、YARN 和自身攜帶的 Standalone 爲 Cluster Manager 調度 Job 完成 Spark 應用程序的計算,這些應用程序可以來自於不同的組件。

如 Spark Shell/Spark Submit 的批處理,Spark Streaming 的實時處理應用,Spark SQL 的即席查詢,MLlib 的機器學習,GraphX 的圖處理和 SparkR 的數學計算等。

Spark生態圈
圖 1  Spark 生態圈

1. Spark Core

本節已經介紹了 Spark Core 的基本情況,下面來總結 Spark 的內核架構。

1)提供了有向無環圖(DAG)的分佈式並行計算框架,並提供 cache 機制來支持多次迭代計算或者數據共享,大大減少了迭代計算之間讀取數據的開銷,這對於需要進行多次迭代的數據挖掘和分析的性能有很大提升。

2)在 Spark 中引入了 RDD 的抽象,它是分佈在一組結點中的只讀對象集合,這些集合是彈性的,如果數據集的一部分丟失,則可以根據血緣關係對它們進行重建,保證了數據的高容錯性。

3)移動計算而非移動數據,RDD 分區可以就近讀取 HDFS 中的數據塊到各個結點內存中進行計算。

4)使用多線程池模型來減少 Task 啓動開銷。

5)採用容錯的、高可伸縮性的 Akka 作爲通信框架。

2. Spark Streaming

Spark Streaming 是一個對實時數據流進行高通量、容錯處理的流式處理系統,可以對多種數據源(如 Kafka、Flume、Twitter、Zero 和 TCP 套接字)進行類似 map、reduce 和 join 的複雜操作,並將結果保存到外部文件系統、數據庫中,或應用到實時儀表盤上。

Spark Streaming 的核心思想是將流式計算分解成一系列短小的批處理作業,這裏的批處理引擎是 Spark Core。也就是把 Spark Streaming 的輸入數據按照設定的時間片(如 1 秒)分成一段一段的數據,每一段數據都轉換成 Spark 中的 RDD,然後將 Spark Streaming 已經爲大家精心準備了大數據的系統學習資料,從Linux-Hadoop-spark-......,需要的小夥伴可以點擊中對 DStream 的轉換操作變爲對 Spark 中的 RDD 的轉換操作,將 RDD 經過操作變成的中間結果保存在內存中。

根據業務的需求,整個流式計算可以對中間結果進行疊加,或者將中間結果存儲到外部設備。本教程會在後邊對 Spark Streaming 做詳細介紹。

3 . SparkSQL

Spark SQL 允許開發人員直接處理 RDD,以及查詢存儲在 Hive、HBase 上的外部數據。Spark SQL 的一個重要特點是其能夠統一處理關係表和 RDD,使得開發人員可以輕鬆地使用 SQL 命令進行外部查詢,同時進行更復雜的數據分析。

4. Spark MLlib

Spark MLlib 實現了一些常見的機器學習算法和實用程序,包括分類、迴歸、聚類、協同過濾、降維及底層優化,並且該算法可以進行擴充。Spark MLlib 降低了機器學習的門檻,開發人員只要具備一定的理論知識就能進行機器學習的工作。本教程將在後面對 Spark MLlib 做進一步介紹。

5. Spark GraphX

Spark GraphX 是 Spark 中用於圖並行計算的 API,可以認爲是 GraphLab 和 Pregel 在 Spark 上的重寫及優化。與其他分佈式圖計算框架相比,Spark GraphX 最大的貢獻是在 Spark 之上提供了一站式數據解決方案,可以方便且高效地完成圖計算的一整套流水作業。

Spark GraphX 的核心抽象是 Resilient Distributed Property Graph,即一種點和邊都帶屬性的有向多重圖。它擴展了 Spark RDD 的抽象,有 Table 和 Graph 兩種視圖,而只需要一份物理存儲。兩種視圖都有自己獨有的操作符,從而使得操作靈活,並提高了執行效率。

需要說明的是,無論是 Spark Streaming、Spark SQL、Spark MLlib,還是 Spark GraphX,都可以使用 Spark Core 的 API 處理問題,它們的方法幾乎是通用的,處理的數據也可以共享,從而可以完成不同應用之間數據的無縫集成。

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