spark相關名詞解釋

Application

與其它部件關係:
由一個driver進程和多個executor進程組成。

用戶使用Spark-submit提交到spark的整個應用,由一個driver進程和多個executor進程組成。

Cluster Manager

集羣管理器,負責整個spark集羣的調度和資源分配,spark支持可插拔的cluster manager 。當前,集羣管理器共有4種,分別是standalone、Apache Mesos、Hadoop Yarn、Kubernetes。

與其它部件關係:
standalone模式下爲master,yarn模式下爲yarn。
Driver向cluster manager申請資源。
cluster manager向worker發送徵召信號,worker啓動executor響應徵召,並向driver(SparkContext)申請任務。
Driver收到executor任務完成的信號後向cluster manager發送註銷信號,cluster manager再向worker發送釋放資源信號。

Deploy mode

部署模式,在yarn模式下獨有,有yarn client模式和yarn cluster模式。在cluster模式中ApplicationMaster相當於driver,spark把Driver作爲一個ApplicationMaster在yarn中啓動,然後AM創建應用程序,向RM申請資源,啓動executor來運行Task,同時監控運行過程。

差別:

內容區別 yarn client yarn cluster
driver位置 提交任務的節點上 NodeManager上
消耗worker集羣資源
driver故障能否重啓 是,使用-supervise對Driver進行監控,掛了可重啓
運行日誌本地可看
適用環境 測試、調試、交互環境 生產環境
是否支持shell
ApplicationMaster作用 僅負責申請executor 申請executor同時也運行driver

Driver

與其它部件關係:
負責運行main方法,初始化SparkContext,是一個特殊的executor進程。
Driver驅動Executor工作,
負責整個作頁的調度,並向Cluster Manager 申請資源完成具體作業。
yarn cluster模式下,driver運行在ApplicationMaster中。

Driver負責運行application的main函數、創建SparkContext、使用DAGScheduler創建任務的有向無環圖、使用SchedulerBackend給Task分配計算資源、使用TaskScheduler發送task到executor。

SparkContext

與其它部件關係:
由driver創建,包含DAGScheduler和TaskSchduler。
與ClusterManager通信,進行資源申請、任務分配和監控。

每個JVM上只允許一個活躍的SparkContext,只有你stop()當前的活躍的sc才能創建一個新的。

SparkConf

spark配置類,配置以鍵值對的形式存儲。

Worker

是計算節點,可以理解爲一臺服務器,一個節點可以同時是worker和master節點。

與其它部件關係:
一定程度上相當於yarn中的nodemanager。
cluster manager向worker申請資源。

Executor

與其它部件關係:
由worker啓動的一個進程,負責運行task,共享變量就是放在這個進程中,不同的application的executor之間相互獨立。

通過線程池併發執行和線程複用的方式,每個線程可以執行一個任務。

Task

與其它部件關係:
spark任務工作的最小單元,被TaskScheduler序列化以後送到executor上,由executor使用線程池執行任務

Stage

每個作業會因爲RDD之間的依賴關係拆分成TaskSet。有Shuffle Map Stage和Result Stage兩種。

寬依賴和窄依賴

與其它部件關係:
寬依賴和窄依賴由DAGScheduler劃分。

窄依賴指的是一個父RDD分區最多被一個子RDD分區使用(獨生子女),寬依賴指的是一個父RDD分區可能被多個子RDD分區使用。寬依賴涉及到shffle,速度較慢。個人理解實際上兩個依賴區分的根本依據是:父RDD分區數據能否在被一次計算後立即銷燬。根據RDD的血統機制,計算的時候不保留中間結果。如果一個RDD只被一個子RDD使用,那麼就可以講很多個這一類的窄依賴串聯起來,在一個計算節點上執行一系列操作,不保留中間結果,速度超快。但是如果一個父RDD分區可能被多個子RDD分區使用,那麼要等全部子分區計算完後才能清除相應的父RDD分區數據,速度慢。

Master

用來提交任務,即執行spark-submit命令所在的節點。

與其它部件關係:
相當於yarn模式下的yarn。

操作相關

算子

spark中的算子分爲轉換(transformation)和行動(action)兩種。

  • transformation用於RDD的創建,還提供了很多操作方法(map、filter),使用舊RDD生成新RDD,轉換是延遲的,只有遇到action的時候transformation纔開始真正地執行。
  • action是數據執行部分,類似於count、collect等需要數據落地的時候。

共享變量

