spark shuffle内在原理说明
2016-11-07 15:46
148 查看
在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。Spark作为MapReduce框架的一种实现,自然也实现了shuffle的逻辑。
下面这幅图清晰地描述了MapReduce算法的整个流程,其中shuffle phase是介于Map phase和Reduce phase之间。
概念上shuffle就是一个沟通数据连接的桥梁,那么实际上shuffle(partition)这一部分是如何实现的的呢,下面我们就以Spark为例讲一下shuffle在Spark中的实现。
首先每一个Mapper会根据Reducer的数量创建出相应的bucket,bucket的数量是M×RM×R,其中MM是Map的个数,RR是Reduce的个数。
其次Mapper产生的结果会根据设置的partition算法填充到每个bucket中去。这里的partition算法是可以自定义的,当然默认的算法是根据key哈希到不同的bucket中去。
当Reducer启动时,它会根据自己task的id和所依赖的Mapper的id从远端或是本地的block manager中取得相应的bucket作为Reducer的输入进行处理。
这里的bucket是一个抽象概念,在实现中每个bucket可以对应一个文件,可以对应文件的一部分或是其他等。
Apache Spark 的 Shuffle 过程与 Apache Hadoop 的 Shuffle 过程有着诸多类似,一些概念可直接套用,例如,Shuffle 过程中,提供数据的一端,被称作 Map 端,Map 端每个生成数据的任务称为 Mapper,对应的,接收数据的一端,被称作 Reduce 端,Reduce 端每个拉取数据的任务称为 Reducer,Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。
参考:
http://jerryshao.me/architecture/2014/01/04/spark-shuffle-detail-investigation/ https://ihainan.gitbooks.io/spark-source-code/content/section3/index.html
Shuffle
Shuffle是MapReduce框架中的一个特定的phase,介于Map phase和Reduce phase之间,当Map的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。下面这幅图清晰地描述了MapReduce算法的整个流程,其中shuffle phase是介于Map phase和Reduce phase之间。
概念上shuffle就是一个沟通数据连接的桥梁,那么实际上shuffle(partition)这一部分是如何实现的的呢,下面我们就以Spark为例讲一下shuffle在Spark中的实现。
Spark Shuffle进化史
先以图为例简单描述一下Spark中shuffle的整一个流程:首先每一个Mapper会根据Reducer的数量创建出相应的bucket,bucket的数量是M×RM×R,其中MM是Map的个数,RR是Reduce的个数。
其次Mapper产生的结果会根据设置的partition算法填充到每个bucket中去。这里的partition算法是可以自定义的,当然默认的算法是根据key哈希到不同的bucket中去。
当Reducer启动时,它会根据自己task的id和所依赖的Mapper的id从远端或是本地的block manager中取得相应的bucket作为Reducer的输入进行处理。
这里的bucket是一个抽象概念,在实现中每个bucket可以对应一个文件,可以对应文件的一部分或是其他等。
Apache Spark 的 Shuffle 过程与 Apache Hadoop 的 Shuffle 过程有着诸多类似,一些概念可直接套用,例如,Shuffle 过程中,提供数据的一端,被称作 Map 端,Map 端每个生成数据的任务称为 Mapper,对应的,接收数据的一端,被称作 Reduce 端,Reduce 端每个拉取数据的任务称为 Reducer,Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。
参考:
http://jerryshao.me/architecture/2014/01/04/spark-shuffle-detail-investigation/ https://ihainan.gitbooks.io/spark-source-code/content/section3/index.html
相关文章推荐
- spark shuffle内在原理说明
- spark shuffle内在原理说明
- HTTPS_SSL配置的步骤以及原理说明
- 抛物样条曲线的原理说明及画抛物曲线的一个类
- 编译原理动手实操:词法解析算法的一些概念说明
- 【重要】Spring在web.xml中的配置原理说明
- openfire 集群原理说明
- AjaxPro的原理简单说明
- Ajax原理详细说明
- css中float left与float right clear的原理使用说明图解
- C# LiveUpdate.exe实现文件在线更新(原理说明,使用指南一)
- 卡尔曼滤波的原理说明
- 什么是插件?什么是主题?背后的实现原理是什么?试用至少10个插件及三个主题,并说明其用途与配置过程
- iOS程序启动原理简单说明
- keepalived原理及配置段的说明
- 关于客户端自动设置可信站点以及ActiveX控件运行方式的原理说明(转)
- Java原码、反码和补码的算法,Java跨平台原理,以及JDK安装目录说明
- android实现原理说明之一_application Intent Task Activity
- 【笔记】python的sqlalchemy数据库连接池原理的说明
- Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)