1. 程式人生 > >大資料(十二)--Spark概述

大資料(十二)--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, 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的優點