大數據(十一)--Spark概述

Spark 簡介

  Spark官網爲: http://spark.apache.org/, Spark也是用於海量數據處理的計算框架. 官方對Spark的定義是:

Apache Spark™ is a unified analytics engine for large-scale data processing.
翻譯過來是: Spark是用於大規模數據處理的統一分析引擎。

  Spark最初由美國加州伯克利大學(UCBerkeley)的AMP(Algorithms, Machines and People)實驗室於2009年開發. Spark是基於內存計算的大數據並行計算框架, 可用於構建大型的、低延遲的數據分析應用程序. 2013年, Spark加入Apache孵化器項目後, 開始迅猛發展, 如今已成爲Apache軟件基金會最重要的三大分佈式計算系統開源項目之一.

  Spark作爲大數據計算平臺的後起之秀, 在2014年打破了Hadoop保持的基準排序 (Sort Benchmark) 紀錄, 使用206個節點在23分鐘的時間裏完成了100TB數據的排序; 而Hadoop則是使用2000個節點在72分鐘的時間裏完成同樣數據的排序. 也就是說, Spark僅使用了Hadoop十分之一的計算資源, 獲得了比Hadoop快3倍的速度. 新紀錄的誕生, 使得Spark獲得多方追捧, 也表明了Spark可以作爲一個更加快速、高效的大數據計算平臺.

  Spark具有如下幾個主要特點:

  1. 運行速度快, 高效: Spark使用先進的DAG(Directed Acyclic Graph, 有向無環圖)執行引擎, 以支持循環數據流與內存計算, 減少了迭代過程中的數據落地. 基於內存的執行速度可比MapReduce快上百倍, 基於磁盤的執行速度能快十倍;
  2. 容易使用: Spark支持使用Scala、Java、Python和R語言進行編程, 簡潔的API設計有助於用戶輕鬆構建並行程序, 並且可以通過Spark Shell進行交互式編程;
  3. 通用性: Spark提供了完整而強大的技術棧, 包括SQL查詢、流式計算、機器學習和圖算法組件, 這些組件可以無縫整合在同一個應用中, 足以應對複雜的計算;
  4. 運行模式多樣: Spark有4中運行模式, 分別是Local(多用於測試環境), Standalone(Spark自帶資源調度器), Yarn(生產環境使用最多), Mesos. 其中Standalone, Yarn和Mesos都是資源調度器.

  Spark源碼託管在Github中,截至2018年11月,共有超過1300名來自不同公司的開發人員貢獻了23000多次代碼提交,可見Spark的受歡迎程度是非常高的。Spark源碼倉庫

Spark 歷史

  Spark相比於Hadoop, 其發展更加迅速. Hadoop 已經有12年的歷史而Spark只有6年(2012開始), 但Spark在應用上逐漸取代Hadoop.

在這裏插入圖片描述
  截至到目前爲止, Spark已經更新到2.4.0版本. 目前常用的穩定版本是1.6.3, 初步學習也是建議使用這個版本.

Spark 技術棧

  Spark誕生於AMP實驗室, APM實驗室在做數據分析時使用到的技術基本就是我們將要學習的技術. 接下來看看都有哪些技術:
技術棧

  從下往上來看:

  • Mesos(瞭解): 對Spark集羣資源進行管理的工具, 其功能於Hadoop集羣中Yarn的作用相似, 但國內用的較少, 基本上還是使用Yarn來進行集羣資源管理.
  • HDFS: Hadoop生態圈中用來存儲的分佈式文件系統, HDFS是基於磁盤來進行存儲的. 在之前的博客中已經做過詳細介紹, 可查看: 分佈式文件系統 一文.
  • Tachyon(瞭解): 基於內存的分佈式存儲系統.
  • HadoopMR: Hadoop生態圈中用來進行批量處理的計算框架. 可查看: 分佈式計算框架MapReduce 一文.
  • Hive: 構建數據倉庫的工具, Hive是基於HDFS和MR的, 它支持編寫SQL語句同時支持創建多種類型的表.
  • Strom: 流式計算框架, 由於SparkStreaming的出現, Strom逐漸被SparkStreaming代替.
  • MPI(瞭解): 基於消息傳遞的分佈式計算框架.
  • Spark Core: Spark的核心部分, 這是學習下面技術的基礎, 我們會在之後進行重點講解.
  • SparkStreaming: 流式計算框架, 能輕鬆構建可擴展的容錯流應用程序.
  • SparkMlib(MLbase): Spark提供的可擴展機器學習庫, 裏面封裝了大量用於機器學習的方法.
  • SparkSQL(Shark): 是Spark用於處理結構化數據的模塊, SparkSQL除了支持編寫SQL語句之外, 還可以操作Hive中的數據源.
  • GraphX: Spark用於圖形和圖形並行計算的API。
  • BlinkDB: 可指定容錯率的數據庫, 即在使用SQL語句查詢時, 查詢結果可以有一部分是錯誤的, 這部分數據量的比重可以指定.

  瞭解技術棧之後, 就可以明白下面這句話了.

