MapReduce的shuffle过程

本文是学习时的自我总结,用于日后温习。如有错误还望谅解,不吝赐教。

此处附上一篇个人认为写的比较好的博客,转自枝叶飞扬的博文:http://blog.sina.com.cn/s/blog_605f5b4f010188lp.html###

将Map的输出作为Reduce的输入的过程就是Shuffle了,这个是MapReduce优化的重点地方

Shuffle 过程

①   Map在内存中开启一个默认大小100MB的环形内存缓冲区用于输出

②   当缓冲区内存达到默认阈值 80% 时,Map 会启动守护进程,把内容写到磁盘上,这个过程叫做Spill。另外的20% 内存可继续写入数据,写入磁盘和写入内存互不干扰

③   如果缓存区被撑满,Map 会阻塞写入内存的操作,在写入磁盘操作完成后再继续写入内存

④   排序阶段是在写入磁盘的时候进行的,如果有Combiner,排序前会执行Combiner

⑤   每次Spill写入磁盘操作会产生溢出文件,当Map输出全部完成后,Map会合并这些文件

此处的小文件合并,是对于不同分区进行小文件合并,即同一个Map输出的所有小文件应该根据分区进行文件合并

⑥   Reduce阶段中,一个Partition对应一个Reduce作业,Reduce会根据Partition找到对应的map输出文件,进行复制操作,复制过程中Reduce会进行排序操作和合并文件操作

Shuffle 优化

①   分区:默认哈希算法分区,满足不了业务需求时需要按业务要求重写

public int getPartition(K key, V value, int numReduceTasks) {

return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;   }

②   分组:默认相同的Key在一组,如果业务要求某些不同的Key按一组来调用一次reduce(),这时需要重写

③   排序:默认按字典排序,如果业务上要求不是这样,比如要求降序或者按其它条件来排,需要重写

时间: 2024-10-28 09:46:54

MapReduce的shuffle过程的相关文章

MapReduce的Shuffle过程介绍

MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据. 为什么MapReduce计算模型需要Shuffle过程?我们都知道MapReduce计算模型一般包括两个重要的阶段:Map是映射,负责数据的过滤分发:Reduce是规约,负责数据的计算归并.Reduce的数据来源于Map,Map的输出即是Reduce

【转】mapreduce的shuffle过程

转自http://langyu.iteye.com/blog/992916 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混.前段时间在做MapReduce job 性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟.考虑到之前我在看相关资料而看不懂时很恼火,所以在这 里我尽最大的可能试着把S

MapReduce中Shuffle过程整理

MapReduce中的Shuffle过程分为Map端和Reduce端两个过程. Map端: 1.(Hash Partitioner)执行完Map函数后,根据key进行hash,并对该结果进行Reduce的数量取模(该键值对将会由某个reduce端处理)得到一个分区号. 2.(Sort Combiner)将该键值对和分区号序列化之后的字节写入到内存缓存区(大小为100M,装载因子为0.8)中,当内存缓冲区的大小超过100*0.8 = 80M的时候,将会spill(溢出):在溢出之前会在内存缓冲区中

MapReduce中shuffle过程

shuffle是MapReduce的核心,map和reduce的中间过程. Map负责过滤分发,reduce归并整理,从map输出到reduce输入就是shuffle过程. 实现的功能 分区 决定当前key交给哪个reduce处理 默认:按照key的hash值对reduce的个数取余进行分区 分组 将相同key的value合并 排序 按照key对每一个keyvalue进行排序,字典排序 过程 map端shuffle spill阶段:溢写 每一个map task处理的结果会进入环形缓冲区(内存10

【Big Data - Hadoop - MapReduce】通过腾讯shuffle部署对shuffle过程进行详解

摘要: 通过腾讯shuffle部署对shuffle过程进行详解 摘要:腾讯分布式数据仓库基于开源软件Hadoop和Hive进行构建,TDW计算引擎包括两部分:MapReduce和Spark,两者内部都包含了一个重要的过程—Shuffle.本文对Shuffle过程进行解析,并对两个计算引擎的Shuffle过程进行比较. 腾讯分布式数据仓库(Tencent distributed Data Warehouse, 简称TDW)基于开源软件Hadoop和Hive进行构建,并且根据公司数据量大.计算复杂等

MapReduce和spark的shuffle过程详解

面试常见问题,必备答案. 参考:https://blog.csdn.net/u010697988/article/details/70173104 mapReducehe和Spark之间的最大区别是前者较偏向于离线处理,而后者重视实效性,下面主要介绍mapReducehe和Spark两者的shuffle过程. MapReduce的Shuffle过程 MapReduce计算模型一般包括两个重要的阶段:Map是映射,负责数据的过滤分发:Reduce是规约,负责数据的计算归并.Reduce的数据来源于

hadoop的mapReduce和Spark的shuffle过程的详解与对比及优化

https://blog.csdn.net/u010697988/article/details/70173104 大数据的分布式计算框架目前使用的最多的就是hadoop的mapReduce和Spark,mapReducehe和Spark之间的最大区别是前者较偏向于离线处理,而后者重视实现性,下面主要介绍mapReducehe和Spark两者的shuffle过程. MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随

MapReduce中的shuffle过程

MapReduce的shuffle过程介绍 Shuffle的语义是洗牌.混洗,即把一组有一定规则的数据尽量转换成一组无规则的数据,随机性越高越好. MapReduce中的Shuffle更像是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据. 为什么MapReduce计算模型需要Shuffle过程? MapReduce计算模型一般包括两个重要的阶段: Map是映射,负责数据的过滤分发: Reduce是规约,负责数据的计算归并. Reduce的数据来源于Map,Map的输出即Redu

Spark Shuffle过程详细分析

在MapReduce中shuffle和Spark的shuffle的过程有一些区别.这里做一下具体的介绍. Mapreduce的shuffle过程图解 Spark shuffle过程图解 注意:spark shuffle过程中没有分区和排序的过程,而且存储结果存储在内存中,所以速度要比mapreduce要快很多. 先就到这里吧,图解的说明应该比较清晰了.有问题欢迎留言