如何剖析具体实现


这篇文章将为大家详细讲解有关如何剖析具体实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、概述
这里我们从源码角度剖析BypassMergeSortShuffleWriter实现策略的原理和具体的实现细节。
BypassMergeSortShuffleWriter具体的实现都在对应类的write()函数中,我们直接看源码进行剖析1.先看构造函数初始化
2.再看write()函数,源码如下:上面代码的大体思路如下:
a.确定分区数,然后为每个分区创建DiskBlockObjectWriter和临时文件b.循环将record通过Partitioner进行分区,并写入对应分区临时文件c.将分区数据刷到磁盘d.根据shuffleId和mapId,构建ShuffleDataBlockId,创建合并文件data和合并文件的临时文件,文件格式为:shuffle_{shuffleId}_{mapId}_{reduceId}.datae.将分区文件合并到一个总的临时文件,合并后会重命名为最终输出文件名,并返回一个对应分区文件长度的数组f.创建索引文件index和索引临时文件,每一个分区的长度和offse 香港云主机t写入索引文件等;并且重命名临时data文件和临时index文件g.将一些信息封装到MapStatus返回存在问题:这种Writer会为每个分区创建一个临时文件,如果分区过多时,会创建很多的output输出流和临时文件对象,占用资源过多,性能会下降。重点关注:参数:spark.shuffle.file.buffer 默认值32k默认情况下,shuffle的map task,输出到磁盘文件的时候,统一都会先写入到每个task自己关联的一个内存缓冲区,每一次当内存缓冲区满溢后,然后才会进行溢写到磁盘中。如果内存冲突可适当调大这个参数,从而减少shuffle write过程中溢写磁盘文件的次数,也就可以减少磁盘IO次数,进而提升性能。在实践中发现,合理调节该参数,性能会有1%~5%的提升。关于如何剖析具体实现就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: C++如何实现最大矩形

这篇文章主要讲解了“C++如何实现最大矩形”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++如何实现最大矩形”吧!Example:Input:[[“1″,”0″,”1″,”0″,”0”],[“1″,”0”,”…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/15 09:50
下一篇 08/15 09:51

相关推荐