spark系列(一):簡介

spark是一種快速、通用、可擴展的大數據分析引擎。spark除了提供核心的api外,為了更方便使用,針對更具體的場景提供瞭解決方案。spark提供了用於交互查詢的spark SQL、流處理spark Streaming、機器學習spark MLlib和圖計算spark GraphX。

spark系列(一):簡介

spark能力分佈

spark具有如下優點:

與Hadoop提供的Map/Reduce相比,spark速度更快。這得益於其對緩存的充分利用。我們知道Map/Reduce模式下,在shuffle階段,Map的結果會被寫入本地文件中,Reduce時會通過網絡去讀取文件中的數據。在Reduce任務完成之後,結果又會被寫到HDFS中。在一次Map/Reduce任務中,數據會被多次寫入到磁盤中。而spark則會充分的利用內存。spark在計算時,會將job劃分成幾個stage,不存在依賴的stage是可以並行執行的。在stage內部,數據沒有超出內存閾值的情況下,是不會寫入磁盤的。在不同stage之間的shuffle階段,spark也會盡量本地化的調度任務,避免數據的移動。

spark同時也具有很好的易用性。spark提供了java、scala和python編程接口,上面我們也看到針對不同的具體場景提供了不同的實現。RDD的設計,簡化了學習成本。另外,spark提供了豐富的算子,便於程序的編寫。

良好的擴展性。目前支持Standalone、Mesos、Yarn和k8s的調度模式。

spark的大體架構如下:

spark系列(一):簡介

spark架構

其中,Driver是用戶編寫的數據處理邏輯,這個邏輯中包含用戶創建的SparkContext。SparkContext是用戶邏輯與spark集群主要的交互接口,它會和Cluster Manager交互,包括申請計算資源等。Cluster Manager負責集群的資源管理和調度,現在支持Standalone、Mesos、Yarn和k8s。Work Node是集群中可以執行任務的節點。Excutor是一個Work Node上為某應用啟動的一個進程,該進程負責運行任務,並且負責將數據存於內存或者磁盤上。Task是被調度到某個Executor上的計算單元。每個應用都有各自獨立的Executor,計算最終在計算節點的Executor中執行。


分享到:


相關文章: