Spark Core Basic

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
  • 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之間的關西

  1. Spark Application是由集群中一群互不影響的Process(Driver、Executor)所組成,Process之間透過main方法中的SparkContext來協調調度(由Driver program擁有)。
    SparkContext可以連接多種不同類型的Cluster manager來達到資源配置,例如Standalone、YARN。一但連接成功,Spark請求Executor運行在Cluster中的節點。
    將Application Code傳送至Executor上運行
    最後SparkContext將傳送Task至Executor上運行。
  2. 每一個Application都有自己的Executor Process,
    這些Process在整個Application的週期內都是存活的,直到SparkContext.stop
    。隔離的效益體現在在Driver端的調度,以及Executor端的Task運行(不同App的Task運行在不同的JVM上,不同的JVM表示不同的Process),
    但也意味者不同Spark App之間的資料無法共享,除非寫到外部數據元源。
  3. Spark Application不感知底層的Cluster manager,一但拿到Executor processes,並與它們進行交互,無論底層的架構是Mesos或YARN
  4. Driver必須監聽並接收從Executor來的連接,在整個Application的生命週期中,Driver並需能夠連接到Work節點。
  5. 因為Driver是用來調度Task的,那麼它應該被運行在靠近Work節點,盡可能的是同一個本地的網路或同一個機架上。如果想發送一個遠端Cluster中,最好打開RPC到Driver上,並提交一些作業。

Cluster Manager Types

目前支援的Cluster manager

  • Standalone
    • 最簡單的集群管理,Spark自帶,可以非常簡單快速的架設
    • 如果改了一個參數設定,其他集群內的其他節點也需要進行同步修改
  • Apache Mesos
  • Hadoop YARN
  • Kubernetes