Spark 運維實戰簡介


 Spark 大數據計算框架、架構、計算模型和數據管理策略及 Spark 在工業界的應用。圍繞 Spark  BDAS 項目及其子項目進行了簡要介紹。目前,Spark 生態系統已經發展成爲一個包含多個子項目的集合,其中包含 SparkSQLSpark StreamingGraphX MLlib 等子項目,本章只進行簡要介紹,後續章節再詳細闡述。

 

 

1.1 Spark 是什麼

 

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

 

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

 

1Spark 的歷史與發展

 

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 的數據分析範式更加豐富。


2Spark 之於 Hadoop

 

更準確地說,Spark 是一個計算框架,而 Hadoop 中包含計算框架 MapReduce 和分佈式文件系統 HDFSHadoop 更廣泛地說還包括在其生態系統上的其他系統,如 Hbase

 

Hive 等。

 

Spark  MapReduce 的替代方案,而且兼容 HDFSHive 等分佈式存儲層,可融入

 

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

spacer.gif 

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 來啓動任務,通過線程池複用線程來避免進程或線程啓動和切換開銷。

3Spark 能帶來什麼

 

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

 

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

 

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

 

Spark 充分利用和集成 Hadoop 等其他第三方組件,同時着眼於大數據處理,數據處理速度是至關重要的,Spark 通過將中間結果緩存在內存減少磁盤 I/O 來達到性能的提升。

 

3)易於使用,Spark 支持多語言 Spark 支持通過 ScalaJava  Python 編寫程序,這允許開發者在自己熟悉的語言環境

 

下進行工作。它自帶了 80 多個算子,同時允許在 Shell 中進行交互式計算。用戶可以利用 Spark 像書寫單機程序一樣書寫分佈式程序,輕鬆利用 Spark 搭建大數據內存計算平臺並充分利用內存計算,實現海量數據的實時處理。

 

4)與 HDFS 等存儲層兼容 Spark 可以獨立運行,除了可以運行在當下的 YARN 等集羣管理系統之外,它還可以讀取已有的任何 Hadoop 數據。這是個非常大的優勢,它可以運行在任何 Hadoop 數據源上,0 HiveHBaseHDFS 等。這個特性讓用戶可以輕易遷移已有的持久化層數據。(5)社區活躍度高

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

 

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

 

Spark Streaming 更勝一籌。

 

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







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