Spark系列(十)TaskSchedule工作原理
工作原理图

源码分析:
1、)
25
launchedTask = true
26
}
27
} catch {
28
case e: TaskNotSerializableException =>
29
logError(s"Resource offer failed, task set ${taskSet.name} was not serializable")
30
// Do not offer resources for this task, but don't throw an error to allow other
31
// task sets to be submitted.
32
return launchedTask
33
}
34
}
35
}
36
return launchedTask
37
}
5、launchTasks
| 1 | def launchTasks(tasks: Seq[Seq[TaskDescription]]) { |
| 2 | for (task <- tasks.flatten) { |
| 3 | // 将每个executor要执行的task信息进行序列化 |
| 4 | val ser = SparkEnv.get.closureSerializer.newInstance() |
| 5 | val serializedTask = ser.serialize(task) |
| 6 | if (serializedTask.limit >= akkaFrameSize - AkkaUtils.reservedSizeBytes) { |
| 7 | val taskSetId = scheduler.taskIdToTaskSetId(task.taskId) |
| 8 | scheduler.activeTaskSets.get(taskSetId).foreach { taskSet => |
| 9 | try { |
| 10 | var msg = "Serialized task %s:%d was %d bytes, which exceeds max allowed: " + |
| 11 | "spark.akka.frameSize (%d bytes) - reserved (%d bytes). Consider increasing " + |
| 12 | "spark.akka.frameSize or using broadcast variables for large values." |
| 13 | msg = msg.format(task.taskId, task.index, serializedTask.limit, akkaFrameSize, |
| 14 | AkkaUtils.reservedSizeBytes) |
| 15 | taskSet.abort(msg) |
| 16 | } catch { |
| 17 | case e: Exception => logError("Exception in error callback", e) |
| 18 | } |
| 19 | } |
| 20 | } |
| 21 | else { |
| 22 | val executorData = executorDataMap(task.executorId) |
| 23 | // 在对应的executor的资源中减去要使用的cpu资源 |
| 24 | executorData.freeCores -= scheduler.CPUS_PER_TASK |
| 25 | // 向executor发送launchTask消息来启动task |
| 26 | executorData.executorActor ! LaunchTask(new SerializableBuffer(serializedTask)) |
| 27 | } |
| 28 | } |
| 29 | } |
说明:
1、resourceOffer方法功能:判断executor本地化级别的等待时间是否在一定范围内,如果在就认为task使用本地化级别可以在executor上启动。
2、TaskSetManager功能:对一个单独的TaskSet的任务进行调度,该类负责追踪每个task,如果task失败会负责重试,知道超过重试次数的限制,且会通过延迟调度为该TaskSet处理本地化调度机制,它主要接口是resourceOffer,在这个接口中,TaskSet会希望在一个节点上运行一个任务,并接受任务的状态改变消息,来知道它负责的task的状态改变了。
3、本地化级别种类:
PROCESS_LOCAL:进程本地化,rdd的partition和task在同一个executor中(最快)
NODE_LOCAL:rdd的partition和task,不在一个同一个executor中,但在同一个节点中
NO_PREF:没有本地化级别
RACK_LOCAL:机架本地化,至少rdd的partition和task在一个机架中
ANY:任意本地化级别
Spark系列(十)TaskSchedule工作原理的更多相关文章
- Spark系列(八)Worker工作原理
工作原理图 源代码分析 包名:org.apache.spark.deploy.worker 启动driver入口点:registerWithMaster方法中的case LaunchDriver ...
- Spark系列(九)DAGScheduler工作原理
以wordcount为示例进行深入分析 1 33 ) { 46 logInfo("Submitting " + tasks.size + " missi ...
- line-height系列——定义和工作原理总结
一.line-height的定义和工作原理总结 line-height的属性值: normal 默认 设置合理的行间距. number 设置数字,此数字会与当前的字体尺寸相乘来设置行间距li ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
- “Ceph浅析”系列之五——Ceph的工作原理及流程
本文将对Ceph的工作原理和若干关键工作流程进行扼要介绍.如前所述,由于Ceph的功能实现本质上依托于RADOS,因而,此处的介绍事实上也是针对RADOS进行.对于上层的部分,特别是RADOS GW和 ...
- 49、Spark Streaming基本工作原理
一.大数据实时计算介绍 1.概述 Spark Streaming,其实就是一种Spark提供的,对于大数据,进行实时计算的一种框架.它的底层,其实,也是基于我们之前讲解的Spark Core的. 基本 ...
- 4.Apache Spark的工作原理
Apache Spark的工作原理 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark ...
- JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...
- RabbitMQ系列(二)深入了解RabbitMQ工作原理及简单使用
深入了解RabbitMQ工作原理及简单使用 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍 ...
随机推荐
- 深入探索 Java 热部署
在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作.对于某些大型的应用来 ...
- 完美配置Tomcat的HTTPS
Tomcat配置HTTPS的文章到处都有,过程也比较简单,随后文中会转一段过来. 但对于启用APR情况下报异常“java.lang.Exception: Connector attribute SSL ...
- [Codeforces676B]Pyramid of Glasses(递推,DP)
题目链接:http://codeforces.com/problemset/problem/676/B 递推,dp(i, j)表示第i层第j个杯子,从第一层开始向下倒,和数塔一样的题.每个杯子1个时间 ...
- SQL中存储过程和自定义函数的区别
存储过程: 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在 ...
- yeoman错误提示
运行 yo angular 出现如下提示: $ yo angular grunt-cli: The grunt command line interface. (v0.1.9) Fatal error ...
- Codeforces Round #232 (Div. 2) B. On Corruption and Numbers
题目:http://codeforces.com/contest/397/problem/B 题意:给一个n ,求能不能在[l, r]的区间内的数字相加得到, 数字可多次重复.. 比赛的时候没有想出来 ...
- BootStrap基本样式
文本对齐风格:.text-left:左对齐.text-center:居中对齐.text-right:右对齐.text-justify:两端对齐 取消列表符号:.list-unstyled内联列表:.l ...
- 使用讯飞SDK,实现文字在线合成语音
private SpeechSynthesizer mTts; private int isSpeaking = 0; mTts= SpeechSynthesizer.createSynthesize ...
- nginx反向代理的简单配置
有两台机器A和B. A上边是nginx,B上边是tomcat. 现在要通过A的反向代理功能,通过A的nginx访问到B的tomcat. 首先tomcat已经配置好,并且正确启动,可访问. ...
- BZOJ 1610 连线游戏
BZOJ不允许除以0. #include<iostream> #include<cstdio> #include<cstring> #include<cstd ...