`
zy19982004
  • 浏览: 664560 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:252594
社区版块
存档分类
最新评论

Hadoop学习四十三:MapReduce的二次排序

 
阅读更多
 

一.概述

     关于二次排序的文章,网上很多,比喻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]

 

1
0
分享到:
评论

相关推荐

    mapreduce二次排序

    当我们需要对数据进行复杂的排序需求时,例如“年份升序,按照年份聚合,气温降序”,MapReduce的二次排序(Secondary Sort)机制就显得尤为重要。这个概念主要解决的是在MapReduce默认排序规则基础上,进行更精细化...

    hadoop 二次排序 原理

    在Hadoop MapReduce的早期版本(0.20.0之前),二次排序通常通过设置`setPartitionerClass`、`setOutputKeyComparatorClass`和`setOutputValueGroupingComparator`来实现。而在0.20.0及之后的版本,这些设置被替换为...

    hadoop分区二次排序示例.zip

    在这个“hadoop分区二次排序示例.zip”压缩包中,我们重点探讨的是如何在Hadoop MapReduce中实现特定的排序逻辑,即二次排序和分区策略。 首先,我们需要理解什么是二次排序。在标准的MapReduce流程中,数据经过map...

    MapReduce模型--二次排序

    MapReduce模型中的二次排序是大数据处理中一项重要的技术,它通过多层排序功能来优化数据处理性能。二次排序的核心思想在于对Key(键)进行分层排序,而不能对Value(值)进行排序。这主要是因为MapReduce框架设计时...

    大数据学习资料全排序二次排序

    "顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶大大大"这部分看起来像是一种用户反馈或者评价,可能是对学习资料的高度赞赏,表示这些资料对理解大数据排序,特别是Hadoop环境下的二次排序非常有帮助。 在大数据处理中,二次排序...

    hadoop 二次排序 插入数据库

    二次排序(Secondary Sort)是Hadoop MapReduce中的一个重要概念,它允许用户自定义数据的最终排序方式,以满足更复杂的排序需求。这篇博客文章(虽然链接无法直接访问,但我们可以根据常规知识来解释这个概念)可能...

    精选_大数据Hadoop平台2-2、MapReduce_源码打包

    本教程聚焦于Hadoop MapReduce,特别是源码打包过程,这对于理解MapReduce的工作原理以及进行二次开发至关重要。 MapReduce是一种编程模型,用于大规模数据集的并行计算。它的核心思想是将复杂的大规模数据处理任务...

    云应用系统开发第二次项目(mapreduce)

    15. 使用 MapReduce 实现二次排序:使用 MapReduce 来实现数据的二次排序,以便对数据进行复杂的排序处理。 该项目旨在掌握 MapReduce 编程模型的基本概念和应用,并涵盖了 MapReduce 的高级应用,旨在提高学生对云...

    Hadoop学习总结.doc

    ### Hadoop 学习总结 #### 一、HDFS简介 **1.1 数据块(Block)** ...通过对HDFS和MapReduce的学习,不仅可以了解如何存储和处理大规模数据,还可以进一步探索Hadoop生态系统中的其他组件和技术。

    大数据技术 Hadoop开发者第二期 MapReduce HDFS Hive Mahout HBase 共64页.pdf

    #### 十、Mapreduce 中 value 集合的二次排序 - **概念解释**:在 MapReduce 中实现 value 集合的二次排序。 - **技术细节**: - 第一次排序的实现方法。 - 第二次排序的目的及其实现方式。 - 如何优化二次排序...

    hadoop压缩包

    在这个压缩包中,我们可以深入理解Hadoop的工作原理,并进行二次开发。 Hadoop的核心组件主要有两个:HDFS(Hadoop Distributed File System)和MapReduce。HDFS是分布式文件系统,它将大文件分割成块并分布在多台...

    Hadoop源码包

    Hadoop-2.6.4源码包包含了Hadoop的核心组件和相关模块,是理解Hadoop工作原理、进行二次开发或优化的基础。 1. Hadoop核心组件: Hadoop主要包括两个核心组件:HDFS(Hadoop Distributed File System)和MapReduce...

    Hadoop权威指南 第二版(中文版)

     二次排序  联接  map端联接  reduce端联接  边数据分布  利用JobConf来配置作业  分布式缓存  MapReduce库类 第9章 构建Hadoop集群  集群规范  网络拓扑  集群的构建和安装  安装Java  创建Hadoop用户...

    Hadoop数据处理框架MapReduce原理及开发

    ### Hadoop数据处理框架MapReduce原理及开发 #### 一、Hadoop生态系统概述 Hadoop是一个开源软件框架,主要用于分布式存储和处理大规模数据集。它由Apache软件基金会维护和发展,自2006年成立以来已经成为了大数据...

    hadoop-2.4.zip

    通过编译源码,开发者可以深入了解Hadoop内部的工作机制,进行二次开发或自定义配置。源码包通常包含以下目录结构: - `hadoop-common`:包含Hadoop的公共库和工具,如网络通信、配置、安全和I/O相关的类。 - `...

    基于Java的Hadoop HDFS和MapReduce实践案例设计源码

    内容涵盖HDFS的JAVA API操作,如文件读取、写入、删除、元数据查询和文件列表等,以及MapReduce编程模型的多个应用,包括求平均数、Join操作、TopK算法、二次排序,并涉及自定义InputFormat、OutputFormat和shuflle...

    hadoop二次排序的原理和实现方法

    二次排序是Hadoop处理复杂排序需求的关键技术,它允许用户对数据进行更精细的控制,确保在MapReduce框架内得到所需的数据结构和排序顺序。在实际的大数据处理场景中,二次排序经常用于聚合统计、数据分桶等操作,极...

    拓思爱诺大数据-第二次作业MapReduce编程

    在“拓思爱诺大数据-第二次作业MapReduce编程”中,你将学习到如何使用MapReduce解决实际问题。首先,我们来看Hadoop的wordcount程序,这是一个经典的MapReduce示例,用于统计文本中单词出现的频率。在Map阶段,程序...

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

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

    MapReduce算法

    目前最流行的开源MapReduce实现是Apache Hadoop项目中的Hadoop MapReduce模块,而近年来出现的新框架如Apache Spark则在此基础上进行了优化改进。 #### 二、工作原理 MapReduce的基本思想可以概括为两个阶段:Map...

Global site tag (gtag.js) - Google Analytics