MapReduce确保每个reducer的输入都是按键排序的,系统执行排序的过程称为shuffle。shuffle阶段主要包括map阶段的combine、group、sort、partition以及reducer阶段的合并排序。
本教程操作环境:windows7系统,Dell G3电脑。
MapReduce确保每个reducer的输入都是按键排序的,系统执行排序的过程称为shuffle。我们可以理解为map产生输出到reduce的消化输入的整个工程。
Map端:每个mapperTask有一个环形内存缓冲区,用于存储map任务的输出,一旦达到阈值,一个后台线程把内容写到磁盘的指定目录下的新建的一个溢出写文件,写磁盘前要经过partition、sort、Combiner。等最后记录写完,合并全部溢出写文件为一个分区且排序的文件。
Reduce端:可以分为复制阶段、排序阶段、reduce阶段
复制阶段:map输出文件位于运行map任务的tasktracker的本地磁盘上,reduce通过http的方式获取输出文件的分区,tasktracker为分区文件运行reduce任务,只要有一个map任务完成,reduce任务就开始复制输出。
排序阶段:更恰当的说法是合并阶段,因为排序是在map端进行的。这个阶段将合并map输出,维持其顺序排序,循环进行。
最后阶段就是reduce阶段,对已排序输出中的每个键调用reduce函数,此阶段的输出直接写到输出文件系统,一般为hdfs。、
Shuffle阶段说明
shuffle阶段主要包括map阶段的combine、group、sort、partition以及reducer阶段的合并排序。Map阶段通过shuffle后会将输出数据按照reduce的分区分文件的保存,文件内容是按照定义的sort进行排序好的。Map阶段完成后会通知ApplicationMaster,然后AM会通知Reduce进行数据的拉取,在拉取过程中进行reduce端的shuffle过程。
注意:Map阶段的输出数据是存在运行Map节点的磁盘上,是个临时文件,不是存在HDFS上,在Reduce拉取数据后,那个临时文件会删除,若是存在hdfs上,会造成存储空间的浪费(会产生三个副本)。
-
用户自定义Combiner
Combiner可以减少Map阶段的中间输出结果数,降低网络开销。默认情况下是没有Combiner的。用户自定义的Combiner要求是Reducer的子类,以Map的输出
作为Combiner的输入 和输出 ,也就是说Combiner的输入和输出必须是一样的。 可以通过job.setCombinerClass设置combiner的处理类,MapReduce框架不保证一定会调用该类的方法。
注意:如果reduce的输入和输出一样,则可以直接用reduce类作为combiner
-
用户自定义Partitioner
Partitioner是用于确定map输出的
对应的处理reducer是那个节点。默认MapReduce任务reduce个数为1个,此时Partitioner其实没有什么效果,但是当我们将reduce个数修改为多个的时候,partitioner就会决定key所对应reduce的节点序号(从0开始)。 可以通过job.setPartitionerClass方法指定Partitioner类,默认情况下使用HashPartitioner(默认调用key的hashCode方法)。
-
用户自定义Group
GroupingComparator是用于将Map输出的
进行分组组合成 >的关键类,直白来讲就是用于确定key1和key2是否属于同一组,如果是同一组,就将map的输出value进行组合。 要求我们自定义的类实现自接口RawComparator,可以通过job.setGroupingComparatorClass方法指定比较类。默认情况下使用WritableComparator,但是最终调用key的compareTo方法进行比较。
-
用户自定义Sort
SortComparator是用于将Map输出的
进行key排序的关键类, 直白来讲就是用于确定key1所属组和key2所属组那个在前,那个在后。 要求我们自定义的类实现自接口RawComparator,可以通过job.setSortComparatorClass方法指定比较类。默认情况下使用WritableComparator,但是最终调用key的compareTo方法进行比较。
-
用户自定义Reducer的Shuffle
在reduce端拉取map的输出数据的时候,会进行shuffle(合并排序),MapReduce框架以插件模式提供了一个自定义的方式,我们可以通过实现接口ShuffleConsumerPlugin,并指定参数mapreduce.job.reduce.shuffle.consumer.plugin.class来指定自定义的shuffle规则,但是一般情况下,直接采用默认的类org.apache.hadoop.mapreduce.task.reduce.Shuffle。
更多编程相关知识,请访问:编程视频!!
以上是系统执行排序的过程称为什么的详细内容。更多信息请关注PHP中文网其他相关文章!

Java错误:Hadoop错误,如何处理和避免当使用Hadoop处理大数据时,常常会遇到一些Java异常错误,这些错误可能会影响任务的执行,导致数据处理失败。本文将介绍一些常见的Hadoop错误,并提供处理和避免这些错误的方法。Java.lang.OutOfMemoryErrorOutOfMemoryError是Java虚拟机内存不足的错误。当Hadoop任

Java利用Collections类的shuffle()函数打乱集合中元素的顺序在Java编程语言中,Collections类是一个工具类,提供了各种静态方法,用于操作集合。其中之一是shuffle()函数,它可以用来打乱集合中元素的顺序。本篇文章将演示如何使用该函数,并提供相应的代码示例。首先,我们需要导入java.util包中的Collections类,

随着大数据时代的到来,数据处理和存储变得越来越重要,如何高效地管理和分析大量的数据也成为企业面临的挑战。Hadoop和HBase作为Apache基金会的两个项目,为大数据存储和分析提供了一种解决方案。本文将介绍如何在Beego中使用Hadoop和HBase进行大数据存储和查询。一、Hadoop和HBase简介Hadoop是一个开源的分布式存储和计算系统,它可

随着数据量的不断增大,传统的数据处理方式已经无法处理大数据时代带来的挑战。Hadoop是开源的分布式计算框架,它通过分布式存储和处理大量的数据,解决了单节点服务器在大数据处理中带来的性能瓶颈问题。PHP是一种脚本语言,广泛应用于Web开发,而且具有快速开发、易于维护等优点。本文将介绍如何使用PHP和Hadoop进行大数据处理。什么是HadoopHadoop是

Java大数据技术栈:了解Java在大数据领域的应用,如Hadoop、Spark、Kafka等随着数据量不断增加,大数据技术成为了当今互联网时代的热门话题。在大数据领域,我们常常听到Hadoop、Spark、Kafka等技术的名字。这些技术起到了至关重要的作用,而Java作为一门广泛应用的编程语言,也在大数据领域发挥着巨大的作用。本文将重点介绍Java在大

PHP中有以下函数可以随机洗牌数组:shuffle()直接改变数组元素顺序。array_rand()返回随机键,可根据键重新排列数组顺序。

如何使用PhotoShuffle在iPhone上自动更改墙纸在iOS16更新中,您可以使用照片随机播放功能应用在您喜欢的时间间隔内自动更改的壁纸。虽然其功能保持不变,但可以通过两种不同的方式使用此功能——一种使用特色照片,另一种使用您从图库中手动选择的照片。当直接从锁定屏幕或使用“设置”应用程序应用壁纸时,可以访问这两个选项。应用新壁纸的最简单方法是从锁定屏幕。首先,使用FaceID解锁手机,但先不要转到主屏幕。为此,只需按下侧边按钮,将您的脸对着iPhone,然后解锁锁定屏幕。

一:安装JDK1.执行以下命令,下载JDK1.8安装包。wget--no-check-certificatehttps://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz2.执行以下命令,解压下载的JDK1.8安装包。tar-zxvfjdk-8u151-linux-x64.tar.gz3.移动并重命名JDK包。mvjdk1.8.0_151//usr/java84.配置Java环境变量。echo'

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

Dreamweaver Mac版
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

记事本++7.3.1
好用且免费的代码编辑器