One stack rule them all.
  即一棧式解決所有大數據的處理場景.

在這裏插入圖片描述

  常見大數據處理場景以及對應解決的技術:

場景 Spark出現之前的技術 Spark中的技術
批處理 MapReduce SparkCore
流式處理 Strom SparkStreaming
交互式處理 Hive SparkSQL
機器學習 Mahout SparkMLib

  Spark之前的每個技術都需要搭建一套服務, MR需要搭建高可用的Hadoop集羣, Strom也要搭建, Hive也需要安裝工具, 然後再整合Mahout.
  像這樣集羣搭建過多,容易帶來許多問題: 1. 資源搶佔; 2. 搭建成本高; 3.維護成本高.

  如果選擇Spark, 則只需要搭建一套Spark集羣即可. SparkStreaming, SparkSQL與SparkCore之間的關係就類似於Struts2, SpringMVC和Servlet的關係. SparkCore和Servlet兩者都是基礎, 是核心部分.

Spark相較於Hadoop的優點

  Hadoop雖引領大數據技術併成爲大數據技術的標準, 但其本身還存在諸多不足, 最主要問題是MR計算框架的高延遲, 無法滿足實時、快速計算的需求, 只適用離線批處理的場景.

  MapReduce在其工作流程中存在如下缺點:

  1. 表達能力有限. --計算需要轉化成Map和Reduce兩個操作, 但這並不適合所有的情況, 難以描述複雜的數據處理過程;
  2. 磁盤IO開銷大. --每次執行時都需要從磁盤讀取數據, 並且在計算完成後需要將中間結果寫入到磁盤中, IO開銷較大;
  3. 延遲高. --一次計算可能需要分解成一系列按順序執行的MR任務, 任務之間的銜接涉及IO開銷, 從而產生較高延遲. 而且, 在前一個任務執行完成之前, 其他任務無法開始, 難以勝任複雜、多階段的計算任務.
  4. MR使用細粒度資源調度, 每一個Job都需要單獨申請資源.

  Spark在借鑑MR優點的同時, 又很好地解決了MR所面臨的問題. 相比於MR, Spark主要具有如下優點:

  1. Spark的計算模式也屬於MR, 但不侷限於Map和Reduce操作. 它還提供了多種數據集(RDD, DataFrame, DStream等)操作類型, 編程模型比MR更加靈活;
  2. Spark支持內存計算, 中間結果直接放內存中, 帶來了更高的迭代運算效率;
  3. Spark基於DAG的任務調度執行機制, 要優於MR的迭代執行機制;
  4. Spark支持粗粒度資源調度, Spark Application在執行時, 一次申請資源可以多個Job複用;
  5. Spark可根據不同場景選擇不同的shuffle(SortShuffle, HashShuffle).

  Spark最大的優勢就是將計算數據、中間結果都存儲在內存中, 大大減少IO開銷. 因此, Spark更適合於迭代運算比較多的數據挖掘與機器學習運算. 在使用Hadoop進行迭代計算時非常耗資源, 因爲每次迭代都需要從磁盤中讀取、寫入中間數據, IO開銷大. 而Spark將數據載入內存後, 之後的迭代計算都可以直接使用內存中的中間結果作運算, 避免了從磁盤中頻繁讀取數據.
在這裏插入圖片描述

  在實際進行開發時, 使用Hadoop需要編寫許多相對底層的代碼, 不夠高效. 相對而言, Spark提供了多種高層次、簡潔的API, 通常情況下, 對於實現相同功能的應用程序, Spark的代碼量要比Hadoop少2-5倍. 更重要的是, Spark提供了實時交互式編程反饋, 可以方便地驗證、調整算法.

  儘管Spark相對於Hadoop而言具有較大優勢, 但Spark並不能完全替代Hadoop, 主要用於替代Hadoop中的MapReduce計算模型. 實際上, Spark已經很好地融入了Hadoop生態圈, 併成爲其中的重要一員, 它可以藉助於Yarn實現資源調度管理, 藉助於HDFS實現分佈式存儲. 此外, 雖然Hadoop可以使用廉價、異構的機器來做分佈式存儲與計算, 但Spark對硬件的要求較高, 對內存與CPU有一定的要求.

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