Spark Core Basic
Cluster Overview
Spark Basic Concepts
此段落列出Spark中常用到的基本詞彙,包括上圖中的詞彙。
- Application
- 開發者基於Spark構建的程式。包含一個Driver與多個Executor
- Application jar
- 包含一個Spark Application,jar不應該包含Hadoop或Spark library,因為這些library會在runtime的時候被載入,而且若包含這些library,在程式分發時會增加網路傳輸
- Driver program
- 此Process運行Application的mian方法,並創建SparkContext
- Cluster manager
- 用於獲取Cluster資源的外部服務
- Deploy mode
- 區分Driver process所運行的位置
- 若使用Cluster mode執行,則會將Driver運行在Cluster之上
- 若是Standalone模式,是執行在Work節點之上
- 若是YARN模式,是運行在NodeManager節點之上
- 若使用Client mode執行,則會將Driver運行在提交Application的節點上
- 代碼不需做修改,就可以直接運行在Client與Cluster mode上
- Worker node:
- Cluster中的任一節點,並運行Application程式
- 若為Standalone模式,則是在Worker process所在的機器之上
- 若為YARN模式,則是在NodeManager節點之上
- 可以跑多個Executor
- Cluster中的任一節點,並運行Application程式
- Executor
- 在Worker node上一個運行Spark Application的Process,Process中運行多個task、進行Cache、保存資料在Memory或Disk中
- 每個Application擁有一個或多個的Executor
- Task
- 發送至一個Executor上運行的一個工作單元
- 為一個Thread
- 每個Executor上由若干個Core組成,每個Executor的每個Core一次只能執行一個Task
- Core是虛擬的,可以認為是一個Executor中的Thread
- Task被執行的併發度 = Executor數量 * 每個Executor Core的數量
- Job
- 一個並行的計算,包含多個Task
- 一個Job對應一個Spark action
- Stage
- Job被拆分成多個Task集合稱為Stage,相同Job所拆分出來的Stage之間互相依賴
Components
此段落解釋Spark cluster中,各Component之間的關西
- Spark Application是由集群中一群互不影響的Process(Driver、Executor)所組成,Process之間透過main方法中的SparkContext來協調調度(由Driver program擁有)。
SparkContext可以連接多種不同類型的Cluster manager來達到資源配置,例如Standalone、YARN。一但連接成功,Spark請求Executor運行在Cluster中的節點。
將Application Code傳送至Executor上運行
最後SparkContext將傳送Task至Executor上運行。 - 每一個Application都有自己的Executor Process,
這些Process在整個Application的週期內都是存活的,直到SparkContext.stop
。隔離的效益體現在在Driver端的調度,以及Executor端的Task運行(不同App的Task運行在不同的JVM上,不同的JVM表示不同的Process),
但也意味者不同Spark App之間的資料無法共享,除非寫到外部數據元源。 - Spark Application不感知底層的Cluster manager,一但拿到Executor processes,並與它們進行交互,無論底層的架構是Mesos或YARN
- Driver必須監聽並接收從Executor來的連接,在整個Application的生命週期中,Driver並需能夠連接到Work節點。
- 因為Driver是用來調度Task的,那麼它應該被運行在靠近Work節點,盡可能的是同一個本地的網路或同一個機架上。如果想發送一個遠端Cluster中,最好打開RPC到Driver上,並提交一些作業。
Cluster Manager Types
目前支援的Cluster manager
- Standalone
- 最簡單的集群管理,Spark自帶,可以非常簡單快速的架設
- 如果改了一個參數設定,其他集群內的其他節點也需要進行同步修改
- Apache Mesos
- Hadoop YARN
- Kubernetes