一個算子如果使用到了某個外部變量,那麼這個變量會被拷貝到每個task中,每個task只能操作自己的那份變量。共享變量的存在,是爲了讓多個task能共享或者操作某個變量。

  • 廣播變量(Broadcast Variable)
    • 廣播變量是隻讀的,會在每個executor上拷貝一個副本。因此最大作用是減少了變量到各個節點網絡傳輸消耗,減少shffle或者使得0shffle。另外,在sparksql中會自動將小於一定大小的錶轉換爲廣播變量。
  • 累加器(Accumulator)
    • 累加器則可以讓多個task共同操作一份變量,比如統計總數,全部任務與driver交互壓力比較大。

源碼相關

DAGScheduler

將DAG中的RDD劃分到不同的stage,即TaskSet,拆分依據是是否爲寬依賴,再將TaskSet提交給TaskScheduler執行。另外,DAGSchduler記錄哪些RDD被存入磁盤等物化動作,尋求最優化調度(數據本地性),監控stage,那個stage運行失敗,則重啓。DAGScheduler會從最後一個RDD出發,使用廣度優先遍歷整個依賴樹,劃分stage,即當某個RDD是shuffle的時候,以此爲界限劃分 前後兩個stage。

TaskScheduler

只爲一個SparkContext服務,接收來自DAGScheduler的任務後,發送到worker的executor中運行。某個任務失敗,負責重試。某任務長時間未運行完,啓動新的,誰先完成就結束。
spark通過TaskScheduler向集羣提交任務。

SchedulerBackend

是一個接口,SparkContext使用它與不同的cluster manager 對接。

SparkContext 使用 SchedulerBackend 來與不同資源管理系統對接,並維護着 Executor 的信息,TaskScheduler 向 Executor 提交任務也是通過 SchedulerBackend 來完成的。

RpcEnv

各個組件之間通信的執行環境。

與其它部件關係:
RpcEndpoint和RpcEndpointRef之間通信是通過RpcEnv進行協調的,定義了RPC框架的啓動、停止、關閉等抽象方法。

RpcEndpoint

表示一個個需要通信的個體(如master,worker,driver),主要根據接收的消息來進行對應的處理。一個RpcEndpoint經歷的過程依次是:構建→onStart→receive→onStop。其中onStart在接收任務消息前調用,receive和receiveAndReply分別用來接收另一個RpcEndpoint(也可以是本身)send和ask過來的消息。如果繼承自ThreadSafeRpcEndpoint則表明該Endpoint不允許併發。

RpcEndpointRef

RpcEndpointRef是對遠程RpcEndpoint的一個引用。當我們需要向一個具體的RpcEndpoint發送消息時,一般我們需要獲取到該RpcEndpoint的引用,然後通過該應用發送消息。

yarn中相關框架部件

ResouceManager

ResourceManager負責集羣中所有資源的統一管理和分配,它接收來自各個節點(NodeManager)的資源彙報信息,並把這些信息按照一定的策略分配給各個應用程序。

NodeManager

NodeManager彙報節點的健康狀態以及Container的運行狀態,並領取RM下發的命令例如重新初始化Container,清理Container等

Container

container是yarn中資源的抽象,封裝了CPU和內存。一個container是一個jvm,也就是對應一個executor。

Appliaction Master

每個application都有一個Application Master進程,是Application啓動的第一個容器,負責從ResouceManager種申請資源、在NodeManager上啓動executors、監控和跟蹤應用程序的進程

與其它部件關係:
向ResouceManager申請資源,在每個NodeManager上啓動executors。
相當於driver。

Spark運行流程

  • 啓動Driver以後初始化SparkContext
  • SparkContext向cluster manager註冊並申請Executor資源
  • cluster manager分配executor資源,向worker發送徵召信號,executor發送心跳到cluster manager上,被徵召的Worker啓動executors,executors向Driver反向註冊,向SparkContext申請任務
  • SparkContext中的DAGScheduler將DAG圖分解爲Stage,即TaskSet
  • DAGScheduler將TaskSet發送給TaskScheduler,TaskScheduler將Task序列化後分配給executor執行
  • executor以stage爲單位執行Task
  • Driver監控executor運行
  • Driver收到executor任務完成的信號後向Cluster Manager發送註銷信號
  • cluster manager向worker發送釋放資源信號

