【Spark】(二) Spark入門

一、Spark架構

什麼是spark?
Sprak是基於內存的快速、通用、可拓展的大數據分析引擎

1、Spark 內置模塊

在這裏插入圖片描述
  Spark Core: 實現了Spark的基本功能,包含任務調度、內存管理、錯誤恢復、與存儲系統交互等模塊。Spark Core中還包含了對彈性分佈式數據集(Resilient Distributed DataSet,簡稱RDD)的API定義。
  Spark SQL: 是Spark用來操作結構化數據的程序包。通過Spark SQL,我們可以使用 SQL或者Apache Hive版本的SQL方言(HQL)來查詢數據。
  Spark Streaming: 是Spark提供的對實時數據進行流式計算的組件。提供了用來操作數據流的API。
  Spark MLlib: 提供常見的機器學習(ML)功能的程序庫。包括分類、迴歸、聚類、協同過濾等
  集羣管理器: Spark設計爲可以高效地在一個計算節點到數千個計算節點之間伸縮計算。Spark支持在各種集羣管理器(Cluster Manager)上運行,包括Hadoop YARN、Apache Mesos,以及Spark自帶的一個簡易調度 器,叫作獨立調度器。

spark運行架構
在這裏插入圖片描述

SparkContext:整個應用的上下文,spark的主入口,連接Driver與Spark Cluster(Workers)每個JVM僅能有一個活躍的SparkContext
Cluster Manager:節點管理器,把算子(rdd)發送給WorkNode
WorkNode:從節點,負責控制計算節點,啓動Executor或者Driver
Cache:workNode之間共享信息,通信
Executor:執行器爲應用程序提供分佈式計算以及數據存儲功能
task:任務(core數,一次運行的task)

  1)Master

Spark特有資源調度系統的Leader。掌管着整個集羣的資源信息,類似於Yarn框架中的ResourceManager,主要功能:
(1)監聽Worker,看Worker是否正常工作;
(2)Master對Worker、Application等的管理(接收worker的註冊並管理所有的worker,接收client提交的application,(FIFO)調度等待的application並向worker提交)。

  2)Worker

Spark特有資源調度系統的Slave,有多個。每個Slave掌管着所在節點的資源信息,類似於Yarn框架中的NodeManager,主要功能:
(1)通過RegisterWorker註冊到Master;
(2)定時發送心跳給Master;
(3)根據master發送的application配置進程環境,並啓動StandaloneExecutorBackend(執行Task所需的臨時進程)

  1)Driver(驅動器)

Spark的驅動器是執行開發程序中的main方法的進程。它負責開發人員編寫的用來創建SparkContext、創建RDD,以及進行RDD的轉化操作和行動操作代碼的執行。如果你是用spark shell,那麼當你啓動Spark shell的時候,系統後臺自啓了一個Spark驅動器程序,就是在Spark shell中預加載的一個叫作 sc的SparkContext對象。如果驅動器程序終止,那麼Spark應用也就結束了。主要負責:
(1)把用戶程序轉爲任務
(2)跟蹤Executor的運行狀況
(3)爲執行器節點調度任務
(4)UI展示應用運行狀況

  2)Executor(執行器)

Spark Executor是一個工作進程,負責在 Spark 作業中運行任務,任務間相互獨立。Spark 應用啓動時,Executor節點被同時啓動,並且始終伴隨着整個 Spark 應用的生命週期而存在。如果有Executor節點發生了故障或崩潰,Spark 應用也可以繼續執行,會將出錯節點上的任務調度到其他Executor節點上繼續運行。主要負責:
(1)負責運行組成 Spark 應用的任務,並將狀態信息返回給驅動器進程;
(2)通過自身的塊管理器(Block Manager)爲用戶程序中要求緩存的RDD提供內存式存儲。RDD是直接緩存在Executor進程內的,因此任務可以在運行時充分利用緩存數據加速運算。
總結:Master和Worker是Spark的守護進程,即Spark在特定模式下正常運行所必須的進程。Driver和Executor是臨時進程,當有具體任務提交到Spark集羣纔會開啓的進程。
在這裏插入圖片描述

2、運行流程

在這裏插入圖片描述

1.構建Spark Application的運行環境,啓動SparkContext
2.SparkContext向資源管理器(可以是Standalone,Mesos,Yarn)申請運行Executor資源,並啓動StandaloneExecutorbackend
3.Executor向SparkContext申請Task
4.SparkContext將應用程序分發給Executor
5.SparkContext構建成DAG圖,將DAG圖分解成Stage、將Taskset發送給Task Scheduler,最後由Task 6.Scheduler將Task發送給Executor運行
Task在Executor上運行,運行完釋放所有資源

二、Spark的運行模式

1、Local模式

Local模式就是運行在一臺計算機上模式,通常就是用於本機上的測試。
Local[N]:指定使用幾個線程來運行計算,通常我們CPU有幾個Core,就指幾個線程,最大化利用Cpu計算能力。
local[*]:直接安裝Cpu最多Core來設置線程數

2、Standalone模式

構建一個基於 Mster+Slaves 的資源調度集羣,Spark 任務提交給 Master運行。是 Spark 自身的一個調度系統。
在這裏插入圖片描述

3、Yarn模式

Spark客戶端直接連接Yarn,不需要額外構建Spark集羣。有yarn-client和yarn-cluster兩種模式,主要區別在於:Driver程序的運行節點。
yarn-client: Driver程序運行在客戶端,適用於交互、調試,希望立即看到app的輸出
yarn-cluster: Driver程序運行在由RM(ResourceManager)啓動的AM(APPMaster)適用於生產環境。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章