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
相关阅读
1)static void shuffle(List<?> list) 使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的。 2)static void shuff
一 概述 Shuffle就是对数据进行重组,由于分布式计算的特性和要求,在实现细节上更加繁琐和复杂 在MapReduce框架,Shuffle是连接Map和R
错题重练—应用Collections.shuffle()及其思考
文章目录背景一、解决过程:二、后续问题:1,shuffle方法的实现:(SHUFFLE_THRESHOLD=5)2,问题:三、其他方式出题背景 需求: 将学生做错的题,
JAVA中Collections类的shuffle()方法的作用是将List中的内容随机打乱顺序。[java] view plain copy print?importjava.util.Array
shuffle过程:由ShuffleManager负责,计算引擎HashShuffleManager(Spark 1.2)—>SortShuffleManagerspark根据shuffle类算子进行stage的