简要分析:
-
Driver
进程启动之后,会做一些初始化的操作;在这个过程中,就会发送请求到Master
上,进行Spark
应用程序的注册,其实就是让Master
知道有一个新的Spark
应用程序要运行;
-
-
Master
在接收到Spark
应用程序的注册申请之后会发送请求给Worker,进行资源的调度和分配,这里资源主要事Executor的分配;
-
-
Master
是一个进程,主要负责资源的调度和分配,还有集群的监控等职责;
Worker
也是一个进程,主要负责两个任务,一个是用自己的内存来存储RDD
的某个或某些Partition
;另一个是启动其他进程和线程,对RDD
上的Partition
进行并行的处理和计算;
-
- 当
Work
接收到Master
的请求之后,会为Spark应用启动Executor
;Executor
和Task其实就是负责对RDD
的Partition
进行并行的计算了,也就是执行我们队RDD
定义的,比如map
,flatMap
、reduce
等算子操作。
- 当
-
Executor
启动之后,会向Driver
进行反注册。这样,Driver
就知道哪些Executor
是为它进行服务的了;
-
-
Driver
注册了一些Executor
之后,就可以开始正式执行我们的Spark
应用程序了。首先第一步就是创建初始RDD
,读取数据源。
-
-
HDFS
文件内容被去读到多个Worker
节点上,形成内存中的分布式数据集,也就是初始RDD
。
-
-
Spark
集群,有多个节点,这里的节点就是我们自己搭建的节点,也就是Standalone
模式中slave
文件中配置的节点;
-
-
Driver
会根据我们对RDD
定义的操作,提交一大堆Task去Executor
上;Executor
接收到Task之后会启动多个线程来执行Task。
-
-
Task
就会对RDD
的Partition
数据执行指定的算子操作,形成新的RDD
的Partition
。
-
网友评论