一.概述
关于二次排序的文章,网上很多,比喻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]
相关推荐
对于那些对Hadoop二次开发感兴趣的读者,书中对于Hadoop设计原理的深入剖析,可以帮助他们更好地理解整个Hadoop框架的设计,从而在二次开发时更加得心应手。而应用开发工程师和运维工程师也可以通过这本书了解到如何...
探讨了如何设计有效的MapReduce算法,包括局部聚合、配对与条纹化、相对频率计算、二次排序、关系连接等技术。 - **第4章:用于文本检索的倒排索引** 讨论了如何构建和优化倒排索引,包括不同的实现方法和技术...
该部分介绍了如何设计MapReduce算法,如局部聚合、键值对处理、计算相对频率以及二次排序等技术,这些都是处理文本数据的关键步骤。 7. **倒排索引用于文本检索**(Inverted Indexing for Text Retrieval) 倒排...
7. **Hadoop高级编程**:涵盖计数器、最值计算、全排序和二次排序,以及连接操作,提升学生的高级编程能力。 8. **HBase**:介绍HBase的基础知识,包括环境配置、Shell操作,基于HBase API的程序设计,以及RowKey...
6. **Hadoop高级编程**:涵盖计数器、最值、全排序、二次排序和连接等高级特性,提升编程能力。 7. **HBase与Hive的应用**:介绍HBase作为NoSQL数据库的基础知识,包括安装配置、Shell操作和API编程,以及RowKey...
MapReduce则讲解了其工作原理、编程规范,通过实例练习深入理解分区、排序、压缩和自定义组件。Yarn部分会讨论其调度机制,包括不同的调度策略。 Hadoop的应用场景广泛,例如在仓储物流中,通过大数据技术实现智能...
#### 三、MapReduce详解 **MapReduce**是Hadoop的核心之一,通过MapReduce可以有效地处理大规模数据集。其工作原理分为两个阶段:Map阶段和Reduce阶段。 - **Map阶段**:输入的数据被分割成多个小块,这些数据块...
通过本书的学习,读者可以全面理解Hadoop的技术架构、工作原理和应用场景,以及如何在企业环境中部署和管理Hadoop集群,优化作业调度,并能够根据实际业务需求进行Hadoop应用的二次开发和优化。
这本书详细讲解了如何使用Hadoop进行大数据处理,从安装配置到编写MapReduce程序,再到优化和维护Hadoop集群,涵盖了Hadoop生态系统的多个方面,对于想深入了解和应用Hadoop的读者来说是一份宝贵的资源。
- **不适合DAG(有向无环图)处理**:复杂的DAG处理需要多次迭代和复杂的控制流,MapReduce并不擅长此类处理。 #### 三十、MapReduce执行原理 1. **作业提交**:客户端提交MapReduce作业。 2. **初始化**:...
此外,排序算法(快速排序、归并排序、堆排序等)和查找算法(二分查找、哈希查找等)也是重点。在实际笔试中,可能会有编程题要求实现特定算法或分析复杂度。 三、数据库 淘宝网庞大的数据处理离不开高效数据库的...
- 常见算法:排序(快速排序、归并排序、冒泡排序等)、查找(二分查找、哈希查找等)、图的遍历(深度优先搜索、广度优先搜索)。 - 动态规划、贪心算法、回溯法、分治策略等高级算法应用。 2. 编程语言基础: ...
- **版本与排序**:讨论了HBase中数据版本控制机制及其排序规则。 - **列元数据与Joins**:讲解了HBase如何处理列的元数据信息以及HBase中不支持的传统SQL JOIN操作。 - **ACID属性**:分析了HBase支持的事务特性...
理解这些算法的工作原理有助于优化程序性能,比如快速排序在平均情况下的时间复杂度为O(nlogn)。 2. 搜索算法:如线性搜索、二分搜索、深度优先搜索和广度优先搜索。这些算法在数据查找和图遍历问题中广泛应用。 3...
94_job二次排序5 t3 Z2 R- ]( a: s* c0 Z 95_从db输入数据进行mr计算: L. M4 I6 y, R2 l/ u/ L 96_输出数据到db中 97_NLineInputFormat& u( k1 T& z( O# P, S* y1 Y 98_KeyValueTextInputFormat* p$ O1 z- h, n" e( ...