目录

1、Spark Executor如何工作

2、Spark Executor工作源码


1、Spark Executor如何工作

当Driver发送过来Task的时候,其实是发送给CoarseGrainedExecutorBackend这个RPCEndpoint,而不是直接发送给Executor(Executor由于不是消息循环体永远也无法接收远程发过来的信息)。

Driver向ExecutorBackend发送LaunchTask,这里实际上是把内容交给线程池中的线程去执行。首先判断Executor是否为空,反序列化TaskDescription,然后调用Executor.launchTask ,launchTask 里面是将Task封装在TaskRunner(是一个runnable对象)里面然后交给线程池中的线程处理。在TaskRunner的run方法里面会导致runTask的执行。

2、Spark Executor工作源码

(1)Worker接收到Master发送过来启动Executor的指令,通过ExecutorRunner启动另外一个进程来运行Executor。在这个基础上会启动一个CoarseGrainedExecutorBackend(粗粒度),ExecutorBackend启动的时候这个时候要向Driver注册,通过RegisterExecutor。Driver(CoarseGrainedSchedulerBackend的内部成员DriverEndpoint接收注册)在接收到RegisterExecutor信息后会返回一个信息RegisteredExecutor给CoarseGrainedExecutorBackend。

CoarseGrainedExecutorBackend:是Executor运行所在的进程的名称,他本身不会完成具体任务的计算,这个进程里面有个Executor对象和CoarseGrainedExecutorBackend是一一对应的。

Executor:完成具体的计算,真正处理Task的对象,内部通过线程池的方式完成Task的计算。

(2)Driver的CoarseGrainedSchedulerBackend内部的成员DriverEndpoint收到RegisterExecutor后,首先判断ExecutorDataMap中是否有这个ExecutorId。ExecutorDataMap是个内存数据结构(他是CoarseGrainedSchedulerBackend的成员,所以最终是注册给CoarseGrainedSchedulerBackend),他是一个HashMap。

如果ExecutorDataMap中不存在,就进行注册,注册的时候先看看address存在不存在,如果存在直接获取,如果不存在就获取senderAddress。这从实现的角度看adress就是senderAddress。然后相关数据结构添加数据

CoarseGrainedSchedulerBackend.this.synchronized这里加上synchronized是因为集群中有很多ExecutorBackend向Driver注册,担心注册的时候写冲突,所以加上一个同步代码块

最后把消息发还给CoarseGrainedExecutorBackend

(3)CoarseGrainedExecutorBackend收到RegisterExecutor后就new了一个Executor这个Executor对象是事实上负责Task计算的

(4)在Executor默认构造器中有一个非常关键的内容,有个成员threadPool(线程池)

创建线程池,线程池里面要有线程,线程怎么产生的呢?不会平白无故的产生,所以就搞了一个线程工厂,就是按照某种你需要的格式去产生线程,背后还是new出一个线程

setDamon(True)设置每个线程是后台运行的方式

(5)线程池也准备好后就是等待Driver端发任务过来,是发给CoarseGrainedExecutorBackend不是Executor,因为Executor不可能接收到消息的他本身就不是一个消息循环体。CoarseGrainedExecutorBackend收到LaunchTask后,这里实际上是把内容交给线程池中的线程去执行。判断Executor是否为空,反序列化TaskDescription,然后调用Executor.launchTask

(6)launchTask 里面是将Task封装在TaskRunner(是一个runnable对象)里面然后交给线程池中的线程处理。并把这个任务加入ConcurrentHashMap类型的名称为runningTasks的数据结构中管理。

(7)在TaskRunner的run方法里面会导致runTask的执行

补充:为什么要在worker接收到master发送过来的指令后为什么要启动另外一个进程,也就是说为什么开辟另外一个进程,在另外一个进程中注册给Driver,然后启动Executor。必须启动另外一个进程的原因:①Worker本身是管理当前机器上的资源的,当前机器上的资源变动的时候要汇报给Master,Worker不是用来做计算的不能在Worker里面计算;②Spark集群中可能有很多应用程序就可能有很多的Executor,如果不是为每个Executor启动一个进程而是所有Executor在Worker里面,那么一个程序奔溃了会导致其他程序奔溃。

