mapreduce二次排序_ mapreduce二次排序原理.doc

上传人:白大夫 文档编号:3255888 上传时间:2019-08-06 格式:DOC 页数:2 大小:13.50KB
返回 下载 相关 举报
mapreduce二次排序_ mapreduce二次排序原理.doc_第1页
第1页 / 共2页
亲,该文档总共2页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《mapreduce二次排序_ mapreduce二次排序原理.doc》由会员分享,可在线阅读,更多相关《mapreduce二次排序_ mapreduce二次排序原理.doc(2页珍藏版)》请在三一文库上搜索。

1、mapreduce二次排序_ mapreduce二次排序原理关于什么是二次排序在mapreduce操作时,shuffle阶段会多次根据key值排序。但是在shuffle分组后,相同key值的values序列的顺序是不确定的(如下图)。如果想要此时value值也是排序好的,这种需求就是二次排序。默认情况下,Map输出的结果会对Key进行默认的排序,但是有时候需要对Key排序的同时还需要对Value进行排序,这时候就要用到二次排序了。mapreduce二次排序分析我们把二次排序分为以下几个阶段Map起始阶段在Map阶段,使用job.seTInputFormatClass()定义的InputForm

2、at,将输入的数据集分割成小数据块split,同时InputFormat提供一个RecordReader的实现。在这里我们使用的是TexTInputFormat,它提供的RecordReader会将文本的行号作为Key,这一行的文本作为Value。这就是自定 Mapper的输入是LongWritable,Text 的原因。然后调用自定义Mapper的map方法,将一个个LongWritable,Text键值对输入给Mapper的map方法Map最后阶段在Map阶段的最后,会先调用job.setParTITIonerClass()对这个Mapper的输出结果进行分区,每个分区映射到一个Reduc

3、er。每个分区内又调用job.setSortComparatorClass()设置的Key比较函数类排序。可以看到,这本身就是一个二次排序。如果没有通过job.setSortComparatorClass()设置 Key比较函数类,则使用Key实现的compareTo()方法Reduce阶段在Reduce阶段,reduce()方法接受所有映射到这个Reduce的map输出后,也会调用job.setSortComparatorClass()方法设置的Key比较函数类,对所有数据进行排序。然后开始构造一个Key对应的Value迭代器。这时就要用到分组,使用 job.setGroupingComparatorClass()方法设置分组函数类。只要这个比较器比较的两个Key相同,它们就属于同一组,它们的 Value放在一个Value迭代器,而这个迭代器的Key使用属于同一个组的所有Key的第一个Key。最后就是进入Reducer的 reduce()方法,reduce()方法的输入是所有的Key和它的Value迭代器,同样注意输入与输出的类型必须与自定义的Reducer中声明的一致。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1