运行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部分。