Spark學習筆記1——開篇介紹

1、Spark簡介

Spark是美國加州大學伯克利分校的AMP實驗室(主要創始人lester和Matei)開發的通用的大數據處理框架。

Spark應用程序可以使用R語言、Java、Scala和Python進行編寫,極少使用R語言編寫Spark程序,Java和Scala語言編寫的Spark程序的執行效率是相同的,但Java語言寫的代碼量多,Scala簡潔優雅,但可讀性不如Java,Python語言編寫的Spark程序的執行效率不如Java和Scala。

回顧Hadoop的工作流程,可以發現Hadoop存在如下一些缺點:

  • 表達能力有限。計算都必須要轉化成Map和Reduce兩個操作,但這並不適合所有的情況,難以描述複雜的數據處理過程;
  • 磁盤IO開銷大。每次執行時都需要從磁盤讀取數據,並且在計算完成後需要將中間結果寫入到磁盤中,IO開銷較大;
  • 延遲高。一次計算可能需要分解成一系列按順序執行的MapReduce任務,任務之間的銜接由於涉及到IO開銷,會產生較高延遲。而且,在前一個任務執行完成之前,其他任務無法開始,難以勝任複雜、多階段的計算任務。

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

  • Spark的計算模式也屬於MapReduce,但不侷限於Map和Reduce操作,還提供了多種數據集操作類型,編程模型比MapReduce更靈活;
  • Spark提供了內存計算,中間結果直接放到內存中,帶來了更高的迭代運算效率;
  • Spark基於DAG的任務調度執行機制,要優於MapReduce的迭代執行機制。

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

DAG計算模型在Spark任務調度中詳解!
Spark計算比MapReduce快的根本原因在於DAG計算模型。一般而言,DAG相比MapReduce在大多數情況下可以減少shuffle次數。Spark的DAGScheduler相當於一個改進版的MapReduce,如果計算不涉及與其他節點進行數據交換,Spark可以在內存中一次性完成這些操作,也就是中間結果無須落盤,減少了磁盤IO的操作。但是,如果計算過程中涉及數據交換,Spark也是會把shuffle的數據寫磁盤的!有一個誤區,Spark是基於內存的計算,所以快,這不是主要原因,要對數據做計算,必然得加載到內存,Hadoop也是如此,只不過Spark支持將需要反覆用到的數據給Cache到內存中,減少數據加載耗時,所以Spark跑機器學習算法比較在行(需要對數據進行反覆迭代)。Spark基於磁盤的計算也是比Hadoop快。剛剛提到了Spark的DAGScheduler是個改進版的MapReduce,所以Spark天生適合做批處理的任務。Hadoop的MapReduce雖然不如spark性能好,但是HDFS仍然是業界的大數據存儲標準。

Spark是粗粒度的資源調度,而MR是細粒度的資源調度。

2、Spark生態系統

在實際應用中,大數據處理主要包括以下三個類型:
 複雜的批量數據處理:時間跨度通常在數十分鐘到數小時之間;
 基於歷史數據的交互式查詢:時間跨度通常在數十秒到數分鐘之間;
 基於實時數據流的數據處理:時間跨度通常在數百毫秒到數秒之間。
目前已有很多相對成熟的開源軟件用於處理以上三種情景,比如,可以利用Hadoop MapReduce來進行批量數據處理,可以用Impala來進行交互式查詢(Impala與Hive相似,但底層引擎不同,提供了實時交互式SQL查詢),對於流式數據處理可以採用開源流計算框架Storm。一些企業可能只會涉及其中部分應用場景,只需部署相應軟件即可滿足業務需求,但是,對於互聯網公司而言,通常會同時存在以上三種場景,就需要同時部署三種不同的軟件,這樣做難免會帶來一些問題:

  • 不同場景之間輸入輸出數據無法做到無縫共享,通常需要進行數據格式的轉換;
  • 不同的軟件需要不同的開發和維護團隊,帶來了較高的使用成本;
  •  比較難以對同一個集羣中的各個系統進行統一的資源協調和分配。

Spark的設計遵循“一個軟件棧滿足不同應用場景”的理念,逐漸形成了一套完整的生態系統,既能夠提供內存計算框架,也可以支持SQL即席查詢、實時流式計算、機器學習和圖計算等。Spark可以部署在資源管理器YARN之上,提供一站式的大數據解決方案。因此,Spark所提供的生態系統足以應對上述三種場景,即同時支持批處理、交互式查詢和流數據處理。
現在,Spark生態系統已經成爲伯克利數據分析軟件棧BDAS(Berkeley Data Analytics Stack)的重要組成部分。BDAS的架構如圖所示,從中可以看出,Spark專注於數據的處理分析,而數據的存儲還是要藉助於Hadoop分佈式文件系統HDFS、Amazon S3等來實現的。因此,Spark生態系統可以很好地實現與Hadoop生態系統的兼容,使得現有Hadoop應用程序可以非常容易地遷移到Spark系統中。

圖 BDAS架構

Spark的生態系統主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX 等組件,各個組件的具體功能如下:

  • Spark Core:Spark Core包含Spark的基本功能,如內存計算、任務調度、部署模式、故障恢復、存儲管理等。Spark建立在統一的抽象RDD之上,使其可以以基本一致的方式應對不同的大數據處理場景;通常所說的Apache Spark,就是指Spark Core;
  • Spark SQL:Spark SQL允許開發人員直接處理RDD,同時也可查詢Hive、HBase等外部數據源。Spark SQL的一個重要特點是其能夠統一處理關係表和RDD,使得開發人員可以輕鬆地使用SQL命令進行查詢,並進行更復雜的數據分析;
  •  Spark Streaming:Spark Streaming支持高吞吐量、可容錯處理的實時流數據處理,其核心思路是將流式計算分解成一系列短小的批處理作業。Spark Streaming支持多種數據輸入源,如Kafka、Flume和TCP套接字等;
  • MLlib(機器學習):MLlib提供了常用機器學習算法的實現,包括聚類、分類、迴歸、協同過濾等,降低了機器學習的門檻,開發人員只要具備一定的理論知識就能進行機器學習的工作;
  •  GraphX(圖計算):GraphX是Spark中用於圖計算的API,可認爲是Pregel在Spark上的重寫及優化,Graphx性能良好,擁有豐富的功能和運算符,能在海量數據上自如地運行復雜的圖算法。

 

發佈了25 篇原創文章 · 獲贊 14 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章