Spark集羣術語

Spark集羣術語解析

1. Application

        Application是用戶在Spark上構建(編寫)的程序,包含driver program 和executors(分佈在集羣中多個節點上運行的Executor代碼)。apache

2. SparkContext

        Spark的上下文對象,是程序的起點,通往集羣的入口(與cluster進行鏈接),經過其能夠建立RDD(獲取數據),在其中配置的參數擁有最高優先級。在Spark中由SparkContext負責和ClusterManager通行,進行資源的申請,任務的分配和監控等。緩存


3. Driver program

        包含應用程序的main函數,而且運行時會建立SparkContext。當Executor部分運行完後,Driver負責將SparkContext關閉。多線程

4. Cluster Manager

        集羣資源管理的外部服務,在Spark上現有Standalone(Spark自帶的管理器),YARN(hadoop 2.x的管理器),Mesos等三種集羣資源管理器,Standalone能知足絕大部分對集羣資源管理的需求,基本上只有在集羣中運行多套計算框架(例如同時運行MapReduce和Spark)的時候才建議使用YARN和Mesos。併發

5. Deploy mode

        代表driver程序運行的位置。在」cluster」模式時,框架會在集羣中啓動driver。在」client」模式時,driver在集羣外被提交者啓動。框架

6. Worker Node

        集羣中運行應用Application代碼的節點,在Standalone模式中指的是經過slaves文件配置的Worker節點,在Spark on Yarn模式中指的就是NodeManager節點。函數


7. Executor

        一個Application運行在Worker節點上的一個進程,負責運行某些Task,而且負責將數據存放在內存或磁盤上。每一個Application都有各自獨立的一批Executor,一個Executor只能爲一個Application服務,一個Worker上可能會有多個Executor,在Executor內部經過多線程的方式併發處理應用的任務(Task)。在Spark on Yarn模式下,其進程名稱爲CoarseGrainedExecutorBackend。一個CoarseGrainedExecutorBackend進程有且僅有一個Executor對象,負責將Task包裝成taskRunner,並從線程池中抽取一個空閒線程運行Task。每一個CoarseGrainedExecutorBackend能並行運行Task的數量取決於分配給它的CPU個數。oop




8. Task

        被Driver發送到executor的工做單元(最終在worker節點運行的任務),和MapReduce中的MapTask和ReduceTask概念同樣,是運行Application的基本單位。多個Task組成一個Stage,而Task的調度及管理等由TaskScheduler負責,一般狀況下一個task會處理一個split的數據,每一個split通常就是一個Block塊的大小。spa


9. Job

        一道做業,即應用完成某項需求所須要的一系列工做(由一系列task組成的並行計算)。與Spark的action相對應,每一個action操做(例如count,saveAsTextFile,collect等)都會對應一個job實例,可在driver的日誌中看到相關信息。一個Application可能產生多個Job。線程

10. Stage

        一個Job會分紅不少組Task,每一組任務被分爲Stage,相似於MapReduce的map和reduce,劃分Stage的依據:一個Stage開始通常是因爲讀取外部數據或者Shuffle數據,一個Stage的結束通常是因爲發生了Shuffle(例如reduceByKey)或者整個Job結束時把數據放到hdfs等存儲系統上(例如saveAsTextFile)。日誌


11. DAG

        有向無環圖,將job分解成若干個Stage,每一個Stage都由若干個Task組成,這些Stage都是有前後順序的,故將這些Stage組織成DAG,表示其前後順序。

12. Taskset

        每一個Stage由若干個Task組成,這些task統一稱爲taskset。


12. RDD

        Spark的基本計算單元,能夠進行一系列算子進行操做(主要爲Transformation和Action操做)。同時,RDD是Spark最核心的東西,它表示已被分區,被序列化,不可變的,有容錯基質的,而且能被並行操做的數據集合。能夠存在內存,也能夠存在磁盤,能夠經過persist()方法中的org.apache.spark.storage.StorageLevel屬性進行配置。

13. 共享變量

       在Application運行時,可能須要共享一些變量,供Task或Driver等使用。Spark提供了兩種共享變量,一種是能夠緩存到各個節點的廣播變量(broadcast),一種是隻支持加法操做,能夠實現求和的累加變量(accumulators)。

14. 寬依賴

       或稱爲ShuffleDependency,跟MapReduce中的Shuffle的數據依賴相同,寬依賴須要計算好全部父RDD對應分區的數據,而後在節點之間進行Shuffle。


15. 窄依賴

       或稱爲NarrowDependency,指的是摸個具體的RDD,其分區partition A最多被子RDD中的一個分區partition B依賴。此種狀況只有Map任務,是不須要發生Shuffle過程的。窄依賴又分爲1:1和N:1兩種。


16. DAGScheduler

       根據job構建基於Stage的DAG,並提交Stage給TaskScheduler。其劃分Stage的依據是根據RDD之間的依賴關係。


17. TaskScheduler

       將Task提交給Worker(集羣)運行,每一個Executor運行什麼Task就是在此處分配的。

相關文章
相關標籤/搜索