天天看點

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

Hadoop和MR已有10年曆史,已經被證明是高性能處理海量資料的最佳解決方案。然而,MR在疊代計算中性能不足,在這種情況下,多個MR作業之間的輸出必須被寫入 HDFS。在單個MR作業中,它的性能不足則是因為MR架構存在的一些缺點所緻。

讓我們來看看計算趨勢的發展曆史,以便了解計算的格局在過去20年中的變化。

這個趨勢是當網絡成本更低時(1990年代)對URI索引(Reference),當存儲成本更低時(2000 年代)進行複制(Replicate),以及當記憶體成本更低時(2010 年代)進行再計算(Recompute),如圖2-5 所示:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述
《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

讓我們來了解一下,為什麼基于記憶體的計算很重要,以及它如何能産生顯著的性能優勢。

圖2-6顯示了從各種媒體到CPU的資料傳輸速率。磁盤到CPU的傳輸速率為100 MB/s,SSD到CPU為600 MB/s,通過網絡到CPU為1 MB到1 GB/s。然而,RAM到CPU的傳輸速度驚人地快,達到了10 GB/s。是以,理想的思路是把所有或部分資料緩存到記憶體裡,以便實作更高的性能:

Spark 始于 2009 年,起初是作為加州大學伯克利分校 RAD 實驗室的一個研究項目,該實驗室就是 AMPLab 的前身。該實驗室的研究人員以前一直在使用 Hadoop MapReduce,并觀察到 MR 對于疊代和互動式計算工作是低效率的。是以,從一開始,Spark 被設計為快速進行互動式查詢和疊代的算法,采用了支援記憶體存儲和高效故障恢複等一些思路。

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

在2011年,AMPLab開始在Spark上開發更進階的元件,如Shark和Spark Streaming。這些元件有時被稱為Berkeley資料分析架構(Berkeley Data Analytics Stack,BDAS)。

Spark于2010年3月首次開源,并于2013年6月被轉移到Apache軟體基金會。

到2014年2月,它成為了Apache軟體基金會的一個頂級項目。Spark已經成為大資料領域最大的開源社群之一。現在,有超過50個組織裡的超過250位貢獻者正在為Spark開發做出貢獻。它的使用者群增長迅猛,包括了從小型公司到财富500強公司。圖2-7顯示了 Apache Spark的發展曆史:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

讓我們來了解一下Apache Spark 是什麼,以及是什麼使之成為大資料分析的利器:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述
《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

Hadoop 提供了用于存儲的 HDFS 和用于計算的 MR。但是,Spark 不提供任何特定的存儲媒體。Spark 主要是一個計算引擎,但你可以把資料存儲在記憶體裡或 Tachyon 上進行處理。

Spark 具有從存儲在 HDFS 或 Hadoop API 支援的其他存儲系統(包括你的本地檔案系統、Amazon S3、Cassandra、Hive、HBase、Elasticsearch 等)中的任何檔案建立分布式資料集的能力。

重要的是要注意 Spark 不是 Hadoop,也不需要 Hadoop 來運作它。它隻是為那些實作了 Hadoop API 的存儲系統提供支援而已。Spark 支援文本檔案、序列檔案、Avro、Parquet 和其他任何 Hadoop 輸入格式。

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

在性能和把業務問題轉換為 MR 問題方面,MR 開發人員都面臨着一些挑戰。讓我們來了解這些與 MR 相關的問題。以及如何在 Apache Spark 中解決這些問題:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

MR速度緩慢是因為 MR 作業中的每個作業都把資料存儲在磁盤上。對同一資料集的多個查詢會分别讀取資料,産生大量的磁盤讀寫,如圖2-8 所示:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

Spark 将 MR 的概念提升到更高水準,将中間資料存儲在記憶體中,并根據需要多次重複使用。這樣就在記憶體速度下提供了高性能,如圖2-8 所示。

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

總而言之,MR 和 Spark 之間的差別如下:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

Spark 的架構元件有 Spark Core、Spark SQL、Dataset和DataFrame、Spark Streaming、Structured Streaming、MLlib、GraphX 以及 SparkR,如圖2-9所示:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

下面是 Spark 元件與 Hadoop Ecosystem 元件的比較:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

為了從更高的層次了解 Spark 架構,讓我們來看看 Spark 的這些核心元件以及它們的內建:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述
《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

Spark 生态系統是一個統一的技術架構,它為你提供了在一個程式中結合 SQL、流和機器學習的強大功能。這種統一性的優點如下:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述

這種統一性的一個示例如圖2-10 所示:

《Spark與Hadoop大資料分析》——2.2 Apache Spark概述