Spark系列文章(一):Spark初識

Spark系列文章(一):Spark初識

做者:studytime
原文: https://www.studytime.xin/

什麼是Spark

官網地址:http://spark.apache.org/算法

spark 是高性能 DAG 計算引擎,一個實現快速通用的集羣計算平臺。它是由加州大學伯克利分校AMP 實驗室開發的通用內存並行計算框架,用來構建大型的、低延遲的數據分析應用程序。它擴展了普遍使用的 MapReduce 計算模型。高效的支撐更多計算模式,包括交互式查詢和流處理。spark 的一個主要特色是可以在內存中進行計算,及時依賴磁盤進行復雜的運算。Spark 依然比 MapReduce 更加高效。sql

發展歷程:shell

  • 2009年,Spark 誕生於伯克利大學 AMPLab,最開初屬於伯克利大學的研究性項目
  • 2010年,正式開源
  • 2013年,成爲了 Apache 基金項目,同年,基於 spark 的開源商業公司 Databricks 成立
  • 2014年,成爲 Apache 基金的頂級項目

Spark產生背景

Spark 是在 MapReduce 的基礎上產生的,借鑑了大量 MapReduce 實踐經驗,引入多種新型涉及思想和優化策略。針對MapReduce計算框架存在的侷限性進行分析,能更好的瞭解到 Spark。apache

MapReduce 的侷限性以下:編程

一、處理效率低效網絡

  • Map中間結果寫磁盤,Reduce寫HDFS,多個MR之間經過HDFS交換數據
  • 任務調度和啓動開銷大
  • 沒法充分利用內存
  • Map 端和 Reduce 端均須要排序
  • 複雜功能 Io 開銷大,對於複雜 sql,需轉換 MapReduce 計算,須要經過 HDFS 進行磁盤數據交換,而讀寫Hfds需消耗大量磁盤和網絡 IO

二、 不適合迭代計算(如機器學習、圖計算等),交互式處理(數據挖掘) 和流式處理(點擊日誌分析)
三、 MapReduce 編程不夠靈活架構

  • 僅支持 Map 和 Reduce 兩種操做
  • 嘗試函數式編程風格

四、計算框架多樣化、無形中產生運維和管理成本框架

Spark特色

Spark 是基與 MapReduce 基礎產生了,克服了其存在的性能低下,變成不夠靈活的缺點。運維

Spark 做爲一種 DAG 計算框架,主要特色以下:
一、高效性,性能高效,主要體現以下:機器學習

  • 內存計算引擎。Spark 容許用戶將數據放到內存中以加快數據讀取,進而提升數據的處理性能。Spark提供了數據抽象RDD,支持多種存儲級別。
  • 通用 DAG 計算引擎。相較於 MapReduce 的簡單兩階段計算引擎,Spark 則是一種更加通用的DAG引擎,它使得數據可經過本地磁盤或內存流向不一樣就按單元,而不用想 MapReduce 哪像藉助抵消的HDFS.
  • 性能高效。Spark 是在 MapReduce 基礎上產生的,借鑑和重用了 MapReduce 衆多已存在組件和涉及思想,同時引入了大量新穎的設計理念,包括容許資源重用、基於線程池的 Executor,無排序shuffle,通用DAG優化和調度引擎等。據有關測試,相關資源消耗狀況下,20-100倍的提高。

二、易用性。
Spark 支持 Java、Python 和 Scala 的 API,還支持超過 80 種高級算法,使用戶能夠快速構建不一樣的應用。並且 Spark 支持交互式的 Python 和 Scala 的 shell,能夠很是方便地在這些 shell 中使用 Spark 集羣來驗證解決問題的方法。

三、通用性。
Spark 提供了統一的解決方案。Spark 能夠用於批處理、交互式查詢(Spark SQL)、實時流處理(Spark Streaming)、機器學習(Spark MLlib)和圖計算(GraphX)。這些不一樣類型的處理均可以在同一個應用中無縫使用。Spark統一的解決方案很是具備吸引力,畢竟任何公司都想用統一的平臺去處理遇到的問題,減小開發和維護的人力成本和部署平臺的物力成本。

四、兼容性。
Spark 能夠很是方便地與其餘的開源產品進行融合。好比,Spark可使用Hadoop的YARN和Apache Mesos做爲它的資源管理和調度器,器,而且能夠處理全部Hadoop支持的數據,包括HDFS、HBase和Cassandra 等。這對於已經部署 Hadoop 集羣的用戶特別重要,由於不須要作任何數據遷移就可使用Spark的強大處理能力。

總之,Spark以上有別於MapReduce的特色,使得它在數據分析、數據挖掘和機器學習等方面獲得普遍的應用,Spark已取代MapReduce成爲應用最爲普遍的數據計算引擎,同時基於MapReduce實現的機器學習庫Mahout也已經遷移到Spark或Flink.

Spark的組成

Spark組成(BDAS):全稱伯克利數據分析棧,經過大規模集成算法、機器、人之間展示大數據應用的一個平臺。也是處理大數據、雲計算、通訊的技術解決方案。

它的主要組件有:

  • SparkCore:將分佈式數據抽象爲彈性分佈式數據集(RDD),實現了應用任務調度、RPC、序列化和壓縮,併爲運行在其上的上層組件提供API。
  • SparkSQL:Spark Sql 是 Spark 來操做結構化數據的程序包,可讓我使用SQL語句的方式來查詢數據,Spark支持 多種數據源,包含Hive表,parquest以及JSON等內容。
  • SparkStreaming:是 Spark 提供的實時數據進行流式計算的組件。
  • MLlib:提供經常使用機器學習算法的實現庫。
  • GraphX:提供一個分佈式圖計算框架,能高效進行圖計算。
  • BlinkDB:用於在海量數據上進行交互式SQL的近似查詢引擎。
  • Tachyon:之內存爲中心高容錯的的分佈式文件系統。

Spark應用場景

一、Yahoo 將 Spark 用在 Audience Expansion 中的應用,進行點擊預測和即席查詢等
二、淘寶技術團隊使用了 Spark 來解決屢次迭代的機器學習算法、高計算複雜度的算法等。應用於內容推薦、社區發現等
三、騰訊大數據精準推薦藉助 Spark 快速迭代的優點,實現了在「數據實時採集、算法實時訓練、系統實時預測」的全流程實時並行高維算法,最終成功應用於廣點通pCTR投放系統上。
四、優酷土豆將 Spark 應用於視頻推薦(圖計算)、廣告業務,主要實現機器學習、圖計算等迭代計算。

問題討論

一、Spark 在任何狀況下均比 MapReduce 高效嗎?

回答: 答案是否認的,在某些數據量很是大的狀況下,MapReduce要比Spark快。例如: WordCount計算的數據量到1PB級別時,就會出現。緣由爲:目前Spark處理shufflw實現相對較差,但以後可能會改觀。

二、Spark 號稱「內存計算框架」,它將全部數據寫到內存嗎?

回答: 答案是不必定的,存在多種級別類型,能夠自行選擇。相對建議選擇內存,可是內存不夠最終仍是會寫入磁盤中。

三、 當前存在不少 DAG 引擎,包括 Spark Flink ,爲什麼你們都在討論 Spark ?

回答: 從設計架構上來看,Spark機構不必定是最優的,甚至某些方面還不如Flink和Tez.但我以爲相面兩個方面能夠說明部分問題,社區支持,推廣宣傳較好,活躍度高,故而關注度也更高。同時spark具備通用性,也是一大緣由。
相關文章
相關標籤/搜索