第35课Spark Master、Worker、Driver、Executor工作流程详解
来源:互联网 发布:recyclerview源码分析 编辑:程序博客网 时间:2024/05/16 17:36
1、Spark的部署图:
在基于standalone的Spark集群,Cluster Manger就是Master。
Master负责分配资源,在集群启动时,Driver向Master申请资源,Worker负责监控自己节点的内存和CPU等状况,并向Master汇报。
从资源方面,可以分为两个层面:
1)资源的管理和分配
资源的管理和分配,由Master和Worker来完成。Master给Worker分配资源,
Master时刻知道Worker的资源状况。
客户端向服务器提交作业,实际是提交给Master。
2)资源的使用
资源的使用,由Driver和Executor。程序运行时候,向Master请求资源。
2、Spark运行示意图:
2.1图
一个Worker默认情况下分配一个Executor,配置时根据需要也可以配置多个Executor。一个节点,如果配置了多个Executor,那么就会涉及到性能调优。
Driver、Master、Worker、Executor,其实它就是JVM进程。
图上Worker区域用◇形状表示的是:Worker上有Executor的句柄,也就是说Worker能开对Executor进行控制,必要时可以Kill掉该进程。
从图中可以看到Driver和Executor之间画了一根线条,表明:程序运行时是直接与Executor进行交互的。
我们对图2.1进行修改,增加Spark事件流,得到下图2.2:
2.2图
在Driver中,RDD首先交给DAGSchedule进行Stage的划分。
然后底层的调度器TaskScheduler就与Executor进行交互。
Driver和上图中4个Worker节点的Executor发指令,让它们在各自的线程池中运行Job。
运行时Driver能获得Executor的具体运行资源,这样Driver与Executor之间进行通信,通过网络的方式,Driver把划分好的Task传送给Executor,Task就是我们的Spark程序的业务逻辑代码。
Executor接收任务,进行反序列化,得到数据的输入和输出,在分布式集群的相同数据分片上,数据的业务逻辑一样,只是数据不一样罢了,然后由Executor的线程池负责执行。
编程的Spark程序,打包提交到Driver端,这样就构成了一个Driver,
Driver内部的调度流程,根据算子逻辑的依赖关系,DAGScheduler来划分成不同的Stage,每个Stage中的计算逻辑是一样的,只是数据分片不一样。TaskScheduler向Executor发送任务,Executor反序列化数据之后,也就得到数据的输入和输出,也就是任务的业务逻辑,Executor运行的就是我们的业务逻辑代码。
我们整个Spark应用程序,可以分成:Driver和Executor两部分。
Driver由框架直接生成;
Executor执行的才是我们的业务逻辑代码。
执行的时候,框架控制我们代码的执行。Executor需要执行的结果汇报给框架也就是Driver。
3、数据的管理
在Spark应用具体执行过程中,会涉及到数据的读取和存储。
在Executor中关于数据的管理正是Spark的精髓之一。
默认情况下,数据要写到磁盘上。
DAGScheduler划分了多个Stage,下一个Stage 会向Driver请求上一个Stage的运行结果。这就是Shuffle的过程,依赖于上一个Stage全部的结果。前面Stage的输出是后面Stage的输入。
3.1图
3.2图
每个数据分片都要去全部节点上找属于它的数据分片的一部分。
比如:上一个Stage有1万个数据分片,现在这个Stage有100个数据分片,那么拉取数据的过程中,整个任务就需要寻找100万次数据。
3.3图
4、总结:
本课从Driver和Worker的角度,也就是资源管理和分配的角度,来讲解Master、Worker、Driver、Executor工作流程。
程序运行的时候,Driver向Master申请资源;
Master让Worker给程序分配具体的Executor。
下面就是Driver具体的调用过程:
通过DAGScheduler划分阶段,形成一系列的TaskSet,然后传给TaskScheduler,把具体的Task交给Worker节点上的Executor的线程池处理。线程池中的线程工作,通过BlockManager来读写数据。
这就是4大组件:Worker、Master、Executor、Driver之间的协同工作。
- 第35课Spark Master、Worker、Driver、Executor工作流程详解
- Spark Master、Worker、Driver、Executor工作流程详解
- 大数据Spark “蘑菇云”行动第35课SparkMaster、Worker、Driver、Executor工作流程详解
- 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等
- Spark 角色说明(Client 、Master、Worker、Driver、Executor)
- 第26课: Spark Runtime(Driver、Masster、Worker、Executor)内幕解密
- Spark的Master、Worker、Executor以及task等概念
- day26:Spark Runtime(Driver、Masster、Worker、Executor)内幕
- Spark源码分析之worker节点启动driver和executor
- Spark源码—AKKA驱动下的Driver、Master、Worker
- spark源码学习(三)---worker源码分析-worker启动driver、executor分析
- Spark2.2 Worker、Driver和Executor向Master注册原理剖析图解及源码
- spark源码分析Master与Worker启动流程篇
- Spark集群启动之Master、Worker启动流程源码分析
- [spark] Standalone模式下Master、WorKer启动流程
- spark源码学习(二)---Master源码分析(3)-master对driver、executor的调度
- 第33课:Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕
- 第33课: Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕
- React与ES6(一)开篇介绍
- Java多线程 -- JUC包源码分析19 -- ForkJoinPool/ForkJoinTask
- Pure布局
- Java Study 02
- MSSQL之二十四 实现服务器代理
- 第35课Spark Master、Worker、Driver、Executor工作流程详解
- 数据库三范式
- aspectJ的学习总结
- GOF设计模式之“工厂模式”
- Android 反射的使用
- Longest Valid Parentheses
- poj 3308 Paratroopers最小点权覆盖
- C++ 智能指针详解
- 详细介绍C++中的类对象内存模型