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笔记一

    一.Oracle简介 1.Oracle属于关系型数据库,是一款可以在Client/Server模式下运行的RDBMS产品.2009年,Oracle公司收购SUN. 2.Oracle是对象关系型数据库管 ...

  2. express+gulp构建项目(四)env环境变量

    这里的文件的作用是负责设置env环境变量和日志. index.js try { require('dotenv').load({silent: true}); //dotenv从一个.env文件中读取 ...

  3. JAVA语法02之课程问题解决

    (一)示例程序+运行结果: ①EnumTest.java public class EnumTest { public static void main(String[] args) { Size s ...

  4. 突破php的imagecopyresampled 和imagecopyresized 实现图片马JPG

    编辑器加载中...之前有人发布了 利用PNG 图片上述压缩函数的方法 原理利用 PNG的结构IDAT chunks填充一句话webshell,并进行一套取模运算 详见: https://www.ido ...

  5. php curl用法

    curl 是使用URL语法的传送文件工具,支持FTP.FTPS.HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP.curl 支持SSL证书.HTTP POS ...

  6. 使用ef查询有缓存的问题

    使用mvc ef更新后数据之后刷新页面,发现页面的数据没有变,而数据库的数据更新了,找了一点资料,是因为ef6有个缓存机制: Repository 类: //此方法查询结果有缓存 public Lis ...

  7. 使用 AngularJS & NodeJS 实现基于token 的认证应用(转)

    认证是任何 web 应用中不可或缺的一部分.在这个教程中,我们会讨论基于 token 的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构 ...

  8. Bootstrap 表单

    表单布局 Bootstrap 提供了下列类型的表单布局: 垂直表单(默认) 内联表单 水平表单 垂直或基本表单 基本的表单结构是 Bootstrap 自带的,个别的表单控件自动接收一些全局样式.下面列 ...

  9. github使用

    1.首先登录到https://github.com注册Github帐号,并且创建一个repository. 例如:注册的github帐号名为whu-zhangmin,创建的repository名称为w ...

  10. CheckLogin

    # encoding: utf-8 # Creator:耿亚月 Creation time:2017-1-1 # Modifier:耿亚月 Modification time:2017-1-2 #fi ...