没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
“戏”说spark---spark Shuffle详解(一)
Shuffle简介
Shuffle描述着数据从map task输出到reduce task输入的这段过程。shuffle是连接Map和Reduce之
间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整
个程序的性能和吞吐量。因为在分布式情况下,reduce task需要跨节点去拉取其它节点上的map task
结果。这一过程将会产生网络资源消耗和内存,磁盘IO的消耗。通常shuffle分为两部分:Map阶段的
数据准备和Reduce阶段的数据拷贝处理。一般将在map端的Shuffle称之为Shuffle Write,在Reduce
端的Shuffle称之为Shuffle Read.
Apache Spark 的 Shuffle 过程与 Apache Hadoop 的 Shuffle 过程有着诸多类似,一些概念可直接
套用,例如,Shuffle 过程中,提供数据的一端,被称作 Map 端,Map 端每个生成数据的任务称为
Mapper,对应的,接收数据的一端,被称作 Reduce 端,Reduce 端每个拉取数据的任务称为
Reducer,Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应
的 Reducer 的过程。
1)input, 根据split输入数据,运行map任务;
2)patition, 每个map task都有一个内存缓冲区,存储着map的输出结果;
3)spill, 当缓冲区快满的时候需要将缓冲区的数据以临时文件的方式存放到磁盘;
4)merge, 当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并,生成最终
的正式输出文件,然后等待reduce task来拉数据。
reduce task在执行之前的工作就是不断地拉取当前job里每个map task的最终结果,然后对从不同地
方拉取过来的数据不断地做merge,也最终形成一个文件作为reduce task的输入文件。
Hadoop MapReduce Shuffle
map端的Shuffle简述:
reduce 端的Shuffle简述:
1) Copy过程,拉取数据。
2)Merge阶段,合并拉取来的小文件
3)Reducer计算
4)Output输出计算结果
我们可以将Shuffle的过程以数据流的方式呈现:
图形象的描述了MR数据流动的整个过程:
图解释:
map端,有4个map;Reduce端,有3个reduce。4个map 也就是4个JVM,每个JVM处理一个数据
分片(split1~split4),每个map产生一个map输出文件,但是每个map都为后面的reduce产生了3
部分数据(分别用红1、绿2、蓝3标识),也就是说每个输出的map文件都包含了3部分数据。正如前
面第二节所述:
mapper运行后,通过Partitioner接口,根据key或value及reduce的数量来决定当前map的输出数据
最终应该交由哪个reduce task处理.Reduce端一共有3个reduce,去前面的4个map的输出结果中抓取
属于自己的数据。
关于Hadoop MR的Shuffle的详细请查看博客:“戏”说hadoop--hadoop MapReduce Shuffle过
程详解
Spark Shuffle
在“戏”说Spark-Spark核心-Stage划分及Pipline的计算模式一文中,我们知道stage中是高效快速的
pipline的计算模式,宽依赖之间会划分stage,而Stage之间就是Shuffle,如图中的stage0,stage1
和stage3之间就会产生Shuffle。
在Spark的中,负责shuffle过程的执行、计算和处理的组件主要就是ShuffleManager,也即shuffle管
理器。ShuffleManager随着Spark的发展有两种实现的方式,分别为HashShuffleManager和
SortShuffleManager,因此spark的Shuffle有Hash Shuffle和Sort Shuffle两种
Spark Shuffle发展史
在Spark的版本的发展,ShuffleManager在不断迭代,变得越来越先进。
在Spark 1.2以前,默认的shuffle计算引擎是HashShuffleManager。该ShuffleManager而
HashShuffleManager有着一个非常严重的弊端,就是会产生大量的中间磁盘文件,进而由大量的磁
盘IO操作影响了性能。因此在Spark 1.2以后的版本中,默认的ShuffleManager改成了
SortShuffleManager。SortShuffleManager相较于HashShuffleManager来说,有了一定的改进。
主要就在于,每个Task在进行shuffle操作时,虽然也会产生较多的临时磁盘文件,但是最后会将所有
的临时文件合并(merge)成一个磁盘文件,因此每个Task就只有一个磁盘文件。在下一个stage的
shuffle read task拉取自己的数据时,只要根据索引读取每个磁盘文件中的部分数据即可。
HashShuffleManager的运行机制主要分成两种,一种是普通运行机制,另一种是合并的运行机制。
合并机制主要是通过复用buffer来优化Shuffle过程中产生的小文件的数量。Hash shuffle是不具有排
序的Shuffle。
Hash shuffle
普通机制的Hash shuffle
剩余11页未读,继续阅读
资源评论
Ashley_JIANG
- 粉丝: 6
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功