Application是用戶在Spark上構建(編寫)的程序,包含driver program 和executors(分佈在集羣中多個節點上運行的Executor代碼)。apache
Spark的上下文對象,是程序的起點,通往集羣的入口(與cluster進行鏈接),經過其能夠建立RDD(獲取數據),在其中配置的參數擁有最高優先級。在Spark中由SparkContext負責和ClusterManager通行,進行資源的申請,任務的分配和監控等。緩存
包含應用程序的main函數,而且運行時會建立SparkContext。當Executor部分運行完後,Driver負責將SparkContext關閉。多線程
集羣資源管理的外部服務,在Spark上現有Standalone(Spark自帶的管理器),YARN(hadoop 2.x的管理器),Mesos等三種集羣資源管理器,Standalone能知足絕大部分對集羣資源管理的需求,基本上只有在集羣中運行多套計算框架(例如同時運行MapReduce和Spark)的時候才建議使用YARN和Mesos。併發
代表driver程序運行的位置。在」cluster」模式時,框架會在集羣中啓動driver。在」client」模式時,driver在集羣外被提交者啓動。框架
集羣中運行應用Application代碼的節點,在Standalone模式中指的是經過slaves文件配置的Worker節點,在Spark on Yarn模式中指的就是NodeManager節點。函數
一個Application運行在Worker節點上的一個進程,負責運行某些Task,而且負責將數據存放在內存或磁盤上。每一個Application都有各自獨立的一批Executor,一個Executor只能爲一個Application服務,一個Worker上可能會有多個Executor,在Executor內部經過多線程的方式併發處理應用的任務(Task)。在Spark on Yarn模式下,其進程名稱爲CoarseGrainedExecutorBackend。一個CoarseGrainedExecutorBackend進程有且僅有一個Executor對象,負責將Task包裝成taskRunner,並從線程池中抽取一個空閒線程運行Task。每一個CoarseGrainedExecutorBackend能並行運行Task的數量取決於分配給它的CPU個數。oop
被Driver發送到executor的工做單元(最終在worker節點運行的任務),和MapReduce中的MapTask和ReduceTask概念同樣,是運行Application的基本單位。多個Task組成一個Stage,而Task的調度及管理等由TaskScheduler負責,一般狀況下一個task會處理一個split的數據,每一個split通常就是一個Block塊的大小。spa
一道做業,即應用完成某項需求所須要的一系列工做(由一系列task組成的並行計算)。與Spark的action相對應,每一個action操做(例如count,saveAsTextFile,collect等)都會對應一個job實例,可在driver的日誌中看到相關信息。一個Application可能產生多個Job。線程
一個Job會分紅不少組Task,每一組任務被分爲Stage,相似於MapReduce的map和reduce,劃分Stage的依據:一個Stage開始通常是因爲讀取外部數據或者Shuffle數據,一個Stage的結束通常是因爲發生了Shuffle(例如reduceByKey)或者整個Job結束時把數據放到hdfs等存儲系統上(例如saveAsTextFile)。日誌
有向無環圖,將job分解成若干個Stage,每一個Stage都由若干個Task組成,這些Stage都是有前後順序的,故將這些Stage組織成DAG,表示其前後順序。
每一個Stage由若干個Task組成,這些task統一稱爲taskset。