Spark源码分析之Executor分析
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分析相关推荐
- Spark源码性能优化案例分析
本篇文章枚举了几例常见的问题并给出了优化方案,推荐了两套测试性能优化工具 问题: Spark 任务文件初始化调优 资源分析,发现第一个 stage 时间特别长,耗时长达 14s , CPU 和网络通信 ...
- Spark源码解读之Shuffle原理剖析与源码分析
在前面几篇文章中,介绍了Spark的启动流程Spark内核架构流程深度剖析,Spark源码分析之DAGScheduler详解,Spark源码解读之Executor以及Task工作原理剖析,Spark源 ...
- Spark源码分析之七:Task运行(一)
在Task调度相关的两篇文章<Spark源码分析之五:Task调度(一)>与<Spark源码分析之六:Task调度(二)>中,我们大致了解了Task调度相关的主要逻辑,并且在T ...
- Spark 源码分析
2019独角兽企业重金招聘Python工程师标准>>> 一. 启动篇 (一) 引子 在spark-shell终端执行 val arr = Array(1,2,3,4) val rdd ...
- Spark源码分析之九:内存管理模型
Spark是现在很流行的一个基于内存的分布式计算框架,既然是基于内存,那么自然而然的,内存的管理就是Spark存储管理的重中之重了.那么,Spark究竟采用什么样的内存管理模型呢?本文就为大家揭开Sp ...
- spark 源码分析 Blockmanager
原文链接 参考, Spark源码分析之-Storage模块 对于storage, 为何Spark需要storage模块?为了cache RDD Spark的特点就是可以将RDD cache在memo ...
- Apache Spark源码走读之6 -- 存储子系统分析
Spark计算速度远胜于Hadoop的原因之一就在于中间结果是缓存在内存而不是直接写入到disk,本文尝试分析Spark中存储子系统的构成,并以数据写入和数据读取为例,讲述清楚存储子系统中各部件的交互 ...
- spark 源码分析之十八 -- Spark存储体系剖析
本篇文章主要剖析BlockManager相关的类以及总结Spark底层存储体系. 总述 先看 BlockManager相关类之间的关系如下: 我们从NettyRpcEnv 开始,做一下简单说明. Ne ...
- spark 源码分析之二十 -- Stage的提交
引言 上篇 spark 源码分析之十九 -- DAG的生成和Stage的划分 中,主要介绍了下图中的前两个阶段DAG的构建和Stage的划分. 本篇文章主要剖析,Stage是如何提交的. rdd的依赖 ...
- Spark源码分析:多种部署方式之间的区别与联系
作者:过往记忆 从官方的文档我们可以知道, Spark 的部署方式有很多种:local.Standalone.Mesos.YARN-..不同部署方式的后台处理进程是不一样的,但是如果我们从代码的角度来 ...
最新文章
- python3 zipfile_python3中zipfile模块的常用方法
- Eclipse Removing obsolete files from server 问题
- 前端面试题-数组去重和排序
- Ticker View
- 多余的读写端口什么时候会对程序造成影响_程序员需要了解的硬核知识之控制硬件...
- 高并发环境下,6个构建缓存服务需要注意的问题
- Python-装饰器进阶
- C# 笔记2 - 数组、集合与与文本文件处理
- 网易云接口获取音乐(转载练习)
- Zemax操作24--高斯光束的聚焦和传播
- Python实现m3u8下载mp4视频原理及源码
- 用JAVA语言完成实验——猴子摘香蕉
- c语言厘米换算分米程序设计,厘米和分米换算(米和厘米换算)
- android x86 兼容问题,X86如何解决Android应用兼容性问题
- linux设置北京时区
- 手机号码归属地api文档
- 交易落空,房产中介索要中介费该不该支持?
- 什么是Unity技术美术
- php环境扩展安装流程
- 假如,我来做一款产品?
热门文章
- lua游戏开发实践指南光盘_Godot游戏开发实践之一:用High Level Multiplayer API制作多人游戏(上)
- 设计模式之单例模式介绍
- 关于容量设计、规划、治理 你知多少?
- 3-31Pytorch与auto-variabletensor
- php 5.2 thinkphp 3.2.2 cache,查询缓存-ThinkPHP3.2.3完全开发手册
- 一个类的java代码_求一段java代码,定义一个类
- 文件服务器搭建_小型企业文件存储服务器的搭建四部曲
- java object 源码_java中Object类 源代码详解
- Java 设计模式之 State 状态模式
- vs安装 c语言编译环境,Visual Studio Code安装与C/C++开发调试环境搭建