必威体育Betway必威体育官网
当前位置:首页 > IT技术

shuffle流程理解

时间:2019-10-29 20:14:38来源:IT技术作者:seo实验室小编阅读:56次「手机版」
 

shuffle什么意思

 shuffle流程理解

什么是shuffle流程?

mapreduce确保每个reducer的输入都是按键排序的。系统执行排序,将map输出作为输入传给reducer的过程称为shuffle.

简单来说就是:从map输出开始,到reduce输入之前这个阶段。

如下图所示:

 

如图所示大致分为5个阶段:

1.Collect阶段 2.Spill阶段 3.Merge阶段 (属于Map端)

4.Fetch阶段 5.Merge阶段(属于reduce端)

1.Collect阶段:

每个map任务的结果输出到缓冲区中(默认大小为100M的环形缓冲区)

备注:每个map任务都有一个环形内存缓冲区用于存储任务输出。在默认情况下,缓冲区的大小为100MB,

这个值可以通过mapreduce.task.io.sort.mb属性来调整。一旦缓冲内容值达到阀值(mapreduce.map.sort.spill.percent,默认为0.80,或80%)

一个后台线程便开始把内容从内存溢写(spill)到磁盘。如下所诉Spill阶段

2.Spill阶段:

(在写入磁盘之前,线程会在内存进行分区;在每个分区中进行排序。如果配置了combiner函数,还会将有相同分区号的key的数据进行排序,使得map输出更加紧凑)

当缓冲区内存中的数据达到阀值的时候,就会将数据溢写到本地磁盘

溢写线程启动,锁定这百分之80的内存,执行溢写过程。

map任务还可以往这剩下的20M内存中写),产生溢写文件。但如果在此期间缓冲区被填满(剩下的百分之20),map会被阻塞直到写磁盘过程完成。将将缓冲区的内容写道mapreduce.cluster.local.dir属性指定的目录中。

3.Merge阶段

在map任务写完最后一个输出记录后,会有几个溢出文件被合并成一个已分区且已排序的输出文件。

将同一分区的数据聚集,把所有溢出写的临时文件进行一次合并

以确保一个MapTask最终只产生一个中间数据文件。

>配置属性mapreduce.task.io.sort.factor控制一次最多能合并多少个文件,默认值是10.

4.Fetch阶段:

reduce端的线程通过Http协议复制当前reduceTask要处理的分区数据,先复制到内存中的缓存中,

根据缓存大小来决定是否产生文件,如果map输出小,会被复制到reduce任务JVM内存,

当内存的缓存区达到一定的阀值时,就会将数据写到磁盘上

5.Merge阶段:

reduce端会合并多个文件,在对数据进行合并的同时,会进行排序操作,

由于Map阶段已经对数据进行了布局的排序,reduce任务只需保证复制的整体性和有效性即可

最后一次合并不产生文件,直接在内存中输入reduce

文章最后发布于: 2019-06-02 22:12:24

相关阅读

Collections.shuffle()方法

1)static void shuffle(List<?> list)  使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的。 2)static void shuff

Shuffle介绍

一 概述 Shuffle就是对数据进行重组,由于分布式计算的特性和要求,在实现细节上更加繁琐和复杂 在MapReduce框架,Shuffle是连接Map和R

错题重练—应用Collections.shuffle()及其思考

文章目录背景一、解决过程:二、后续问题:1,shuffle方法的实现:(SHUFFLE_THRESHOLD=5)2,问题:三、其他方式出题背景 需求: 将学生做错的题,

JAVA:Collections类的shuffle()方法

JAVA中Collections类的shuffle()方法的作用是将List中的内容随机打乱顺序。[java] view plain copy print?importjava.util.Array

关于spark shuffle过程的理解

shuffle过程:由ShuffleManager负责,计算引擎HashShuffleManager(Spark 1.2)—>SortShuffleManagerspark根据shuffle类算子进行stage的

分享到:

栏目导航

推荐阅读

热门阅读