master和worker是物理节点,是在不同环境部署模式下和资源相关的两大内容
Driver和executor是进程,是在spark应用中和计算相关的两大内容
1、master和worker节点
master节点常驻master守护进程,负责管理worker节点,并且会从master节点提交应用。
worker节点常驻worker守护进程,会与master节点进行通信,并且管理executor进程。
在搭建spark集群时,就已经设置好了master节点和worker节点,一个集群中可以有多个master节点和多个worker节点。一台pc机器可以同时作为master和worker节点【例如:有四台机器,就可以选择一台机器做masker节点,剩下三台设置为worker节点,也可以把四台都设置为worker节点,这种情况下,有一台机器既是master节点又是worker节点。】
2、driver和executor进程
driver:
根据不同的部署模式,driver可以运行在master上,也可以运行在worker上。
driver进程就是应用的main函数并且会构建sparkContext对象,当提交应用后,就会启动一个对应的driver进程,driver本身会根据设置的参数占用一定的资源,主要是 cpu core和memory。
driver首先会向集群管理者(standalone、yarn、mesos)申请spark应用所需的资源,也就是executor,然后集群管理者会根据spark应用所设置的参数在各个worker上分配一定数量的executor,每个executor都会占用一定数量的cpu和memory。在申请到应用所需的资源后,driver就能开始调度和执行编写的应用代码了。
driver进程会将我们编写的spark应用代码拆分成多个stage,每个stage会执行一部分代码片段,并为每个stage创建一批tasks,然后再将这些tasks分配到各个executor中执行。
executor:
executor进程宿主在worker节点上,一个worker可以有多个executor。每个executor会持有一个线程池,每个线程可以执行一个task。executor执行完task后,可以将结果返回给driver
每个executor执行的task都是属于同一个应用的。此外executor还有一个功能就是为应用程序中要求缓存的RDD提供内存式存储,RDD是直接缓存在executor进程内的,也是因此,任务task可以在运行时充分利用缓存数据加速运算。
参考资料:
Spark中master、worker、executor和driver的关系
Spark中的Driver和Executor详解及相关调优