Spark 名詞解釋

程序外名詞

Application:應用程序

  • 應用程序就是用戶編寫的代碼打包之後的jar包和相關的依賴
  • Application = Driver + Executor(分佈在集羣中多個節點)
    • Driver部分的代碼:SparkConf+SparkContext
    • Executor部分的代碼:textFile, flatMap, map 具體的業務邏輯

Driver:驅動程序

  • Driver是應用程序運行時候的核心,因爲它附着了整個作業的調度,並且會向master申請資源來完成具體作業的功能
  • Driver是驅動Executor工作的,Executor是具體併發的處理數據分片
    • driver頻繁和executor通信,所以要在同一個網段中
    • 不要用IDE作爲Driver,因爲可能會出現箇中各樣的問題
  • 運行Application的main函數並創建SparkContext的環境對象
  • 創建SparkContext的目的是爲了準備Spark應用程序的運行環境,在Spark中有SparkContext負責與ClusterManager通信,進行資源申請、任務的分配和監控等,當Executor部分運行完畢後,Driver同時負責將SparkContext關閉,通常用SparkContext代表Driver
  • 除此之外,還向master註冊當前應用程序,master會給它分配資源,下一步根據Action觸發的job,job裏面有一些列的RDD,然後從後往前推,發現如果是寬依賴的話,就劃分成不同的stage,將Stage提交給底層調度器TaskScheduler,TaskScheduler拿到這個任務的集合(一個stage的內部都是完全計算邏輯一樣的任務,只不過是算的數據不一樣),最後根據任務情況把任務給Executor去執行,Executor如果出問題會向Driver進行彙報,運行完畢後SparkContext關閉

Deploy mode:應用程序部署模式

  • 區分 driver 進程在何處運行.
  • 在 “cluster” 模式下, 框架在集羣內部運行 driver.
  • 在 “client” 模式下, 提交者在集羣外部運行 driver.
    • 舉薦使用

Cluster Manager:集羣管理器

  • 獲取資源的外部程序
  • 爲每個spark application,在集羣中調度和分配資源的組件,比如Spark Standalone、YARN、Mesos等
    • 在standalone模式中即爲Master主節點,控制整個集羣,監控worker。
  • Spark Application的運行不依賴於Cluster Manager
  • 分配資源由以下內容決定:
    • 1.spark-env.sh和spark-default.sh
    • 2.spark-submit提交的參數
    • 3.程序中SparkConf配置的參數

Worker:工作節點

  • 集羣中任何可以運行Application代碼的節點
  • 在Standalone模式中指的是通過slave文件配置的Worker節點,在Spark on Yarn模式下就是NoteManager節點
  • 1個worker只爲當前應用程序開啓一個Exetuor,但是可以給不同的應用程序開啓多個不同的Exetuor
  • Worker上不運行程序代碼,Worker管理當前Node資源使用情況,會接收Master分配資源(計算內存)的指令,並通過ExecutorRunner來啓動新的進程來開啓Executor
  • Worker不會發機器資源信息給Master,在Master分配資源給Driver之時已經知道了,因爲所有的資源都是master分配的,master肯定知道了,只要在worker發生故障的時候纔會發送當前資源情況

Executor:執行者

  • 在 worker node 上 application 啓動的一個進程, 該進程運行 task 並在內存或磁盤上保存數據.
    每個 application 都有其獨有的 executor.
  • executor是運行在work所在的節點上爲當前應用程序而開啓的,進程裏面的對象,這個對象負責了具體task的運行
    • 如何負責:通過線程池併發執行、和線程複用的方式,每個線程可以運行一個任務,任務完成之後這個線程被回收到線程池當中進行線程複用
    • hadoop mapreduce不能複用jvm,spark在一個節點上默認情況下爲我們當前程序開啓1個jvm進程,這個jvm進程裏面是線程池的方式,通過線程來處理task任務,task從磁盤或者內存來讀寫數據

程序內名詞

Spark Context

  • 是我們通往集羣唯一通道,是開發者使用集羣各種功能唯一通道,是整個程序運行、調度的核心(不是指資源調度),裏面存在高層調度器、底層調度器、SchedulerBackEnd
    • 高等調度器(DAGScheduler):把整個作業劃分成了幾個小的階段
    • 底層調度器(TaskScheduler):每個階段裏的任務具體怎麼處理

job:作業

  • 包含一系列Task的並行計算,在spark中一般有Action觸發就會觸發一個job,Action不會產生RDD
  • 一個Application裏面可以有多個jobs(不同的action),一般一個action對應一個job,checkpoint也會導致job

Stage:階段

  • 每個job被分解爲多個stage,每個stage其實就是一些task的集合, 這些stage 之間相互依賴
    • 與 MapReduce 中的 map 與 reduce stage 類似
  • Stage內部計算邏輯完全一樣,只是計算的數據不同罷了,這就是分佈式並行計算

Task:任務

  • 被TaskScheduler序列化之後送到某個executor上的工作單元;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章