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. ATC空管系统的实时控制软件系统分析

    什么是ATC空管系统? 空中交通管制的目的是对航空器的空中活动进行有效的管理,维护空中交通秩序,保障空中交通畅通,保证飞行安全和提高飞行效率,防止航空器相撞,防止机场及其附近空域的航空器同障碍物相撞. ...

  2. CSS3 选择器——基本选择器

    CSS的选择器,我想大家并不会陌生吧,因为天天在使用,但对于CSS3的选择器,要运用的灵活到位,我想对很多朋友还是一定的难度,特别是CSS3中的:nth选择器.那么从现在开始我们先丢开他们版本的区别, ...

  3. 卸载mysql

    如果你的电脑里装过MySQL,想再重新安装MySQL的时候可能就会因为前一版本卸载不彻底而出现错误.最常见的就是安装好后设置参数的最后一步验证时,会在Execute configurattion步骤中 ...

  4. 收集C#常用类:对图片的处理操作

    using System; using System.Collections; using System.IO; using System.Drawing; using System.Drawing. ...

  5. python中在同一个位置输出数据

    import sys, time def print_data(): for i in range(5): sys.stdout.write(str(i) + '\r') time.sleep(1) ...

  6. 关于BP网络的一些总结

    背景 前段时间,用过一些模型如vgg,lexnet,用于做监督学习训练,顺带深入的学习了一下相关模型的结构&原理,对于它的反向传播算法记忆比较深刻, 就自己的理解来描述一下BP网络. 关于BP ...

  7. Oracle一个事务中的Insert和Update执行顺序

    今天碰到了一个奇怪的问题,是关于Oracle一个事务中的Insert和Update语句的执行顺序的问题. 首先详细说明下整个过程: 有三张表:A,B,C,Java代码中有一段代码是先在表A中插入一条数 ...

  8. jqueryUI 插件

    1,拖拽插件  draggable 拖拽插件draggable的功能是拖动被绑定的元素, 当这个jqueryUI插件与元素绑定后,可以通过调用draggable()方法,实现何种拖拽元素的效果 $(s ...

  9. guava学习--FutureFallback

    FutureFallback提供一个Future的备用来替代之前失败的Future,常被用来作为Future的备份或者默认的值. @Testpublic void testFuturesFallbac ...

  10. PDF 补丁丁 0.5.0.1816 测试版发布:新界面新体验

    新的测试版简化了界面,操作更直观,同时修复了旧版本的一些错误. 欢迎各位下载测试文件试用,并提出宝贵意见.