天天看點

Spark 運維實戰簡介

 Spark 大資料計算架構、架構、計算模型和資料管理政策及 Spark 在工業界的應用。圍繞 Spark 的 BDAS 項目及其子項目進行了簡要介紹。目前,Spark 生态系統已經發展成為一個包含多個子項目的集合,其中包含 SparkSQL、Spark Streaming、GraphX、 MLlib 等子項目,本章隻進行簡要介紹,後續章節再詳細闡述。

1.1 Spark 是什麼

Spark 是基于記憶體計算的大資料并行計算架構。Spark 基于記憶體計算,提高了在大資料環境下資料處理的實時性,同時保證了高容錯性和高可伸縮性,允許使用者将 Spark 部署在大量廉價硬體之上,形成叢集。

Spark 于 2009 年誕生于加州大學伯克利分校 AMPLab。目前,已經成為 Apache 軟體基金會旗下的頂級開源項目。下面是 Spark 的發展曆程。

1.Spark 的曆史與發展

2009 年:Spark 誕生于 AMPLab。

2010 年:開源。

2013 年 6 月:Apache 孵化器項目。

2014 年 2 月:Apache 頂級項目。

     2014 年 2 月:大資料公司 Cloudera 宣稱加大 Spark 架構的投入來取代 MapReduce。 

    2014 年 4 月:大資料公司 MapR 投入 Spark 陣營,Apache Mahout 放棄 MapReduce,

将使用 Spark 作為計算引擎。

2014 年 5 月:Pivotal Hadoop 內建 Spark 全棧。

2014 年 5 月 30 日:Spark 1.0.0 釋出。

2014 年 6 月:Spark 2014 峰會在舊金山召開。

2014 年 7 月:Hive on Spark 項目啟動。

目前 AMPLab 和 Databricks 負責整個項目的開發維護,很多公司,如 Yahoo!、Intel 等

參與到 Spark 的開發中,同時很多開源愛好者積極參與 Spark 的更新與維護。

AMPLab 開發以 Spark 為核心的 BDAS 時提出的目标是:one stack to rule them all,也

就是說在一套軟體棧内完成各種大資料分析任務。相對于 MapReduce 上的批量計算、疊代型計算以及基于 Hive 的 SQL 查詢,Spark 可以帶來上百倍的性能提升。目前 Spark 的生态系統日趨完善,Spark SQL 的釋出、Hive on Spark 項目的啟動以及大量大資料公司對 Spark 全棧的支援,讓 Spark 的資料分析範式更加豐富。

2.Spark 之于 Hadoop

更準确地說,Spark 是一個計算架構,而 Hadoop 中包含計算架構 MapReduce 和分布式檔案系統 HDFS,Hadoop 更廣泛地說還包括在其生态系統上的其他系統,如 Hbase、

Hive 等。

Spark 是 MapReduce 的替代方案,而且相容 HDFS、Hive 等分布式存儲層,可融入

Hadoop 的生态系統,以彌補缺失 MapReduce 的不足。 Spark 相比 Hadoop MapReduce 的優勢 如下。

(1)中間結果輸出基于 MapReduce 的計算引擎通常會将中間結果輸出到磁盤上,進行存儲和容錯。出于

  任務管道承接的考慮,當一些查詢翻譯到 MapReduce 任務時,往往會産生多個 Stage,而這些串聯的 Stage 又依賴于底層檔案系統(如 HDFS)來存儲每一個 Stage 的輸出結果。

Spark 将執行模型抽象為通用的有向無環圖執行計劃(DAG),這可以将多 Stage 的任務串聯或者并行執行,而無須将 Stage 中間結果輸出到 HDFS 中。類似的引擎包括 Dryad、

Tez。

(2)資料格式和記憶體布局由于 MapReduce Schema on Read 處理方式會引起較大的處理開銷。Spark 抽象出分布式記憶體存儲結構彈性分布式資料集 RDD,進行資料的存儲。RDD 能支援粗粒度寫操作,但對于讀取操作,RDD 可以精确到每條記錄,這使得 RDD 可以用來作為分布式索引。

Spark的特性是能夠控制資料在不同節點上的分區,使用者可以自定義分區政策,如 Hash 分區等。 Shark 和 Spark SQL 在 Spark 的基礎之上實作了列存儲和列存儲壓縮。

(3)執行政策 MapReduce 在資料 Shuffle 之前花費了大量的時間來排序,Spark 則可減輕上述問題帶

來的開銷。因為 Spark 任務在 Shuffle 中不是所有情景都需要排序,是以支援基于 Hash 的分布式聚合,排程中采用更為通用的任務執行計劃圖(DAG),每一輪次的輸出結果在記憶體緩存。

(4)任務排程的開銷傳統的 MapReduce 系統,如 Hadoop,是為了運作長達數小時的批量作業而設計的,在

某些極端情況下,送出一個任務的延遲非常高。

Spark 采用了事件驅動的類庫 AKKA 來啟動任務,通過線程池複用線程來避免程序或線程啟動和切換開銷。

3.Spark 能帶來什麼

Spark 的一站式解決方案有很多的優勢,具體如下。(1)打造全棧多計算範式的高效資料流水線

Spark 支援複雜查詢。在簡單的“ map ”及“ reduce ”操作之外,Spark 還支援 SQL 查詢、流式計算、機器學習和圖算法。同時,使用者可以在同一個工作流中無縫搭配這些計算範式。

(2)輕量級快速處理 Spark 1.0 核心代碼隻有 4 萬行。這是由于 Scala 語言的簡潔和豐富的表達力,以及

Spark 充分利用和內建 Hadoop 等其他第三方元件,同時着眼于大資料處理,資料處理速度是至關重要的,Spark 通過将中間結果緩存在記憶體減少磁盤 I/O 來達到性能的提升。

(3)易于使用,Spark 支援多語言 Spark 支援通過 Scala、Java 及 Python 編寫程式,這允許開發者在自己熟悉的語言環境

下進行工作。它自帶了 80 多個算子,同時允許在 Shell 中進行互動式計算。使用者可以利用 Spark 像書寫單機程式一樣書寫分布式程式,輕松利用 Spark 搭建大資料記憶體計算平台并充分利用記憶體計算,實作海量資料的實時處理。

(4)與 HDFS 等存儲層相容 Spark 可以獨立運作,除了可以運作在當下的 YARN 等叢集管理系統之外,它還可以讀取已有的任何 Hadoop 資料。這是個非常大的優勢,它可以運作在任何 Hadoop 資料源上,0 Hive、HBase、HDFS 等。這個特性讓使用者可以輕易遷移已有的持久化層資料。(5)社群活躍度高

Spark 起源于 2009 年,當下已有超過 50 個機構、260 個工程師貢獻過代碼。開源系統的發展不應隻看一時之快,更重要的是支援一個活躍的社群和強大的生态系統。

同時我們也應該看到 Spark 并不是完美的,RDD 模型适合的是粗粒度的全局資料并行計算。不适合細粒度的、需要異步更新的計算。對于一些計算需求,如果要針對特定工作負載達到最優性能,還是需要使用一些其他的大資料系統。例如,圖計算領域的 GraphLab 在特定計算負載性能上優于 GraphX,流計算中的 Storm 在實時性要求很高的場合要比

Spark Streaming 更勝一籌。

随着 Spark 發展勢頭日趨迅猛,它已被廣泛應用于 Yahoo!、Twitter、阿裡巴巴、百度、網易、英特爾等各大公司的生産環境中。

繼續閱讀