運行Spark最簡單的方法是經過Local模式(即僞分佈式模式)。apache
運行命令爲:./bin/run-example org.apache.spark.examples.SparkPi local架構
Standalone模式下,集羣啓動時包括Master與Worker,其中Master負責接收客戶端提交的做業,管理Worker。提供了Web展現集羣與做業信息。分佈式
提交做業有兩種方式,分別是Driver(做業的master,負責做業的解析、生成stage並調度task到,包含DAGScheduler)運行在Worker上,Driver運行在客戶端。接下來分別介紹兩種方式的做業運行原理。url
經過org.apache.spark.deploy.Client類執行做業,做業運行命令以下:spa
./bin/spark-class org.apache.spark.deploy.Client launch spark://host:port file:///jar_url org.apache.spark.examples.SparkPi spark://host:port.net
做業執行流如圖1所示。線程
圖1進程
做業執行流程描述:get
客戶端提交做業給Masterspark
Master讓一個Worker啓動Driver,即SchedulerBackend。Worker建立一個DriverRunner線程,DriverRunner啓動SchedulerBackend進程。
另外Master還會讓其他Worker啓動Exeuctor,即ExecutorBackend。Worker建立一個ExecutorRunner線程,ExecutorRunner會啓動ExecutorBackend進程。
ExecutorBackend啓動後會向Driver的SchedulerBackend註冊。SchedulerBackend進程中包含DAGScheduler,它會根據用戶程序,生成執行計劃,並調度執行。對於每一個stage的task,都會被存放到TaskScheduler中,ExecutorBackend向SchedulerBackend彙報的時候把TaskScheduler中的task調度到ExecutorBackend執行。
全部stage都完成後做業結束。
直接執行Spark做業,做業運行命令以下(示例):
./bin/run-example org.apache.spark.examples.SparkPi spark://host:port
做業執行流如圖2所示。
圖2
做業執行流程描述:
客戶端啓動後直接運行用戶程序,啓動Driver相關的工做:DAGScheduler和BlockManagerMaster等。
客戶端的Driver向Master註冊。
Master還會讓Worker啓動Exeuctor。Worker建立一個ExecutorRunner線程,ExecutorRunner會啓動ExecutorBackend進程。
ExecutorBackend啓動後會向Driver的SchedulerBackend註冊。Driver的DAGScheduler解析做業並生成相應的Stage,每一個Stage包含的Task經過TaskScheduler分配給Executor執行。
全部stage都完成後做業結束。
這裏Spark AppMaster至關於Standalone模式下的SchedulerBackend,Executor至關於standalone的ExecutorBackend,spark AppMaster中包括DAGScheduler和YarnClusterScheduler。
Spark on Yarn的執行流程能夠參考 http://www.csdn.net/article/2013-12-04/2817706--YARNspark on Yarn部分。