`
flyingdutchman
  • 浏览: 358989 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hadoop深入学习:Partitioner组件的设计与实现

阅读更多
        本节我们来学习MapReduce编程框架中的Partitioner接口和其他相关的信息。
        Partitioner的作用就是对Mapper产生的中间数据进行分片,以便将同一分片的数据交给同一个Reducer处理,该过程是MapReduce的shuffle过程,特别是Map端的shuffle的一部分。
        Partitioner它直接影响Reduce阶段的负责均衡。在老版中,Partitioner是一个接口,继承了JobConfigurable接口,代码如下:
/** 
 * Partitions the key space.
 * 
 * <p><code>Partitioner</code> controls the partitioning of the keys of the 
 * intermediate map-outputs. The key (or a subset of the key) is used to derive
 * the partition, typically by a hash function. The total number of partitions
 * is the same as the number of reduce tasks for the job. Hence this controls
 * which of the <code>m</code> reduce tasks the intermediate key (and hence the 
 * record) is sent for reduction.</p>
 * 
 * @see Reducer
 */
public interface Partitioner<K2, V2> extends JobConfigurable {
  
  /** 
   * Get the paritition number for a given key (hence record) given the total 
   * number of partitions i.e. number of reduce-tasks for the job.
   *   
   * <p>Typically a hash function on a all or a subset of the key.</p>
   *
   * @param key 基于该key对数据分组儿.
   * @param value the entry value.
   * @param numPartitions 每个Mapper的分片数.
   * @return the partition number for the <code>key</code>.
   */
  int getPartition(K2 key, V2 value, int numPartitions);
}
   
         MapReduce提供了两个Partitioner实现类:HasdPartitioner和TotalOrderPartitioner。
         默认情况下,MapReduce分布式计算模型使用的是HasdPartitioner,它实现了一种基于Hash值的分片算法:
/** Partition keys by their {@link Object#hashCode()}. 
 */
public class HashPartitioner<K2, V2> implements Partitioner<K2, V2> {

  public void configure(JobConf job) {}

  /** Use {@link Object#hashCode()} to partition. */
  public int getPartition(K2 key, V2 value,int numReduceTasks) {
    return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
  }

}

     
         TotalOrderPartitioner主要用于Hadoop中的对数据进行全排序,它提供了一种基于区间的分片算法,能按照大小将数据分成若干个区间即分片,并保证后一个区间的所有数据都大于前一个区间的数据,这大大提高了全局排序的性能和扩展性。
         使用TotalOrderPartitioner对数据进行全排序,要涉及到数据采样,需要和Hadoop采样器(如内置的IntercalSampler、RandomSampler和SplitSampler等,当然也可以实现直接的采样器)配合,具体步骤如下:
         第一步,数据采样。在Client端使用采样器(Sampler)获得分片的分割点;
         第二步,Map阶段。=在该阶段中涉及MapReduce编程模型的两个组件Mapper和Partitioner,Mapper可以采用IdentityMapper,直接输出数据,但Partitioner必须选用TotalOrderPartitioner,他将步骤1中获取的分割点保存到一颗trie树中,以便快速定位一个数据所在的区间。这样Mapper中产生的中间数据的N个区间就都是有序的;
         最后一步,Reduce阶段。在对每一个Reducer分配到的数据进行局部排序,最终得到经过全排序的数据。
         使用TotalOrderPartitioner的全排序的效率根key的分布规律和采样器的算法有直接关系。key值分布月均匀且采样越具有代表性,则Reduce Task负载月均衡,从而全排序的效率也就越高。
       
         有兴趣的朋友可以看一看TotalOrderPartitioner的使用示例TeraSort,这个示例可以在examples\org\apache\hadoop\examples\terasort包中招的到。
         在MapReduce编程框架中的其他两个组件Reduce和OutputFormat学习完后,鄙人会专门学习一下Hadoop的采样器Sampler和TotalOrderPartitioner,这里不再赘述。
分享到:
评论
2 楼 bo_hai 2013-11-11  
TotalOrderPartitioner 不能使用在伪分布模式下吗 ?相关链接:http://stackoverflow.com/questions/11035798/error-while-bulk-load-in-hbase
1 楼 bo_hai 2013-11-11  
学习了。

相关推荐

    Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 PDF高清扫描版.pdf-218M

    《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》是一本专注于Hadoop核心组件MapReduce的专业技术书籍。MapReduce是Google提出的一种分布式计算模型,后来被Hadoop社区广泛采纳,成为处理海量数据的核心...

    Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 -董西成 可复制 电子书+pdf

    《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》是董西成撰写的一本专著,专注于探讨Hadoop的核心组件MapReduce的内部机制。这本书涵盖了从基础概念到高级应用,旨在帮助读者深入理解这一分布式计算框架。...

    hadoop 文档:Hadoop开发者下载

    4. **Hadoop API**:学习使用Hadoop API进行数据读写和处理,例如FileSystem API用于文件操作,InputFormat和OutputFormat定义输入输出格式,Mapper和Reducer实现数据处理逻辑。 5. **MapReduce编程**:理解...

    Hadoop高级编程- 构建与实现大数据解决方案

    本文将深入探讨“Hadoop高级编程——构建与实现大数据解决方案”这一主题,旨在帮助读者掌握如何利用Hadoop构建实际的大数据项目。 首先,我们要理解Hadoop的基础架构。Hadoop由两个主要组件构成:Hadoop ...

    hadoop api及Hadoop结构与设计

    本文将深入探讨Hadoop API以及Hadoop的结构与设计,旨在为学习者提供全面的理解。 首先,我们来看Hadoop API。Hadoop API是开发者用于与Hadoop系统交互的一系列接口,它允许程序在分布式环境中读写数据,执行计算...

    基于MapReduce的词频统计程序及其重构、MapReduce编程之Combiner、Partitioner组件应用.zip

    本文将深入探讨基于MapReduce的词频统计程序的实现,以及在MapReduce编程中Combiner和Partitioner组件的关键作用。 一、MapReduce简介 MapReduce是Google提出的一种分布式计算模型,主要由Map(映射)和Reduce...

    超人学院Hadoop面试葵花宝典

    2. Hadoop组件与概念:Hadoop集群由多个组件构成,其中包括NameNode、DataNode、JobTracker和TaskTracker。NameNode负责管理整个文件系统的命名空间,记录哪些文件属于哪个块,以及这些块存储在哪些DataNode上。...

    Partitioner.zip

    通过解压并学习这些内容,你可以深入理解Hadoop MapReduce的分区机制,并掌握如何根据实际需求优化数据处理流程。 总的来说,Partitioner是Hadoop MapReduce中一个非常关键的组件,它允许用户根据业务逻辑调整数据...

    hadoop2.7.3源码包,hadoop2.7.3zip源码包

    Hadoop是大数据处理领域中的一个核心框架,主要由Apache软件基金会开发。Hadoop 2.7.3是其一个稳定...通过这个源码包,你可以探索Hadoop如何处理大数据,学习分布式系统的设计原则,以及如何利用Java实现这样的系统。

    hadoop source code归档

    通过研究Hadoop的源代码,开发者和数据工程师可以深入学习其内部机制,优化性能,甚至开发新的功能。 首先,我们来了解一下Hadoop的核心组件: 1. **HDFS(Hadoop Distributed File System)**:HDFS是Hadoop的...

    Hadoop实现大矩阵乘法

    在大数据处理领域,Hadoop是一个不可或缺的开源框架...通过分析和运行提供的代码,学习者不仅可以掌握大矩阵乘法的分布式实现,还能深入理解Hadoop的工作原理和编程技巧,对于进一步探索大数据处理领域具有很高的价值。

    hadoop应用开发技术详解代码

    本书“Hadoop应用开发技术详解”的源代码涵盖了第3、4、5、7、8、10、11和12章的内容,为读者提供了丰富的实践示例,帮助理解并应用Hadoop生态系统中的关键组件。以下是对这些章节涉及知识点的详细解释: 1. **...

    hadoop 2.5.2 源码

    总结来说,Hadoop 2.5.2源码提供了一个深入学习和研究分布式计算的机会。通过分析源码,开发者不仅能理解Hadoop的内部工作机制,还能根据实际需求进行定制和优化,提升大数据处理的效率和可靠性。无论是对Hadoop感...

    hadoop-API.zip_Hadoop学习_hadoop api

    这个“hadoop-API.zip”压缩包包含了Hadoop的中文版API文档,对于正在学习Hadoop或者需要深入理解Hadoop API的开发者来说,是一份非常有价值的资源。 Hadoop主要由两个组件构成:HDFS(Hadoop Distributed File ...

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

    《Hadoop权威指南中文版(第二版)》与《Hadoop in Action》及《Pro Hadoop》这三本书是深入理解和掌握Hadoop生态系统的关键资源。Hadoop作为一个分布式计算框架,其核心是解决大规模数据处理的问题,它允许在廉价...

    实战hadoop中的源码

    7. **扩展性与插件开发**:学习如何为Hadoop开发自定义InputFormat、OutputFormat、Partitioner、Combiner等组件。 8. **实战项目**:结合实际案例,运用所学知识解决大数据处理问题,如日志分析、推荐系统等。 ...

    Hadoop-Programs:Hadoop-MapReduce

    在2015年的夏季,通过对《Hadoop权威指南》的深入学习,我们可以理解MapReduce的基本工作原理及其编程模型。 **MapReduce的基本概念** 1. **Map阶段**: 在Map阶段,输入数据被分割成多个块,并在集群中的多台机器...

    hadoop-2.7.6-src

    《Hadoop 2.7.6源码解析与探索》 Hadoop,作为大数据处理领域的重要框架,一直以来都是开发者和研究者关注的焦点。本文将深入探讨Hadoop 2.7.6版本的源码,带领读者理解其内部机制,为理解和使用Hadoop提供更深入的...

    深入解析MapReduce架构设计与实现原理

    《深入解析MapReduce架构设计与实现原理》是针对Hadoop技术的一本专业指南,尤其侧重于MapReduce这一核心组件的深度剖析。MapReduce是Google提出的一种分布式计算模型,被广泛应用于大数据处理领域,如日志分析、...

    Hadoop-0.20.1+API

    Hadoop-0.20.1+API是一个关于Hadoop早期版本(0.20.1)的API参考文档,以CHM(Compiled Help Manual)格式呈现,适用于那些需要深入理解Hadoop框架以及其编程接口的开发者和系统管理员。CHM文件是一种微软编译的帮助...

Global site tag (gtag.js) - Google Analytics