Executor是在worker启动的一个进程,用于执行task任务。我们知道CoarseGrainedSchedulerBackend在启动之后,会创建Driver终端,然后会立即向Driver发送RegisterExecutor消息,注册成功之后,会向CoarseGrainedSchedulerBackend返回一个RegisteredExecutor消息

然后会创建一个Executor对象;然后接下来Driver内的DAGScheduler

向CoarseGrainedSchedulerBackend发送LaunchTask消息,然后这个SchedulerBackend实际上调用executor来发起任务,创建TaskRunner来执行task

一 核心属性

String executorHostname: executor对应的hostname

Boolean isLocal:是否是本地的

ThreadPoolExecutor threadPool:线程池

boolean userClassPathFirst: 是否首先加载用户jar中的class

MutableURLClassLoader urlClassLoader: URL类加载器

Long maxDirectResultSize: 直接结果最大为多大,首先从spark.task.maxDirectResultSize获取,如果没有设置则,默认是1M,还需要和rpc的message所允许的最大字节数比较,看谁比较小

Long maxResultSize:最大结果限制,默认是1GB

ConcurrentHashMap runningTasks: 正在运行的task列表

ScheduledExecutorService heartbeater: 心跳线程

HEARTBEAT_MAX_FAILURES :心跳检测失败默认值60

二 重要方法

2.1 launchTask

deflaunchTask(context:ExecutorBackend, taskId: Long, attemptNumber: Int,
    taskName: String,serializedTask: ByteBuffer): Unit = {
  // 创建TaskRunner对象
 
val tr= new TaskRunner(context,taskId = taskId,attemptNumber = attemptNumber, taskName,
    serializedTask)
  // <task id, task runner> 放入内存缓存中
  runningTasks
.put(taskId,tr)
  // 调用TaskRunner的run方法
  threadPool
.execute(tr)
}

2.2 killTask

def killTask(taskId: Long, interruptThread: Boolean): Unit = {// 获取task 对应的 TaskRunnerval tr = runningTasks.get(taskId)// 调用kill方法kill taskif (tr != null) {tr.kill(interruptThread)}
}

2.3 TaskRunner的run方法

Spark源码分析之Executor分析相关推荐

  1. Spark源码性能优化案例分析

    本篇文章枚举了几例常见的问题并给出了优化方案,推荐了两套测试性能优化工具 问题: Spark 任务文件初始化调优 资源分析,发现第一个 stage 时间特别长,耗时长达 14s , CPU 和网络通信 ...

  2. Spark源码解读之Shuffle原理剖析与源码分析

    在前面几篇文章中,介绍了Spark的启动流程Spark内核架构流程深度剖析,Spark源码分析之DAGScheduler详解,Spark源码解读之Executor以及Task工作原理剖析,Spark源 ...

  3. Spark源码分析之七:Task运行(一)

    在Task调度相关的两篇文章<Spark源码分析之五:Task调度(一)>与<Spark源码分析之六:Task调度(二)>中,我们大致了解了Task调度相关的主要逻辑,并且在T ...

  4. Spark 源码分析

    2019独角兽企业重金招聘Python工程师标准>>> 一. 启动篇 (一) 引子 在spark-shell终端执行 val arr = Array(1,2,3,4) val rdd ...

  5. Spark源码分析之九:内存管理模型

    Spark是现在很流行的一个基于内存的分布式计算框架,既然是基于内存,那么自然而然的,内存的管理就是Spark存储管理的重中之重了.那么,Spark究竟采用什么样的内存管理模型呢?本文就为大家揭开Sp ...

  6. spark 源码分析 Blockmanager

    原文链接 参考, Spark源码分析之-Storage模块 对于storage, 为何Spark需要storage模块?为了cache RDD  Spark的特点就是可以将RDD cache在memo ...

  7. Apache Spark源码走读之6 -- 存储子系统分析

    Spark计算速度远胜于Hadoop的原因之一就在于中间结果是缓存在内存而不是直接写入到disk,本文尝试分析Spark中存储子系统的构成,并以数据写入和数据读取为例,讲述清楚存储子系统中各部件的交互 ...

  8. spark 源码分析之十八 -- Spark存储体系剖析

    本篇文章主要剖析BlockManager相关的类以及总结Spark底层存储体系. 总述 先看 BlockManager相关类之间的关系如下: 我们从NettyRpcEnv 开始,做一下简单说明. Ne ...

  9. spark 源码分析之二十 -- Stage的提交

    引言 上篇 spark 源码分析之十九 -- DAG的生成和Stage的划分 中,主要介绍了下图中的前两个阶段DAG的构建和Stage的划分. 本篇文章主要剖析,Stage是如何提交的. rdd的依赖 ...

  10. Spark源码分析:多种部署方式之间的区别与联系

    作者:过往记忆 从官方的文档我们可以知道, Spark 的部署方式有很多种:local.Standalone.Mesos.YARN-..不同部署方式的后台处理进程是不一样的,但是如果我们从代码的角度来 ...

最新文章

  1. python3 zipfile_python3中zipfile模块的常用方法
  2. Eclipse Removing obsolete files from server 问题
  3. 前端面试题-数组去重和排序
  4. Ticker View
  5. 多余的读写端口什么时候会对程序造成影响_程序员需要了解的硬核知识之控制硬件...
  6. 高并发环境下,6个构建缓存服务需要注意的问题
  7. Python-装饰器进阶
  8. C# 笔记2 - 数组、集合与与文本文件处理
  9. 网易云接口获取音乐(转载练习)
  10. Zemax操作24--高斯光束的聚焦和传播
  11. Python实现m3u8下载mp4视频原理及源码
  12. 用JAVA语言完成实验——猴子摘香蕉
  13. c语言厘米换算分米程序设计,厘米和分米换算(米和厘米换算)
  14. android x86 兼容问题,X86如何解决Android应用兼容性问题
  15. linux设置北京时区
  16. 手机号码归属地api文档
  17. 交易落空,房产中介索要中介费该不该支持?
  18. 什么是Unity技术美术
  19. php环境扩展安装流程
  20. 假如,我来做一款产品?

热门文章

  1. lua游戏开发实践指南光盘_Godot游戏开发实践之一:用High Level Multiplayer API制作多人游戏(上)
  2. 设计模式之单例模式介绍
  3. 关于容量设计、规划、治理 你知多少?
  4. 3-31Pytorch与auto-variabletensor
  5. php 5.2 thinkphp 3.2.2 cache,查询缓存-ThinkPHP3.2.3完全开发手册
  6. 一个类的java代码_求一段java代码,定义一个类
  7. 文件服务器搭建_小型企业文件存储服务器的搭建四部曲
  8. java object 源码_java中Object类 源代码详解
  9. Java 设计模式之 State 状态模式
  10. vs安装 c语言编译环境,Visual Studio Code安装与C/C++开发调试环境搭建