`
samuschen
  • 浏览: 397857 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

混洗和排序

阅读更多


在mapreduce过程中,map输出的结果默认是按照key进行排序的,这个排序的过程加上与将map的输出结果传送到reducer作为输入的过程统称为混洗。理解混洗的过程对于理解整个hadoop很有帮助,书中也提到混洗就是hadoop发挥它威力的地方。

1. map side:
map函数执行后会不断的产生结果,这些结果不是简单的写入磁盘的。每个map任务都有一个循环队列,map输出结果首先会存放在队列中,当队列 中存放的内容超过一个门限值的时候(通过io.sort.spill.percent设置,默认为0.8, 80%),一个后台线程将队列中的内容写到磁盘中,此时map结果的写入到队列的过程并没有停止,当队列慢了以后,map现成会被阻塞直到队列中所有的数 据都写入到磁盘。

在队列的内容被写入磁盘之前,线程首先将数据进行分组,分组的自然是按照最终会传送到哪个reducer进行。对于每个组,线程会对组中的数据按key排序,如果声明了combiner函数,在此时调用,然后将结果写入到一个文件中。

每次队列达到门限值的时候,都会产生一个这样的文件,文件达到一定数目或map任务要结束的时候,这些文件会merge成一个已经分组的有序的文 件,如果声明了combiner函数,并且至少有三个这样的中间文件进行merge,就会调用此combiner。最终将这个已分区的有序的文件写入磁盘 中。

2. reduce side:
在reduce side,混洗分为三个阶段:拷贝阶段、排序(归并)阶段、reduce阶段
reduce task默认有5个线程来拷贝已完成的map任务的相应分区。当map任务完成并将最终的那个文件写入到磁盘后,拷贝就会开始,reduce task不会等所有的map task都完成,而是有map task完成后,拷贝阶段就开始。reduce task将map task的结果通过http协议传送到队列中,当超过队列规定的容量或者已经获得从map task结果的数目达到门限值,就开始将这些数据写入磁盘中。

当所有的map task的结果都拷贝结束后,reduce task进入排序(归并)阶段,这个阶段会按照设置的归并因子来进行归并,比如有50个map结果,归并因子是10,则会归并5次,每次将10个文件归并为一个文件。

进行一次归并后,便进入到reduce阶段,将上阶段生成的多个文件作为reduce的输入,进行reduce操作,获得的结果进行最后一个归并,得到最终结果并将结果写入到HDFS中。

至此整个mapreduce的执行过程结束了,整个过程书上的图描述的很清楚:


我们可以优化混洗的过程来优化整个job的性能。在map side,我们应该尽量避免map的结果不断的写入到磁盘,可以提高io.sort.mb来增加循环队列的容量;在reduce side,应尽量保证中间数据都在内存中,我们可以设置接受map结果的门限值为0和设置缓冲区溢出百分比为100%来获得最佳性能。

分享到:
评论

相关推荐

    反-逆混洗光电混合循环排序网

    排序网的互连级采用自由空间光学反-逆混洗(Comega)互连, 比较交换节点列阵采用硅互补金属-氧化物-半导体-自由光效应器件(CMOS-SEED)光电混合集成电路来实现。 由于反-逆混洗多级网络各互连级完全相同, 该排序网络...

    论文研究 - 一副纸牌的渐进随机化:Riffle Shuffle的实验测试和统计分析

    要随机分配最初订购的一副纸牌需要多少次混洗的问题是一个困扰着数学家,科学家和公众的问题。 解决该问题的两种主要理论方法不同,每种方法在定义随机性的方式上有所不同,导致统计上不同的洗牌阈值数量。 本文针对...

    ggnn.tensorflow:选通图神经网络的Tensorflow实现用于源代码分类-tensorflow source code

    存储桶:将具有相似大小的批处理图放在一起,而不是随机混洗和批处理。 对于小图,请使用密集图表示;对于大图,请使用稀疏图表示。 我们根据的论文的详细信息,将文件解析为图形表示形式。 有关为方法名称预测...

    低密度奇偶校验码的知悉混洗置信传播解码

    作者设计了一种基于信息的动态定位方法,该方法基于根据变量节点对数似然比值的残差,对要更新的SBP变量节点进行重新排序。 这定位方法从两个方面显着加快了SBP算法的收敛速度:不稳定变量具有最大残差的节点将首先...

    ArrayV-v4.0:https的新家

    改进了w0rthy的Array Visualizer 超过75种排序算法,具有12种独特的图形设计 该程序的新版本的功能受到Timo Bingmann的“分类...新的混洗类型,包括反转的,几乎相似的数字,几乎已排序且已排序 跳过排序按钮 声音柔

    大数据平台构建:MapReduce运行原理.pptx

    在map端,map的输出先写入缓存,当每次缓存快满时,由缓存“溢写”至磁盘,每次溢写都先进行“分区”,并对每个分区的数据进行“排序”和“合并”(可选)。一般会产生多个溢写的文件,这些文件会在map端先被“归并...

    SortingNetworks:适用于小整数数组(2-6个元素)的最快的CPU SIMD(SSE4)分拣网络,还具有最佳的amd64汇编,并提供了有关使编译器生成最佳分拣网络的说明

    简介:作为示例,我使用SSE4提出了新颖且先进的4 int32_t排序和6 int8_t排序,以及一些有关对小型固定大小数组进行快速排序的想法和注释。 这些是现代CPU上最快的已知方法。 它们是完全无分支的并且非常快。 例如,...

    JavaCardDeck:编码分配

    通过数组内部的置换实现混洗。 3)。 使用 Collections 排序方法排序(懒惰)。 4)。 实现了 Card Deck 快速排序方法来对洗牌后的数组进行排序。 5)。 已实现从洗牌的牌库中获取所有同花色的牌。 6). 6 Junit ...

    bedtools2:bedtools-用于基因组算术的瑞士军刀

    例如,bedtools允许人们以广泛使用的基因组文件格式(例如BAM,BED,GFF / GTF,VCF)与多个文件中的基因组间隔相交,合并,计数,互补和混洗。 尽管每个工具都设计为执行相对简单的任务(例如,将两个间隔文件相交...

    compute_rasterizer:使用计算着色器渲染点云

    基于计算着色器的点云渲染该存储... 因此,Morton排序缓冲区和混洗缓冲区都不是最佳的。 但是,通过首先按Morton代码进行排序,然后对128个点的批处理进行混洗,然后按顺序将批处理中的点保留在一起,可以实现改进的排

    数据结构-2011-期中-解析1

    1. 时间复杂度分析 P27-48 2. 二分查找 P172、Fib 查找 P184 3. 排序:选择 P255、插入 P270、归并 P277 4. 栈混洗:

    LogAnalyzerAdvancedMapReduce:MapReduce 实现分区器和组合器

    组合器的主要目标是通过最小化将在映射器和化简器之间的网络中混洗的键/值对的数量来尽可能多地节省带宽。 > job.setCombinerClass(LogReducer.class); 检查 src/test/resource/SampleLog.txt 以查看演示文件。 ...

    leetcode蓄水池JAVA-Coding-Practice:各种编码/算法问题的解决方案以及许多用于学习算法和数据结构的有用资源

    正如我之前所说,所有解决方案都是用(更准确地说,)编写的,使用(打印、长度、范围、排序、总和、最小值、最大值等...)和一些类似的模块: (用于 math.pi、math.inf 等常量和 math.ceil、math.floor、math.gcd...

    leetcode解码方法Python-coding-challenges:各种编码/算法问题的解决方案以及许多用于学习算法和数据结构的有用技术

    所有解决方案都是用(更准确地说,)编写的,使用(打印、长度、范围、排序、总和、最小值、最大值等...)和一些类似的模块: (用于 math.pi、math.inf 等常量和 math.ceil、math.floor、math.gcd、math.log、math....

    leetcode蓄水池JAVA-coding-problems:编码问题

    正如我之前所说,所有解决方案都是用(更准确地说,)编写的,使用(打印、长度、范围、排序、总和、最小值、最大值等...)和一些类似的模块: (用于 math.pi、math.inf 等常量和 math.ceil、math.floor、math.gcd...

    leetcode蓄水池JAVA-coding-problems-python:编码问题-python

    正如我之前所说,所有解决方案都是用(更准确地说,)编写的,使用(打印、长度、范围、排序、总和、最小值、最大值等...)和一些类似的模块: (用于 math.pi、math.inf 等常量和 math.ceil、math.floor、math.gcd...

    Shuffle-ArrayList

    ShuffleArrayList 编写以下方法,对ArrayList进行随机排序:基本上,赋值是要我创建一个arraylist,然后创建一个随机对数组中的任何内容进行随机混洗的方法,混洗意味着将字符/字符串放入要放入的任何内容中。...

    深红色的伪造:可持续的shell规避

    新指令将插入到混洗技术所使用的同一图形中,从而也可以对其进行重新排序。 由于重写的性质,已处理的shellcode不必存在于可写内存中。 这消除了非常常见的模式,该模式被许多AV和EDR系统标识为恶意程序。安装有关...

    weather-challenge

    尽管该程序完全能够处理无序或错误的编写行,但并未对生成的模拟数据进行混洗或创建错误的行。 除了非盟,法国和美国之外,生成的数据中包括的唯一其他国家是BR。 由于“均值”在数学上有,因此我将均值假设为。 ...

Global site tag (gtag.js) - Google Analytics