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的执行情况,也就是说我们 ...
随机推荐
- HashSet和HashMap的区别
HashSet和HashMap的区别.Java的HashSet类是由哈希表支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用 null 元素.HashSet类为基本操作提供 ...
- simpson法求积分 专题练习
[xsy1775]数值积分 题意 多组询问,求\(\int_l^r\sqrt{a(1-{x^2\over b})}dx\) 分析 double f(double x) { return sqrt(a* ...
- 【UE4+Vive】学习笔记1
16.9.10为了做房产项目,这两天开始学习Unreal Engine 4.之前一直用unity,但是视觉效果一直不满意,听说虚幻4的效果更好,就来试一试水. 1.安装UE4 参考资料一: http: ...
- Ubuntu Server 安装桌面untiy
1.安装 sudo apt-get install ubuntu-desktop sudo apt-get install unity sudo apt-get install unity-commo ...
- first Automation
//创建一个容器 CEmbWordCntrItem * pItem = NULL; CEmbWordDoc * pDoc = GetDocument(); pItem = new C ...
- Linux下面CentOS 7桌面的安装
搭建本地yum仓库的方法 http://www.cnblogs.com/lql123/p/5952788.html 1.yum grouplist #列出yum仓库里的软件组列表 2.yum grou ...
- 用 QGIS 画矢量交通路线图
一.准备工作 1.安装插件 为了方便画图,我们安装了OpenLayers,QuickOSM两个插件. 如何安装插件,度娘上都有答案.下图中打勾的部分为安装好的插件: OpenLayers提供了一些开放 ...
- Rendering Problems:android.support.v7.internal.widget.ActionBarOverlayLayout 解决方法
不知道是不是android studio安装不对的问题,每次新建项目都有这个问题. 临时解决方法是: 打开 styles.xml 在Theme.AppCompat.Light.DarkActionBa ...
- Dependency Scope
Dependency Scope <dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值: * compile,缺 ...
- python 编码
python相关:1. 设置编码:import sysreload(sys)sys.setdefaultencoding('utf-8') 开头设置: # -*- coding: utf-8 -*- ...