Spark Executor解析相关推荐

  1. Spark Shuffle 解析

    5.Spark Shuffle 解析 5.1 Shuffle 的核心要点 5.1.1 ShuffleMapStage 与 FinalStage 在划分 stage 时,最后一个 stage 称为 Fi ...

  2. Spark内核解析1

    Spark通讯架构 脚本探究: 概述 Spark 内核泛指 Spark 的核心运行机制,包括 Spark 核心组件的运行机制.Spark 任务调度机制.Spark 内存管理机制.Spark 核心功能的 ...

  3. 05_大数据技术之Spark内核解析(1.1)

    1. Spark 内核概述 Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spa ...

  4. 小象学院源码共读之Executor解析

    Executor解析 Executor解析 Executor类的初始化 线程池threadPool及taskReaperPool详解 子类TaskRunner详解 子类TaskReaper详解 参考内 ...

  5. spark原理解析和spark core

    spark原理解析 解析一:resilient distributed dataset (RDD) resilient distributed dataset (RDD):弹性分布式数据集,有容错机制 ...

  6. Spark Executor内幕

    Spark Executor工作原理 ExecutorBackend注册 Executor实例化 Executor具体是如何工作的? CoarseGrainedExecutorBackend,粗粒度的 ...

  7. Spark内核解析之六:Spark 内存管理

    前言 在执行Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并 ...

  8. Spark内核解析之一:内核概述

    Spark 内核概述 Spark 内核泛指 Spark 的核心运行机制,包括 Spark 核心组件的运行机制.Spark任务调度机制.Spark 内存管理机制.Spark 核心功能的运行原理等,熟练掌 ...

  9. spark shell 启动 出现org.apache.spark.SparkException: Found both spark.executor.extraClassPath and SPARK

    启动spark shell报错: Setting default log level to "WARN". To adjust logging level use sc.setLo ...

最新文章

  1. 树莓派 linux0.12,12 个可替代树莓派的单板机
  2. idea 代码自动补全快捷键
  3. ABAP 在字符串之间加入若干空格
  4. 全国计算机等级考试题库二级C操作题100套(第26套)
  5. (24) 不可能的出栈顺序
  6. Hello Blazor:(14)CSS隔离
  7. Java:对Java SE 6和Java SE 7的客户端和桌面部分的改进!
  8. MTK:GPIO模式与设置
  9. php点广告送积分,PHP猜一猜奇偶商城积分促销模式
  10. indesign打开黑屏 mac_看完这篇文章,90%的电脑黑屏问题都可以解决了!
  11. Redies(一款高性能的数据库)
  12. 一款简约好看的html5音乐播放器,一款好看又简洁的HTML5音乐播放器skPlayer
  13. 向已知EXCEL模板写入数据并导出
  14. 设备商网管软件定制开发案例分析
  15. android命令行启动,Android中使用am命令实现在命令行启动程序详解
  16. 计算机图形图像知识梳理,计算机图形学知识点总结
  17. idea指定maven的settings文件不生效
  18. ESP32学习笔记(9)——TCP服务端
  19. 原神服务器维护后抽奖池会更新吗,原神换up池会刷新保底吗
  20. 机器学习编译入门课程学习笔记第二讲 张量程序抽象

热门文章

  1. 洛谷P2089 烤鸡 题解
  2. javascript 之作用域-06
  3. 将一个java工程导入到myeclipse应该注意的地方
  4. BP神经网络算法学习
  5. Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
  6. 深入理解cache对写好代码至关重要
  7. Linux内核编程广泛使用的前向声明(Forward Declaration)
  8. Android Jni 例程
  9. semihost/ITM机制浅析以及使用JLINK通过ITM调试stm32单片机
  10. linux java远程调试_idea远程linux代码调试