https://blog.csdn.net/dufufd/article/details/53200516
https://www.jianshu.com/p/e14a09089444
https://zhuanlan.zhihu.com/p/74037805
https://blog.csdn.net/paicmis/article/details/85228118
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8KouVJFl-1584975503996)(https://spark.apache.org/docs/latest/img/cluster-overview.png)]

Application

與其它部件關係:
由一個driver進程和多個executor進程組成。

用戶使用Spark-submit提交到spark的整個應用,由一個driver進程和多個executor進程組成。

Cluster Manager

集羣管理器,負責整個spark集羣的調度和資源分配,spark支持可插拔的cluster manager 。當前,集羣管理器共有4種,分別是standalone、Apache Mesos、Hadoop Yarn、Kubernetes。

與其它部件關係:
standalone模式下爲master,yarn模式下爲yarn。
Driver向cluster manager申請資源。
cluster manager向worker發送徵召信號,worker啓動executor響應徵召,並向driver(SparkContext)申請任務。
Driver收到executor任務完成的信號後向cluster manager發送註銷信號,cluster manager再向worker發送釋放資源信號。

Deploy mode

部署模式,在yarn模式下獨有,有yarn client模式和yarn cluster模式。在cluster模式中ApplicationMaster相當於driver,spark把Driver作爲一個ApplicationMaster在yarn中啓動,然後AM創建應用程序,向RM申請資源,啓動executor來運行Task,同時監控運行過程。

差別:

內容區別 yarn client yarn cluster
driver位置 提交任務的節點上 NodeManager上
消耗worker集羣資源
driver故障能否重啓 是,使用-supervise對Driver進行監控,掛了可重啓
運行日誌本地可看
適用環境 測試、調試、交互環境 生產環境
是否支持shell
ApplicationMaster作用 僅負責申請executor 申請executor同時也運行driver

Driver

與其它部件關係:
負責運行main方法,初始化SparkContext,是一個特殊的executor進程。
Driver驅動Executor工作,
負責整個作頁的調度,並向Cluster Manager 申請資源完成具體作業。
yarn cluster模式下,driver運行在ApplicationMaster中。

Driver負責運行application的main函數、創建SparkContext、使用DAGScheduler創建任務的有向無環圖、使用SchedulerBackend給Task分配計算資源、使用TaskScheduler發送task到executor。

SparkContext

與其它部件關係:
由driver創建,包含DAGScheduler和TaskSchduler。
與ClusterManager通信,進行資源申請、任務分配和監控。

每個JVM上只允許一個活躍的SparkContext,只有你stop()當前的活躍的sc才能創建一個新的。

SparkConf

spark配置類,配置以鍵值對的形式存儲。

Worker

是計算節點,可以理解爲一臺服務器,一個節點可以同時是worker和master節點。

與其它部件關係:
一定程度上相當於yarn中的nodemanager。
cluster manager向worker申請資源。

Executor

與其它部件關係:
由worker啓動的一個進程,負責運行task,共享變量就是放在這個進程中,不同的application的executor之間相互獨立。

通過線程池併發執行和線程複用的方式,每個線程可以執行一個任務。

Task

與其它部件關係:
spark任務工作的最小單元,被TaskScheduler序列化以後送到executor上,由executor使用線程池執行任務

Stage

每個作業會因爲RDD之間的依賴關係拆分成TaskSet。有Shuffle Map Stage和Result Stage兩種。

寬依賴和窄依賴

與其它部件關係:
寬依賴和窄依賴由DAGScheduler劃分。

窄依賴指的是一個父RDD分區最多被一個子RDD分區使用(獨生子女),寬依賴指的是一個父RDD分區可能被多個子RDD分區使用。寬依賴涉及到shffle,速度較慢。個人理解實際上兩個依賴區分的根本依據是:父RDD分區數據能否在被一次計算後立即銷燬。根據RDD的血統機制,計算的時候不保留中間結果。如果一個RDD只被一個子RDD使用,那麼就可以講很多個這一類的窄依賴串聯起來,在一個計算節點上執行一系列操作,不保留中間結果,速度超快。但是如果一個父RDD分區可能被多個子RDD分區使用,那麼要等全部子分區計算完後才能清除相應的父RDD分區數據,速度慢。

Master

用來提交任務,即執行spark-submit命令所在的節點。

與其它部件關係:
相當於yarn模式下的yarn。

操作相關

算子

spark中的算子分爲轉換(transformation)和行動(action)兩種。

  • transformation用於RDD的創建,還提供了很多操作方法(map、filter),使用舊RDD生成新RDD,轉換是延遲的,只有遇到action的時候transformation纔開始真正地執行。
  • action是數據執行部分,類似於count、collect等需要數據落地的時候。

共享變量

一個算子如果使用到了某個外部變量,那麼這個變量會被拷貝到每個task中,每個task只能操作自己的那份變量。共享變量的存在,是爲了讓多個task能共享或者操作某個變量。

  • 廣播變量(Broadcast Variable)
    • 廣播變量是隻讀的,會在每個executor上拷貝一個副本。因此最大作用是減少了變量到各個節點網絡傳輸消耗,減少shffle或者使得0shffle。另外,在sparksql中會自動將小於一定大小的錶轉換爲廣播變量。
  • 累加器(Accumulator)
    • 累加器則可以讓多個task共同操作一份變量,比如統計總數,全部任務與driver交互壓力比較大。

源碼相關

DAGScheduler

將DAG中的RDD劃分到不同的stage,即TaskSet,拆分依據是是否爲寬依賴,再將TaskSet提交給TaskScheduler執行。另外,DAGSchduler記錄哪些RDD被存入磁盤等物化動作,尋求最優化調度(數據本地性),監控stage,那個stage運行失敗,則重啓。DAGScheduler會從最後一個RDD出發,使用廣度優先遍歷整個依賴樹,劃分stage,即當某個RDD是shuffle的時候,以此爲界限劃分 前後兩個stage。

TaskScheduler

只爲一個SparkContext服務,接收來自DAGScheduler的任務後,發送到worker的executor中運行。某個任務失敗,負責重試。某任務長時間未運行完,啓動新的,誰先完成就結束。
spark通過TaskScheduler向集羣提交任務。

SchedulerBackend

是一個接口,SparkContext使用它與不同的cluster manager 對接。

SparkContext 使用 SchedulerBackend 來與不同資源管理系統對接,並維護着 Executor 的信息,TaskScheduler 向 Executor 提交任務也是通過 SchedulerBackend 來完成的。

RpcEnv

各個組件之間通信的執行環境。

與其它部件關係:
RpcEndpoint和RpcEndpointRef之間通信是通過RpcEnv進行協調的,定義了RPC框架的啓動、停止、關閉等抽象方法。

RpcEndpoint

表示一個個需要通信的個體(如master,worker,driver),主要根據接收的消息來進行對應的處理。一個RpcEndpoint經歷的過程依次是:構建→onStart→receive→onStop。其中onStart在接收任務消息前調用,receive和receiveAndReply分別用來接收另一個RpcEndpoint(也可以是本身)send和ask過來的消息。如果繼承自ThreadSafeRpcEndpoint則表明該Endpoint不允許併發。

RpcEndpointRef

RpcEndpointRef是對遠程RpcEndpoint的一個引用。當我們需要向一個具體的RpcEndpoint發送消息時,一般我們需要獲取到該RpcEndpoint的引用,然後通過該應用發送消息。

yarn中相關框架部件

ResouceManager

ResourceManager負責集羣中所有資源的統一管理和分配,它接收來自各個節點(NodeManager)的資源彙報信息,並把這些信息按照一定的策略分配給各個應用程序。

NodeManager

NodeManager彙報節點的健康狀態以及Container的運行狀態,並領取RM下發的命令例如重新初始化Container,清理Container等

Container

container是yarn中資源的抽象,封裝了CPU和內存。一個container是一個jvm,也就是對應一個executor。

Appliaction Master

每個application都有一個Application Master進程,是Application啓動的第一個容器,負責從ResouceManager種申請資源、在NodeManager上啓動executors、監控和跟蹤應用程序的進程

與其它部件關係:
向ResouceManager申請資源,在每個NodeManager上啓動executors。
相當於driver。

Spark運行流程

  • 啓動Driver以後初始化SparkContext
  • SparkContext向cluster manager註冊並申請Executor資源
  • cluster manager分配executor資源,向worker發送徵召信號,executor發送心跳到cluster manager上,被徵召的Worker啓動executors,executors向Driver反向註冊,向SparkContext申請任務
  • SparkContext中的DAGScheduler將DAG圖分解爲Stage,即TaskSet
  • DAGScheduler將TaskSet發送給TaskScheduler,TaskScheduler將Task序列化後分配給executor執行
  • executor以stage爲單位執行Task
  • Driver監控executor運行
  • Driver收到executor任務完成的信號後向Cluster Manager發送註銷信號
  • cluster manager向worker發送釋放資源信號

https://blog.csdn.net/dufufd/article/details/53200516
https://www.jianshu.com/p/e14a09089444
https://zhuanlan.zhihu.com/p/74037805
https://blog.csdn.net/paicmis/article/details/85228118

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