`

mapreduce二次排序原理讲解

 
阅读更多

一.概述

     关于二次排序的文章,网上很多,比喻http://www.cnblogs.com/xuxm2007/archive/2011/09/03/2165805.html就写的不错。在此文基础上补充几点。 

 

二.job.setPartitionerClass在什么地方被用到

     mapper里每一次write,都会调用到

Java代码  收藏代码
  1. 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阶段的准备。

      原始文件

Java代码  收藏代码
  1. 1   1b  
  2. 1   1a  
  3. 3   3a  
  4. 2   2A  
  5. 2   2a  

 

      采用快速排序(调用SortComparatorClass的compare方法)。生成的file.out文件。好像有些字符没显示出来。

     11a1a11b1b22A2A22a2a33a3a?SU

      代码MapTask line763

Java代码  收藏代码
  1. try {  
  2.       input.initialize(split, mapperContext);  
  3.       mapper.run(mapperContext);//mapper阶段  
  4.       mapPhase.complete();  
  5.       setPhase(TaskStatus.Phase.SORT);  
  6.       statusUpdate(umbilical);  
  7.       input.close();//关闭RecordWriter  
  8.       input = null;  
  9.       output.close(mapperContext);  
  10.       output = null;  
  11.     } finally {  
  12.       closeQuietly(input);  
  13.       closeQuietly(output, mapperContext);  
  14.     }  

 

 

 

四.job.setGroupingComparatorClass

     决定了一个分区下的那些value,被分为一组。先阅读http://zy19982004.iteye.com/admin/blogs/2037907。在Merge & Sort阶段后,数据已经是有序的了。此时只需要比较当前value与下一个value是否相等(调用GroupingComparatorClass的compare方法),相等就为一组。  所以compare方法的返回值int没多大意思,因为只需nextValueIsSame = result == 0。上述数据的调用轨迹为

Java代码  收藏代码
  1. TextPair [first=1, second=1a] TextPair [first=1, second=1b]  
  2. TextPair [first=1, second=1b] TextPair [first=2, second=2A]  
  3. TextPair [first=2, second=2A] TextPair [first=2, second=2a]  
  4. TextPair [first=2, second=2a] TextPair [first=3, second=3a]  
分享到:
评论

相关推荐

    Hadoop技术内幕:深入解析MapReduce架构设计与实现原理

    对于那些对Hadoop二次开发感兴趣的读者,书中对于Hadoop设计原理的深入剖析,可以帮助他们更好地理解整个Hadoop框架的设计,从而在二次开发时更加得心应手。而应用开发工程师和运维工程师也可以通过这本书了解到如何...

    云计算 mapreduce - <Data-Intensive[1].Text.Processing.With.MapReduce>

    探讨了如何设计有效的MapReduce算法,包括局部聚合、配对与条纹化、相对频率计算、二次排序、关系连接等技术。 - **第4章:用于文本检索的倒排索引** 讨论了如何构建和优化倒排索引,包括不同的实现方法和技术...

    Data-Intensive Text Processing with MapReduce

    该部分介绍了如何设计MapReduce算法,如局部聚合、键值对处理、计算相对频率以及二次排序等技术,这些都是处理文本数据的关键步骤。 7. **倒排索引用于文本检索**(Inverted Indexing for Text Retrieval) 倒排...

    Hadoop集群程序设计与开发教学大纲.docx

    7. **Hadoop高级编程**:涵盖计数器、最值计算、全排序和二次排序,以及连接操作,提升学生的高级编程能力。 8. **HBase**:介绍HBase的基础知识,包括环境配置、Shell操作,基于HBase API的程序设计,以及RowKey...

    Hadoop集群程序设计与开发教学大纲.pdf

    6. **Hadoop高级编程**:涵盖计数器、最值、全排序、二次排序和连接等高级特性,提升编程能力。 7. **HBase与Hive的应用**:介绍HBase作为NoSQL数据库的基础知识,包括安装配置、Shell操作和API编程,以及RowKey...

    Hadoop课程笔记 .pdf

    MapReduce则讲解了其工作原理、编程规范,通过实例练习深入理解分区、排序、压缩和自定义组件。Yarn部分会讨论其调度机制,包括不同的调度策略。 Hadoop的应用场景广泛,例如在仓储物流中,通过大数据技术实现智能...

    Hadoop实战(lam著,韩冀中译)中文版

    #### 三、MapReduce详解 **MapReduce**是Hadoop的核心之一,通过MapReduce可以有效地处理大规模数据集。其工作原理分为两个阶段:Map阶段和Reduce阶段。 - **Map阶段**:输入的数据被分割成多个小块,这些数据块...

    chinapub读书会第四期:(翟周伟)Hadoop核心技术,开发和百度实践

    通过本书的学习,读者可以全面理解Hadoop的技术架构、工作原理和应用场景,以及如何在企业环境中部署和管理Hadoop集群,优化作业调度,并能够根据实际业务需求进行Hadoop应用的二次开发和优化。

    Hadoop实战中文版 chuck lam

    这本书详细讲解了如何使用Hadoop进行大数据处理,从安装配置到编写MapReduce程序,再到优化和维护Hadoop集群,涵盖了Hadoop生态系统的多个方面,对于想深入了解和应用Hadoop的读者来说是一份宝贵的资源。

    Hadoop基础面试题(附答案)

    - **不适合DAG(有向无环图)处理**:复杂的DAG处理需要多次迭代和复杂的控制流,MapReduce并不擅长此类处理。 #### 三十、MapReduce执行原理 1. **作业提交**:客户端提交MapReduce作业。 2. **初始化**:...

    10淘宝网+技术类+笔试.rar

    此外,排序算法(快速排序、归并排序、堆排序等)和查找算法(二分查找、哈希查找等)也是重点。在实际笔试中,可能会有编程题要求实现特定算法或分析复杂度。 三、数据库 淘宝网庞大的数据处理离不开高效数据库的...

    百度面试题

    - 常见算法:排序(快速排序、归并排序、冒泡排序等)、查找(二分查找、哈希查找等)、图的遍历(深度优先搜索、广度优先搜索)。 - 动态规划、贪心算法、回溯法、分治策略等高级算法应用。 2. 编程语言基础: ...

    HBase官方文档中文版

    - **版本与排序**:讨论了HBase中数据版本控制机制及其排序规则。 - **列元数据与Joins**:讲解了HBase如何处理列的元数据信息以及HBase中不支持的传统SQL JOIN操作。 - **ACID属性**:分析了HBase支持的事务特性...

    Algorithms-2020

    理解这些算法的工作原理有助于优化程序性能,比如快速排序在平均情况下的时间复杂度为O(nlogn)。 2. 搜索算法:如线性搜索、二分搜索、深度优先搜索和广度优先搜索。这些算法在数据查找和图遍历问题中广泛应用。 3...

    2017最新大数据架构师精英课程

    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( ...

Global site tag (gtag.js) - Google Analytics