MapReduce (Shuffle,partition,combiner,Spill )

2024-05-08 19:38

本文主要是介绍MapReduce (Shuffle,partition,combiner,Spill ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、shuffle介绍

1 、shuffle就是洗牌弄乱的意思,shuffle代表map 输出 到reduce 的整个过程,他解决的问题就是如何将多个map task的输出,作为多个reduce task 的输入,下面就来看看shffler是如何对map的输出结果排序,处理,分组成reduce的输入的。

2 、shuffle和partition和combiner的关系是包含关系,shuffle过程包含partition

二、shuffle的整个流程

2.1 介绍

1 shuffle整个过程可以分两部分,一部分是在map端,一部分是在reduce端

2 当我们跑mapreduce时候,maptask和reducetask大部分情况是分布在不同的节点上的,这时候reducetask执行需要通过网络去copy其他节点上的maptask任务的结果,这对网络的要求是非常大的,所以我们期望shuffle过程目标是

1 将map的输出完整的传输达到reduce端

2 尽可能减少传输到来消耗

3 降低磁盘I/O

2.2 shuffle过程

Map端的 Shuffle 阶段

2.2.1输入数据

          数据分片(默认128M,HDFS一个块的大小),MAP处理(文章中每个词出现一次记录一次,key:词,value:1),MAP输出会先输出到内存上。

2.2.2partition函数

          在写入缓存前,会调用partition函数,partition会根据key或value及reduce的数量来决定当前的这对输出数据最终应该交由哪个reduce task处理分组,最后写到硬盘上。(partition过程后面会详细说)

2.2.3 Spill 阶段

            每个 Map 任务都有一个用来写入输出数据的循环内存缓冲区(默认大小为 100MB),当缓冲区中的数据量达到一个特定阈值(默认是 80%)时,系统将会启动一个后台线程,把缓冲 区中的内容写到磁盘中(即 Spill 阶段)。在写磁盘过程中,Map 输出继续被写到缓冲区中,但如果在此期间缓冲区被填满,那么 Map 任务就会阻塞直到写磁盘过程完成。

2.2.3combiner 操作

          可有可无,combiner 是一种特殊的reduce,他的作用在于优化map和reduce之间的数据传输数量,比如查文章中单词出现的次数,mao执行完了都是一个词,编辑标记一个1,3combiner 操作可以把同样的词进行累加,map输出数据根据分区排序完成后,在写入文件之前会执行一次combine操作(前提是作业中设置了这个操作);

2.2.5 Sort 阶段

          多路归并排序 虽然已经partition函数进行分组,但是还需要对输出内容进行排序,方便后面处理

2.2.5 copy阶段

          map任务执行完成, 写入文件结束后Reduce任务就会来复制任务需要的数据,在 TaskTracker 的本地磁盘上的数据会被多个Reduce任务复制(是哪个任务就数据就复制哪一块,partition任务已经分好

Reduce 端的 Shuffle 阶段

2.2.7 Merge 阶段

        将 Map 端复制过来的数据先放入内存缓冲区中,Merge 有 3 种形式,分别是内存到内存,内存到磁盘,磁盘到磁盘。默认情况下,第一种形式不启用,第二种形式一直在运行(Spill 阶段),直到结束,第三种形式生成最终的文件(Merge 阶段)。

2.2.8 Reduce 阶段

        最终文件可能存在于磁盘中,也可能存在于内存中,但是默认情况下是位于磁盘中的。当 Reduce 的输入文件已定,整个 Shuffle 阶段就结束了,然后就是 Reduce 执行,把结果放到 HDFS 中(Reduce 阶段)。

2.3 partition过程

2.2.2已经简单介绍了,partition其实就确认数据应该被分到哪个reduce上,那partition是怎么分的呢?默认的算法which reducer=(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks

key.hashCode() & Integer.MAX_VALUE    &运算避免出现负值,然后对结果进行取余。

当然也可以extends Partitioner自定义partition函数

2.4combiner 过程

为了减少优化网络传输,在写入文件之前会执行一次combine操作,打个比方,统计文章单词出现的次数。Map 执行完了之后是每个词记录一次,例如:key: hi   value:1   ,这时候hi这个次如果出现多次占用空间就比较大,combine操作可以汇总这些词的词数 ,最后如果有100个hi ,汇总后就是key: hi   value:100 大大减少了网络的传输。

 

这篇关于MapReduce (Shuffle,partition,combiner,Spill )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971253

相关文章

【Hadoop|MapReduce篇】MapReduce概述

1. MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2. MapReduce优缺点 2.1 优点 MapReduce易于编程 它简单的实现一些接口,就可以完成一个分布式

MapReduce算法 – 反转排序(Order Inversion)

译者注:在刚开始翻译的时候,我将Order Inversion按照字面意思翻译成“反序”或者“倒序”,但是翻译完整篇文章之后,我感觉到,将Order Inversion翻译成反序模式是不恰当的,根据本文的内容,很显然,Inversion并非是将顺序倒排的意思,而是如同Spring的IOC一样,表明的是一种控制权的反转。Spring将对象的实例化责任从业务代码反转给了框架,而在本文的模式中,在map

圆形缓冲区-MapReduce中的

这篇文章来自一个读者在面试过程中的一个问题,Hadoop在shuffle过程中使用了一个数据结构-环形缓冲区。 环形队列是在实际编程极为有用的数据结构,它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。 因为有简单高效的原因,甚至在硬件都实现了环形队列。 环形队列广泛用于网络数据收发,和不同程序间数据交换(比如内核与应用

Spark学习之路 (十)SparkCore的调优之Shuffle调优

《2021年最新版大数据面试题全面开启更新》 欢迎关注github《大数据成神之路》 目录 一、概述 二、shuffle的定义 三、ShuffleManager发展概述 四、HashShuffleManager的运行原理 4.1 未经优化的HashShuffleManager 4.2 优化后的HashShuffleManager 五、SortShuffleManager运行原理 5.1 普通

【硬刚Hadoop】HADOOP MAPREDUCE(11):Join应用

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 Reduce Join Map端的主要工作:为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。 Reduce端的主要工作:在Reduce端以连接字段作为key的分组已经完成,我们只需要在

【硬刚Hadoop】HADOOP MAPREDUCE(10):OutputFormat数据输出

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 OutputFormat接口实现类 2 自定义OutputFormat 3 自定义OutputFormat案例实操 1.需求 过滤输入的log日志,包含atguigu的网站输出到e:/atguigu.log,不包含atguigu的网站输出到e:/o

【硬刚Hadoop】HADOOP MAPREDUCE(9):MapReduce内核源码解析(2)ReduceTask工作机制

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1.ReduceTask工作机制 ReduceTask工作机制,如图4-19所示。 图4-19 ReduceTask工作机制 (1)Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中

【硬刚Hadoop】HADOOP MAPREDUCE(8):MapReduce内核源码解析(1)MapTask工作机制

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 MapTask工作机制 MapTask工作机制如图4-12所示。 图4-12  MapTask工作机制 (1)Read阶段:MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value。 (2)Map阶段:该节点主要是将解析出

【硬刚Hadoop】HADOOP MAPREDUCE(7):Shuffle机制(3)

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 7 Combiner合并 (6)自定义Combiner实现步骤 (a)自定义一个Combiner继承Reducer,重写Reduce方法 public class WordcountCombiner extends Reducer<Text, IntWritable, Text,

【硬刚Hadoop】HADOOP MAPREDUCE(6):Shuffle机制(2)

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 4 WritableComparable排序 1.排序的分类 2.自定义排序WritableComparable (1)原理分析 bean对象做为key传输,需要实现WritableComp