shuffleBlockManager继承于Logging,参数为blockManager和shuffleManager。shuffle文件有三个特性:shuffleId,整个shuffle stage所具有的唯一Id;bucketId,输出的partition的Id;fileId,标志着这一组文件属于同一个shuffle,每个task在同一时间只有一个fileId,执行完成后fileId归还资源池。shuffle的状态由shuffleState类来描述,包含其相关的所有状态信息,包括:分配给该shuffle的fileGroup(已使用的和全部的两种);完成的mapTask的Id,这些mapTask是指shuffle所在executor上为它所需要的所有mapTask。

1、addCompleteMap():添加已经完成的、符合条件的mapTask至shuffleState。这个方法应该在基于sort的shuffle中使用,因为只有基于sort的shuffle才会在map完成后在单个文件内进行排序(并不是整个文件进行排序!)。

2、forMapTask():给定mapTask后,生成shuffleWriteGroup。map的结果写入文件,需要创建一个writers对BlockManager提供的block进行写操作。同时,在创建的shuffleWriteGroup中定义新的操作函数,releaseWriters,释放writers操作;getUnusedFileGroup,根据shuffleState获取未使用的FileGroup;newFileGroup,新建FileGroup,需要向BlockManager拉取文件信息,组成洗呢FileGroup。

3、getBlockLocation():给定shuffleBlockId,查找其物理文件所在的地址。这个方法只有在shuffle file允许consolidation时才能被使用,因为consolidation涉及到shuffle的相关文件的consolidation,必须根据shuffleBlockId查找物理文件。

4、removeShuffle()和removeShuffleBlocks():前者移除Shuffle相关的block、file和中间数据,后者不移除中间数据。

定义了一个ShuffleBlockManager的对象,该对象需要存储FileGroup所在的第一个block的Id,偏移位置等,能够快速获取Shuffle所需文件。

从MapOutputTracker到shuffleBlockManager阶段需要经过以下方面:

1、写入Block,相关文件为BlockObjectWriter.scala,负责将数据写入Block;

2、shuffle匹配Block中的数据,相关文件为BlockStoreShuffleFetcher.scala。

因此完整的路径为:

MapOutPutTracker:将Map的输出做负载均衡,因为file之间不平衡将导致文件传输的不平衡,与原来的shuffle读取file中的segment有区别。

BlockObjectWriter:将Map的输出写入block,原先的数据写入是严格区分segment然后压缩,新的方法是不用区分segment,方便解压缩数据后整个文件能够直接使用。

BlockStoreShuffleFetcher:按照shuffleId将数据块拼接到一个文件中,供worker拉取。

ShuffleBlockManager:拉取到文件后,获取相应的分块,然后进行Shuffle操作。

Spark源码学习1.8——ShuffleBlockManager.scala的更多相关文章

  1. Spark源码学习1.2——TaskSchedulerImpl.scala

    许久没有写博客了,没有太多时间,最近陆续将Spark源码的一些阅读笔记传上,接下来要修改Spark源码了. 这个类继承于TaskScheduler类,重载了TaskScheduler中的大部分方法,是 ...

  2. Spark源码学习1.1——DAGScheduler.scala

    本文以Spark1.1.0版本为基础. 经过前一段时间的学习,基本上能够对Spark的工作流程有一个了解,但是具体的细节还是需要阅读源码,而且后续的科研过程中也肯定要修改源码的,所以最近开始Spark ...

  3. Spark源码学习1.6——Executor.scala

    Executor.scala 一.Executor类 首先判断本地性,获取slaves的host name(不是IP或者host: port),匹配运行环境为集群或者本地.如果不是本地执行,需要启动一 ...

  4. Spark源码学习1.5——BlockManager.scala

    一.BlockResult类 该类用来表示返回的匹配的block及其相关的参数.共有三个参数: data:Iterator [Any]. readMethod: DataReadMethod.Valu ...

  5. Spark源码学习1.4——MapOutputTracker.scala

    相关类:MapOutputTrackerMessage,GetMapOutputStatuses extends MapPutputTrackerMessage,StopMapOutputTracke ...

  6. Spark源码学习1.3——TaskSetManager.scala

    TaskSetManager.scala TaskSet是指一系列被提交的task,一般是代表特定的stage中丢失的partition.TaskSetManager通过一个TaskScheduler ...

  7. Spark源码学习1.7——Master.scala

    master第一步是加载系统定义的环境变量,如worker的超时时间.系统保留的Application数目等:第二步,加载worker的信 息,地址.id等:第三步,加载Application的信息, ...

  8. Spark源码学习2

    转自:http://www.cnblogs.com/hseagle/p/3673123.html 在源码阅读时,需要重点把握以下两大主线. 静态view 即 RDD, transformation a ...

  9. spark源码学习-withScope

     withScope是最近的发现版中新增加的一个模块,它是用来做DAG可视化的(DAG visualization on SparkUI) 以前的sparkUI中只有stage的执行情况,也就是说我们 ...

随机推荐

  1. oracle 存储过程创建及执行简单实例

    1. 创建 CREATE OR REPLACE PROCEDURE getAplage(eNo IN NUMBER,salary OUT NUMBER) AS BEGIN SELECT AplAge ...

  2. mysql 基础篇5(mysql语法---数据)

    6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...

  3. java 计算 1到10 的 阶层的和(采用递归的方法)

    package hibernate; public class t { public static void main(String[] args) { System.out.println(jiec ...

  4. iOS TextField用法大全

    //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...

  5. simpson法求积分 专题练习

    [xsy1775]数值积分 题意 多组询问,求\(\int_l^r\sqrt{a(1-{x^2\over b})}dx\) 分析 double f(double x) { return sqrt(a* ...

  6. Java中Sting类型对象内容不可改变

    String拥有一个特殊点叫:String对象的内容不可改变!   在调用诸如String对象的replace()等方法时,不是在原Sting对象的基础上改变对象内容,而是创建了一个新的String对 ...

  7. SpringMVC文件上传注意事项

    简介 我在使用 idea 上传文件时遇到一些问题,费了好些时间,最后还是的队友来帮忙. 问题出现在没有熟练使用 IDE,采用 SpringMVC 上传文件主要注意几个事项. 1. 配置 bean 在 ...

  8. 缺少wlanapi.dll文件问题修复

    我在下载百度云盘的时候碰到了一个问题,缺少wlanapi.dll文件.下面贴出解决办法 第一步 http://d.apktop.cn/p/soft_134.html   下载wlanapi.dll 第 ...

  9. Java循环删除集合多个元素的正确打开方式

    首先说下不正确的打开方式: 第一:使用for循环删除集合的元素,示例代码如下 ArrayList<String> list = new ArrayList<String>(Ar ...

  10. intent参数的回传

    1. public class MainActivity extends Activity { private EditText editText1, editText2, editText3; pr ...