一.概述
关于二次排序的文章,网上很多,比喻http://www.cnblogs.com/xuxm2007/archive/2011/09/03/2165805.html就写的不错。在此文基础上补充几点。
二.job.setPartitionerClass在什么地方被用到
mapper里每一次write,都会调用到
collector.collect(key, value,partitioner.getPartition(key, value, partitions));注partitions = jobContext.getNumReduceTasks();
从而使用到PartitionerClass。
参考MapTask write方法 line690。
三.job.setSortComparatorClass
在sortAndSpill时触发。
而进入sortAndSpill的时机有map阶段正在进行时缓冲区的数据已经达到阈值,或者map阶段完后的output.close(mapperContext);顺便说一下Mapper的clean方法是在map阶段完成,我以前一直以为是map阶段完后执行。这也是为什么每一个Mapper的输出都是有序的原因,也是Reduce Shuffle阶段的准备。
原始文件
1 1b 1 1a 3 3a 2 2A 2 2a
采用快速排序(调用SortComparatorClass的compare方法)。生成的file.out文件。好像有些字符没显示出来。
11a1a11b1b22A2A22a2a33a3a?SU
代码MapTask line763
try { input.initialize(split, mapperContext); mapper.run(mapperContext);//mapper阶段 mapPhase.complete(); setPhase(TaskStatus.Phase.SORT); statusUpdate(umbilical); input.close();//关闭RecordWriter input = null; output.close(mapperContext); output = null; } finally { closeQuietly(input); closeQuietly(output, mapperContext); }
四.job.setGroupingComparatorClass
决定了一个分区下的那些value,被分为一组。先阅读http://zy19982004.iteye.com/admin/blogs/2037907。在Merge & Sort阶段后,数据已经是有序的了。此时只需要比较当前value与下一个value是否相等(调用GroupingComparatorClass的compare方法),相等就为一组。 所以compare方法的返回值int没多大意思,因为只需nextValueIsSame = result == 0。上述数据的调用轨迹为
TextPair [first=1, second=1a] TextPair [first=1, second=1b] TextPair [first=1, second=1b] TextPair [first=2, second=2A] TextPair [first=2, second=2A] TextPair [first=2, second=2a] TextPair [first=2, second=2a] TextPair [first=3, second=3a]
相关推荐
当我们需要对数据进行复杂的排序需求时,例如“年份升序,按照年份聚合,气温降序”,MapReduce的二次排序(Secondary Sort)机制就显得尤为重要。这个概念主要解决的是在MapReduce默认排序规则基础上,进行更精细化...
在Hadoop MapReduce的早期版本(0.20.0之前),二次排序通常通过设置`setPartitionerClass`、`setOutputKeyComparatorClass`和`setOutputValueGroupingComparator`来实现。而在0.20.0及之后的版本,这些设置被替换为...
在这个“hadoop分区二次排序示例.zip”压缩包中,我们重点探讨的是如何在Hadoop MapReduce中实现特定的排序逻辑,即二次排序和分区策略。 首先,我们需要理解什么是二次排序。在标准的MapReduce流程中,数据经过map...
MapReduce模型中的二次排序是大数据处理中一项重要的技术,它通过多层排序功能来优化数据处理性能。二次排序的核心思想在于对Key(键)进行分层排序,而不能对Value(值)进行排序。这主要是因为MapReduce框架设计时...
"顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶大大大"这部分看起来像是一种用户反馈或者评价,可能是对学习资料的高度赞赏,表示这些资料对理解大数据排序,特别是Hadoop环境下的二次排序非常有帮助。 在大数据处理中,二次排序...
二次排序(Secondary Sort)是Hadoop MapReduce中的一个重要概念,它允许用户自定义数据的最终排序方式,以满足更复杂的排序需求。这篇博客文章(虽然链接无法直接访问,但我们可以根据常规知识来解释这个概念)可能...
本教程聚焦于Hadoop MapReduce,特别是源码打包过程,这对于理解MapReduce的工作原理以及进行二次开发至关重要。 MapReduce是一种编程模型,用于大规模数据集的并行计算。它的核心思想是将复杂的大规模数据处理任务...
15. 使用 MapReduce 实现二次排序:使用 MapReduce 来实现数据的二次排序,以便对数据进行复杂的排序处理。 该项目旨在掌握 MapReduce 编程模型的基本概念和应用,并涵盖了 MapReduce 的高级应用,旨在提高学生对云...
### Hadoop 学习总结 #### 一、HDFS简介 **1.1 数据块(Block)** ...通过对HDFS和MapReduce的学习,不仅可以了解如何存储和处理大规模数据,还可以进一步探索Hadoop生态系统中的其他组件和技术。
#### 十、Mapreduce 中 value 集合的二次排序 - **概念解释**:在 MapReduce 中实现 value 集合的二次排序。 - **技术细节**: - 第一次排序的实现方法。 - 第二次排序的目的及其实现方式。 - 如何优化二次排序...
在这个压缩包中,我们可以深入理解Hadoop的工作原理,并进行二次开发。 Hadoop的核心组件主要有两个:HDFS(Hadoop Distributed File System)和MapReduce。HDFS是分布式文件系统,它将大文件分割成块并分布在多台...
Hadoop-2.6.4源码包包含了Hadoop的核心组件和相关模块,是理解Hadoop工作原理、进行二次开发或优化的基础。 1. Hadoop核心组件: Hadoop主要包括两个核心组件:HDFS(Hadoop Distributed File System)和MapReduce...
二次排序 联接 map端联接 reduce端联接 边数据分布 利用JobConf来配置作业 分布式缓存 MapReduce库类 第9章 构建Hadoop集群 集群规范 网络拓扑 集群的构建和安装 安装Java 创建Hadoop用户...
### Hadoop数据处理框架MapReduce原理及开发 #### 一、Hadoop生态系统概述 Hadoop是一个开源软件框架,主要用于分布式存储和处理大规模数据集。它由Apache软件基金会维护和发展,自2006年成立以来已经成为了大数据...
通过编译源码,开发者可以深入了解Hadoop内部的工作机制,进行二次开发或自定义配置。源码包通常包含以下目录结构: - `hadoop-common`:包含Hadoop的公共库和工具,如网络通信、配置、安全和I/O相关的类。 - `...
内容涵盖HDFS的JAVA API操作,如文件读取、写入、删除、元数据查询和文件列表等,以及MapReduce编程模型的多个应用,包括求平均数、Join操作、TopK算法、二次排序,并涉及自定义InputFormat、OutputFormat和shuflle...
二次排序是Hadoop处理复杂排序需求的关键技术,它允许用户对数据进行更精细的控制,确保在MapReduce框架内得到所需的数据结构和排序顺序。在实际的大数据处理场景中,二次排序经常用于聚合统计、数据分桶等操作,极...
在“拓思爱诺大数据-第二次作业MapReduce编程”中,你将学习到如何使用MapReduce解决实际问题。首先,我们来看Hadoop的wordcount程序,这是一个经典的MapReduce示例,用于统计文本中单词出现的频率。在Map阶段,程序...
7. **Hadoop高级编程**:涵盖计数器、最值计算、全排序和二次排序,以及连接操作,提升学生的高级编程能力。 8. **HBase**:介绍HBase的基础知识,包括环境配置、Shell操作,基于HBase API的程序设计,以及RowKey...
目前最流行的开源MapReduce实现是Apache Hadoop项目中的Hadoop MapReduce模块,而近年来出现的新框架如Apache Spark则在此基础上进行了优化改进。 #### 二、工作原理 MapReduce的基本思想可以概括为两个阶段:Map...