天天看點

Spark通識

在說Spark之前,筆者在這裡向對Spark感興趣的小夥伴們建議,想要了解、學習、使用好Spark,Spark的官網是一個很好的工具,幾乎能滿足你大部分需求。

同時,建議學習一下scala語言,主要基于兩點:

1.Spark是scala語言編寫的,要想學好Spark必須研讀分析它的源碼,當然其他技術也不例外

2.用scala語言編寫Spark程式相對于用Java更友善、簡潔、開發效率更高(後續我會針對scala語言做單獨講解)。書歸正傳,下面整體介紹一下Spark生态圈。

Apache Spark是一種快速、通用、可擴充、可容錯的、基于記憶體疊代計算的大資料分析引擎。首先強調一點, Spark目前是一個處理資料的計算引擎, 不做存儲。首先咱們通過一張圖來看看目前Spark生态圈都包括哪些核心元件:

Spark通識
本篇文章先簡單介紹一下各個元件的使用場景,後續筆者會單獨詳解其中的核心元件,以下所講均基于Spark2.X版本。

Spark RDD和Spark SQL

Spark RDD和Spark SQL多用于離線場景,但Spark RDD即可以處理結構化資料也可以處理非結構資料,但Spark SQL是處理結構化資料的,内部通過dataset來處理分布式資料集

SparkStreaming和StructuredStreaming

用于流式處理,但強調一點Spark Streaming是基于微批處理來處理資料的,即使Structured Streaming在實時方面作了一定優化,但就目前而言,相對于Flink、Storm,Spark的流式處理準備确實準實時處理

MLlib

用于機器學習,當然pyspark也有應用是基于python做資料處理

GraphX

用于圖計算

Spark R

基于R語言進行資料處理、統計分析的

下面介紹一下Spark的特性:

  • 實作DAG執行引擎,基于記憶體疊代式計算處理資料,Spark可以将資料分析過程的中間結果儲存在記憶體中,進而不需要反複的從外部存儲系統中讀寫資料,相較于mapreduce能更好地适用于機器學習和資料挖掘和等需要疊代運算的場景。

  • 易用

支援scala、java、python、R多種語言;支援多種進階算子(目前有80多種),使使用者可以快速建構不同應用;支援scala、python等shell互動式查詢

  • 通用

Spark強調一站式解決方案,集批處理、流處理、互動式查詢、機器學習及圖計算于一體,避免多種運算場景下需要部署不同叢集帶來的資源浪費

  • 容錯性好

在分布式資料集計算時通過checkpoint來實作容錯,當某個運算環節失敗時,不需要從頭開始重新計算【往往是checkpoint到HDFS上】

  • 相容性強

可以運作在Yarn、Kubernetes、Mesos等資料總管上,實作Standalone模式作為内置資源管理排程器,支援多種資料源