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的执行情况,也就是说我们 ...
随机推荐
- Linux乱码问题解决方案
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- Numpy Study 1
Numpy 使用1 1.Numpy创建数组 import numpy as np 创建数组有以下方式: (1).arange numpy.arange([start, ]stop, [step, ]d ...
- Minimum Depth of Binary Tree [LeetCode]
Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...
- CentOS_7.2安装PHP_5.6
一.安装依赖包和开发工具: yum install vim vim-enhanced wget zip unzip telnet ntsysv compat* apr* nasm* gcc gcc* ...
- innodb log file size 配置估算以及修改
root@localhost:(none) 06:22:17>pager grep seq PAGER set to 'grep seq' root@localhost:(none) 06:30 ...
- 置信度&置信水平&置信区间
置信水平是指总体参数值落在样本统计值某一区内的概率:而置信区间是指在某一置信水平下,样本统计值与总体参数值间误差范围.置信区间越大,置信水平越高. 例如:估计某件事件完成会在10~12日之间,但这个估 ...
- MySQL 5.6查询优化器新特性的“BUG” eq_range_index_dive_limit
本文转自 http://www.imysql.cn 最近碰到一个慢SQL问题,解决过程有点小曲折,和大家分享下. SQL本身不复杂,表结构.索引也比较简单,不过个别字段存在于多个索引中. CREATE ...
- oracle date change
select to_char(sysdate,'yyyy') from dual;-----2016select to_number(to_char(sysdate,'MM'))||'月' from ...
- 手机客户端UI测试常见的测试点
1.各种分辨率下,显示正常.现市场上主流的塞班V3系统手机为240*320.320*240.WM系统主要为240*320.320*480.Android系统主要为320*480,Iphone系统为32 ...
- 网站优化之PHPCMS如何开启伪静态
做为一名网站优化方面的工作,那么选择CMS系统的时候,有良好的网站优化功能就是一个好的CMS的标准之一,而系统是否支持伪静态,则是URL优化的工作之一,而PHPCMS是一款网站优化方面做得比较成功的C ...