解析Spark Executor内幕,详解CoarseGrainedExecutorBackend
来源:互联网 发布:php本地环境搭建 编辑:程序博客网 时间:2024/05/22 17:39
Spark Executor工作原理
ExecutorBackend注册
Executor实例化
Executor具体是如何工作的?
CoarseGrainedExecutorBac
Worker为什么要启动另外一个进程?
Worker本身是管理当前机器上的资源,变动资源的时候向Master汇报。有很多应用程序,就需要很多Executor。这样程序之间不会一个奔溃导致所有的都奔溃。
1.在CoarseGrainedExecutorBac
2.CoarseGrainedExecutorBac
3. CoarseGrainedExecutorBac
4. CoarseGrainedExecutorBac
5.在Driver进程中,有两个至关重要的Endpoint,
a)第一个就是ClientEndpoint,主要负责向Master注册当前的程序;是AppClient的内部成员。
b)另外一个就是DriverEndpoint,这是整个程序运行时候的驱动器!!是CoarseGrainedExecutorBac
6.在Driver中通过ExecutorData封装并注册ExecutorBackend的信息到Driver的内存数据结构ExecutorMapData中。ExecutorMapData是CoarseGrainedSchedulerBa
private[cluster]
)
7.实际在执行的时候,DriverEndpoint会把信息写入CoarseGrainedSchedulerBa
8.CoarseGrainedExecutorBac
Executor是如何工作的?
1.当Driver发送过来Task的时候,其实是发送给了CoarseGrainedExecutorBac
caseLaunchTask(data) => if (executor == null) { "Received LaunchTask command but executor was null") logError( 1) System.exit( else } { val taskDesc = ser.deserialize[TaskDescription](data.value) "Got assigned task " logInfo( + taskDesc.taskId) executor.launchTask(this, taskId = taskDesc.taskId, attemptNumber = taskDesc.attemptNumber, taskDesc.name, taskDesc.serializedTask) }
2.ExecutorBackend在收到Driver中发送过来的消息后,会通过调用launchTask来交给Executor去执行。
caseLaunchTask(data) => if (executor == null) { "Received LaunchTask command but executor was null") logError( 1) System.exit( else } { val taskDesc = ser.deserialize[TaskDescription](data.value) "Got assigned task " logInfo( + taskDesc.taskId) executor.launchTask(this, taskId = taskDesc.taskId, attemptNumber = taskDesc.attemptNumber, taskDesc.name, taskDesc.serializedTask) }
在介绍CoarseGrainedExecutorBackend的启动流程前,先了解下CoarseGrainedExecutorBackend。我们知道Executor负责计算任务,即执行task,而Executor对象的创建及维护是由CoarseGrainedExecutorBackend负责的,CoarseGrainedExecutorBackend在Spark运行期是一个单独的进程,在Worker节点可以通过Java的jps命令查看,如下
如何启动上图中的CoarseGrainedExecutorBackend进程是我们后面介绍的重点,先看下其定义及UML
从上图可以得到如下信息
- CoarseGrainedExecutorBackend是RpcEndpoint的子类,能够和Driver进行RPC通信,其生命周期方法onStart一定要关注,看执行了哪些动作。
- CoarseGrainedExecutorBackend维护了两个属性executor和driver,executor负责运行task,driver负责和Driver通信。
- ExecutorBackend有抽象方法statusUpdate,负责将Executor的计算结果返回给Driver。
最后,CoarseGrainedExecutorBackend是spark运行期的一个进程,Executor运行在该进程内。
启动CoarseGrainedExecutorBackend
接着Spark 任务调度之Launch Executor介绍,最后讲到Worker进程收到LaunchExecutor消息,然后,Worker将收到的消息封装为ExecutorRunner对象,调用其start方法,如下
start方法启动线程,调用ExecutorRunner的fetchAndRunExecutor方法,fetchAndRunExecutor方法中将收到的信息拼接为Linux命令,然后使用ProcessBuilder执行linux命令启动CoarseGrainedExecutorBackend,和启动Driver的方式如出一辙,fetchAndRunExecutor方法如下
ProcessBuilder执行的Linux命令大致如下
上面的java命令会调用CoarseGrainedExecutorBackend的main方法,main方法中处理命令行传入的参数,然后创建RpcEnv,并注册CoarseGrainedExecutorBackend,如下
至此,启动CoarseGrainedExecutorBackend就介绍完了,由于将CoarseGrainedExecutorBackend注册到RpcEnv会调用其onStart方法,所以下一篇就是查看onStart方法中进行了哪些操作。
总结
介绍了CoarseGrainedExecutorBackend的作用及启动流程,大致如下
- 解析Spark Executor内幕,详解CoarseGrainedExecutorBackend
- Spark技术内幕:Executor分配详解
- Spark技术内幕:Executor分配详解
- Spark技术内幕:Executor分配详解
- Spark内幕:Task向Executor提交的源码解析ANDROIDMaterial Design详解(UI控件)
- spark executor内幕解密
- Spark技术内幕: Task向Executor提交的源码解析
- Spark技术内幕: Task向Executor提交的源码解析
- 第33课:Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕
- 第33课: Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕
- day26:Spark Runtime(Driver、Masster、Worker、Executor)内幕
- Spark 任务调度之启动CoarseGrainedExecutorBackend
- Spark中executor-memory参数详解
- Spark-executor
- Spark Executor
- spark executor
- Spark技术内幕:SortBasedShuffle实现解析
- 大数据IMF传奇行动绝密课程第33课:Spark Executor内幕彻底解密
- 即速应用:微信小程序上线突破10000款!
- 案例:Nginx作为Web缓存服务器应用
- 【B
- iOS 截取图片中间部分、图片缩放到宽度
- GitHub和GitLab的区别
- 解析Spark Executor内幕,详解CoarseGrainedExecutorBackend
- C++自动生成身份证号代码
- 解析JSON
- html回顾及vue.js在html中使用(三)
- Java中的Set集合接口实现插入对象不重复的原理
- HDU-2222 Keywords Search AC自动机模板题
- 笨方法学Python 习题 42: 对象、类、以及从属关系
- Matlab路径问题导致无法加载lib解决方案
- Puzzle UVA