承接上一篇文檔《Standalone集群搭建和Spark應用監控 》
需要了解的概念
一、Spark應用的結構(Driver + Executors)
(一)、Driver:相當於MapReduce中ApplicationMaster,運行SparkContext上下文、SparkContext進行初始化的地方(JVM)、進行RDD的初始化、Task運行的資源申請、調度的地方,一般認為就是main運行的地方
(二)、Executors:具體的Task運行的地方,一個executor可以運行多個Task任務,一個spark應用可以有多個Executor
練習:
1、 local模式下沒有啟動SparkShell的情況下查看jps
2、 local模式下啟動SparkShell的情況下查看jps
3、 啟動集群模式查看jps
結論:
1、local模式:driver和executor運行在同一個進程(SparkSubmit),以線程的方式進行區分的。
2、集群模式:
Driver:SparkSubmit
Executor:CoarseGrainedExecutorBackend
練習:分別查看spark-shell和spark-submit命令可以找到下面的語句
1、 spark-shell底層運行的是spark-submit
2、 spark-submit底層執行的是spark-class
結論:每運行一個spark-submit,就相當於執行了一個Spark的Application
練習:
1、 執行詞頻統計前十(參考前面的課件)的語句(不執行collect),在瀏覽器查看ip:4040/jobs
2、 執行詞頻統計前十(參考前面的課件)的語句(執行collect),在瀏覽器查看ip:4040/jobs
3、 再執行一次上面的第二步,可以多運行幾次查看
結論:Application,一個應用包含多個job
練習:點擊ip:4040/jobs中的多個job,查看裡面的信息
結論:一個Job裡面包含多個Stage
練習:點擊ip:4040/jobs中的多個Stage,查看裡面的信息
結論:一個Stage裡面可以包含多個Task。可以在詞頻統計前十中調用partition,查看分區個數,分區多數多的話 就可以有多個Task了
其中上面的結論補充(詳細解釋在後面慢慢講解):
1、RDD的action類型的API一旦觸發就會產生一個job,比如collect、take(10)、
2、有shuffle操作就會劃分stage
3、Task就是最小的運行單位,是在executor處理對應分區數據的線程