ITPub博客

首页 > 大数据 > > Spark CoarseGrainedExecutorBackend启动 源码剖析

Spark CoarseGrainedExecutorBackend启动 源码剖析

作者:格伯纳 时间:2020-05-12 12:00:35 0 删除 编辑

回到CoarseGrainedExecutorBackend端,在接收到RegisteredExecutor消息后,创建executor对象,创建完毕的Executord对象,用于之后执行Driver分配Taskexecutor的启动,调用fetchAndRunExecutor方法,创建ProcessBuilder,用于执行命令启动CoarseGrainedExecutorBackend。

看看CoarseGrainedExecutorBackend

main方法是一切函数入口:

  1. createFn中创建一个CoarseGrainedExecutorBackend对象
  2. 创建对象传入了运行依赖的变量参数: rpcEnv,arguments(driverUrl,executorId,hostname,cores,userClassPath,resourcesFileOpt),env
  3. 核心是run方法
  4. System.exit(0)异常跳出

run方法

看一下run方法

run方法位于CoarseGrainedExecutorBackend的伴生对象中,方法中做了如下操作

  1. 创建名为fetcher的RpcEnv
  2. 向driver发送消息RetrieveSparkAppConfig,获取spark属性信息
  3. 获取driver回复的消息,将属性信息添加到Seq队列,然后关闭fetcher RpcEnv
  4. 创建executor自己的sparkConf,将刚获取的属性信息添加到sparkConf中
  5. 调用SparkEnv.createExecutorEnv方法,创建executor sparkEnv
  6. 创建CoarseGrainedExecutorBackend实例,并注册到自身的Executor Env的rpcEnv中
  7. 创建WorkerWatcher,用于当worker发生异常情况时,关闭CoarseGrainedExecutorBackend
  8. 等待rpcEnv退出

在run方法中,创建了CoarseGrainedExecutorBackend实例,并注册到自身的Executor Env的rpcEnv中,在注册到RpcEnv的过程中会触发CoarseGrainedExecutorBackend的onStart方法,执行该方法,onStart方法中,向driver发送了RegisterExecutor消息,即向CoarseGrainedSchedulerBackend发送RegisterExecutor消息

到CoarseGrainedSchedulerBackend端,接受到消息后,做出如下处理:

  1. 判断executor是否重复注册
  2. 添加内存缓存,向addressToExecutorId hashMap中添加executor id与rpc Address信息
  3. 增加totalCoreCount总数,以表示drvier已经获得的core总数
  4. 向已注册的executor总数集合中加1
  5. 封装ExecutorData对象
  6. 将分装的ExecutorData对象,executor Id添加到executorDataMap缓存中
  7. 更新currentExecutorIdCounter、numPendingExecutors信息
  8. 向CoarseGrainedExecutorBackend发送消息Executor注册成功
  9. 向listenerBus投递SparkListenerExecutorAdded事件
  10. 调用makeOffer方法,给Task分配资源

回到CoarseGrainedExecutorBackend端,在接收到RegisteredExecutor消息后,创建executor对象,创建完毕的Executord对象,用于之后执行Driver分配Task

CoarseGrainedExecutorBackend的启动部分完结 - -

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3154223/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
管理员

注册时间:2018-03-30

  • 博文量
    2383
  • 访问量
    984262