ITPub博客

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

Spark Executor的启动 源码剖析

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

application向Master注册并提交后,Master最终会调用schedule方法规划分配将要worker上运行的executor的资源,然后调用allocateWorkerResourceToExecutors将资源分配给executor,并启动executor。

master.scala中的schedule中《Spark Application调度算法 源码剖析》

launchExecutor方法中启动了executor

下面进入worker端--

worker端接收到launchExecutor消息后

  1. 先会判断消息发送的master是否为alive
  2. 接着创建executor的工作目录和本地临时目录
  3. 将master发送来的信息封装为ExecutorRunner对象,ExecutorRunner用来管理一个executor进程的执行,目前只在standalone模式下使用
  4. 调用ExecutorRunner的start方法
  5. 记录executor使用的资源
  6. 向Master发送消息,报告当前executor的状态

其中,重点是ExecutorRunner的Start方法:

创建workerThread 线程,该线程运行时执行fetchAndRunExecutor方法

fetchAndRunExecutor方法将接收到的信息后,执行步骤如下:

  • 创建ProcessBuilder,用于在本地执行命令或者执行脚本
  • 为ProcessBuilder创建执行目录,该目录为executorDir目录,即worker创建的executor工作目录
  • 为ProcessBuilder设置环境变量
  • 启动ProcessBuilder,生成进程,

这里就会执行命令,执行命令后会产生一个进程CoarseGrainedExecutorBackend,该进程为executor的守护进程

这里的spark运行参数,由substituteVariables将其替换为分配好实际值

执行该命令会调用CoarseGrainedExecutorBackend的main方法,对命令行的args参数进行处理

  • 重定向进程输出流文件
  • 重定向进程错误流文件
  • 等待获取executor进程的退出状态码,等到executor的状态为已退出,向worker发送消息,executor状态改变

executor的启动 完结 ~

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

上一篇: ELK应用栈的搭建
请登录后发表评论 登录
全部评论
管理员

注册时间:2018-03-30

  • 博文量
    2383
  • 访问量
    984396