Spark源码学习1.4——MapOutputTracker.scala
相关类:MapOutputTrackerMessage,GetMapOutputStatuses extends MapPutputTrackerMessage,StopMapOutputTracker extends MapOutputTrackerMessage,MapOutputTrackerMasterActor,MapOutputTrackerMaster。
首先重写MapOutputTrackerMasterActor的receiveWithLogging:判断MapOutputTracker需要处理的类型是GetMapOutputStatuses(),获取MapOutputTracker的状态;或者是StopMapOutputTracker,停止MapOutputTracker。
一、MapOutputTracker是一个abstract抽象类。获取的Map out的信息根据master和worker有不同的用途:master上,用来记录ShuffleMapTasks所需的map out的源;worker上,仅仅作为cache用来执行shuffle计算。
1、askTracker():检查MapOutputTracker的连接是否正常。
2、sendTracker():检查MapOutPutTracker是否正常工作(发送任意信息返回true)。
3、getServerStatuses():根据参数shuffle id来获取shuffle对应的map out所在的位置及信息。如果没有直接的对应shuffle id的信息,则需要从所有的map中匹配对应shuffle id的map out。
4、getEpoch()和updateEpoch():获取和更新epoch的值。epoch的值是与master同步的,保证map outs是最新的有用的。
二、MapOutPutTrackerMaster针对master的MapOutPutTracker,按照前文的意思,它的作用是为每个shuffle准备其所需要的所有map out,可以加速map outs传送给shuffle的速度。在存储map out的HashMap中,HashMap是基于时间戳的,因此map outs被减少只能因为它被注销掉或者生命周期耗尽。
1、registerShuffle():在map out的集合mapStatuses中注册新的Shuffle,参数为Shuffle id和map的个数。
2、registerMapOutPut():根据Shuffle id在mapStatuses中为Shuffle添加map out的状态(存储的map out其实就是map out的状态)。
3、registerMapOutPuts():同时添加多个map out。
4、unregisterMapOutPut():在mapStatuses中注销给定Shuffle的map out。
5、重写unrigesterShuffle():移除mapStatuses中的给定Shuffle的map out。
6、containShuffle():判断是否存在给定的Shuffle。
7、incrementEpoch():同步epoch加一。
8、getSerializedMapOutputStatuses():给定Shuffle id,返回其map out集合。首先是对epoch进行锁状态下的同步,保证获取资源的正确性;其次,根据Shuffle id获取指定位置的statuses,如果指定位置没有对应Shuffle id的statuses,那么获取这个位置的statuses快照返回,作为参考;最后,如果操作的epoch与锁状态下的epoch是一致的,将获取到的statuses存入缓存。
9、stop():停止MapOutPutTracker,清除mapStatuses,清空缓存。
10、cleanup():在指定时间清除mapStatuses和cachedSerializedStatuses。
三、MapOutPutTracker对象。它通过serializedMapStatuses将map out流通过gzip的压缩方式压缩(压缩是可行的,因为很多map out基于同样的hostname),这样方便数据流传递给reduce进行操作。
Spark源码学习1.4——MapOutputTracker.scala的更多相关文章
- Spark源码学习1.2——TaskSchedulerImpl.scala
许久没有写博客了,没有太多时间,最近陆续将Spark源码的一些阅读笔记传上,接下来要修改Spark源码了. 这个类继承于TaskScheduler类,重载了TaskScheduler中的大部分方法,是 ...
- Spark源码学习1.1——DAGScheduler.scala
本文以Spark1.1.0版本为基础. 经过前一段时间的学习,基本上能够对Spark的工作流程有一个了解,但是具体的细节还是需要阅读源码,而且后续的科研过程中也肯定要修改源码的,所以最近开始Spark ...
- Spark源码学习1.6——Executor.scala
Executor.scala 一.Executor类 首先判断本地性,获取slaves的host name(不是IP或者host: port),匹配运行环境为集群或者本地.如果不是本地执行,需要启动一 ...
- Spark源码学习1.8——ShuffleBlockManager.scala
shuffleBlockManager继承于Logging,参数为blockManager和shuffleManager.shuffle文件有三个特性:shuffleId,整个shuffle stag ...
- Spark源码学习1.5——BlockManager.scala
一.BlockResult类 该类用来表示返回的匹配的block及其相关的参数.共有三个参数: data:Iterator [Any]. readMethod: DataReadMethod.Valu ...
- Spark源码学习1.3——TaskSetManager.scala
TaskSetManager.scala TaskSet是指一系列被提交的task,一般是代表特定的stage中丢失的partition.TaskSetManager通过一个TaskScheduler ...
- Spark源码学习1.7——Master.scala
master第一步是加载系统定义的环境变量,如worker的超时时间.系统保留的Application数目等:第二步,加载worker的信 息,地址.id等:第三步,加载Application的信息, ...
- Spark源码学习2
转自:http://www.cnblogs.com/hseagle/p/3673123.html 在源码阅读时,需要重点把握以下两大主线. 静态view 即 RDD, transformation a ...
- spark源码学习-withScope
withScope是最近的发现版中新增加的一个模块,它是用来做DAG可视化的(DAG visualization on SparkUI) 以前的sparkUI中只有stage的执行情况,也就是说我们 ...
随机推荐
- Jquery实现账单全部选中和部分选中管理
在做购物车系统是我们往往会遇到这样一个需求,在点击全选框时我们要将全部的单个账单都选中;在单个选中账单时,如果账单全部被选中则需要全选框处于选中状态,若没有全部被选中则全选框处于没选中状态; 以下是在 ...
- Android View 简析
基于android 4.4上源码分析: setContentView流程: getwindow() ->setContentView() -> installDecor() -> a ...
- nginx 域名绑定端
server { listen 80; server_name taqing.me www.taqing.me; ##,绑定域名 location / { proxy_pass http://127. ...
- css学习笔记 10
一个竖向导航,假设ul宽度为100px,li不浮动,在各浏览器下都会正常显示,当li左浮动时,在标准浏览器下,li会横向排列,如果第一行的剩余空间的宽度不够下一个li,下一个li自动换到第二行,第二行 ...
- 四种主要网络IO虚拟化模型
本文主要为大家简要介绍VMware.Redhat.Citrix.Microsoft主要虚拟化厂商使用的4种主要的虚拟化IO模型 (emulation.para-virtualization.pass- ...
- 委托的例子,from C# advanced program
class BubbleSorter { static public void Sort<T>(IList<T> sortArray, Func<T, T, bool&g ...
- 《精通C#》第十六章-动态类型和动态语言运行时-第一节至第四节
在.Net4.0中引入了一个关键字dynamic,这是一个动态类型关键字.Net中还有一个关键字是var,这是一个隐式类型,可以定义本地变量,此时var所代表的实际的数据类型有编译器在初次分配时决定, ...
- 20169212《Linux内核原理与分析》第五周作业
关于linux内核源码 两个很关键的目录,一个是arch(architecture),支持不同cpu体系架构的源代码,其中最重要的就是x86(一般把x86留下,其他的目录删掉),另一个是init(其中 ...
- MEF的学习笔记
为什么要使用MEF 在商业应用软件开发过程中,对于各个软件项目,都需要建立相应的系统框架,为了更好的规范系统的开发,提高生产效率,应该在公司级别制定相应的API标准.这些API标准将站在系统架构层次, ...
- 生活life
1.想办法努力挣钱,而不是如何省钱. 2.再愤怒也不大吼大叫,保持冷静. 3.喜欢的东西自己努力赚钱买. 4.少说多做,能站不坐,适当运动. 5.不要认为找个有钱男人就什么都有了.世界上年轻的女孩子, ...