Hadoop里的Partitioner

Hadoop里的Partitioner

大家好,又见面了,我是全栈君。

人们对于Mapreduce程序刚開始时都觉得仅仅须要一个reduce就够了。

毕竟,在你处理数据之前一个reducer已经把数据都分好类了,有谁不喜欢分好类的数据呢。

可是这样我们就忽略了并行计算的优势。

假设仅仅有一个reducer。我们的云计算就退化成了一个小雨点。


在多个reducer的情况下,我们须要某种机制来控制mapper的结果的分配问题。这是就Partitioner的工作了。

在默认情况下。hadoop通过比較key的hash值来分配,默认使用HashPartitioner。有时默认的功能不能满足我们的要求,比方我们曾经自己定义的Edge类(http://blog.csdn.net/on_way_/article/details/8589187)。当我们想要知道每一个机场乘客起飞的数量时。我们有例如以下数据

(北京。 上海)   张三

(北京。 青岛)  李四。

。。。。。

。

假设我们用HashPartitioner来分配,那么这两行就会被送往不同的reducer上,机场起飞的数量就会被算两次,并且每次都是错误的。

我们须要为我们的应用程序定制一个partitioner。

  1. import org.apache.hadoop.io.Writable;  
  2. import org.apache.hadoop.mapred.JobConf;  
  3. import org.apache.hadoop.mapred.Partitioner;  
  4.   
  5.   
  6. public class EdgePartitioner implements Partitioner<Edge, Writable>{  
  7.   
  8.     @Override  
  9.     public void configure(JobConf job) {  
  10.         // TODO Auto-generated method stub  
  11.           
  12.     }  
  13.   
  14.     @Override  
  15.     public int getPartition(Edge key, Writable value, int numPartitions) {  
  16.         // TODO Auto-generated method stub  
  17.         return key.getDepartureNode().hashCode() % numPartitions;  
  18.     }  
  19.   
  20. }  

以下的这张图给出了Partitioner的详细解释

Hadoop里的Partitioner

在map和reduce两个阶段之间。一个MapReduce程序必须把mapper的输出分配到多个reducer上。这个过程叫做shuffling。由于一个mapper的输出结果有可能被分配到集群中的多个节点中去。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116562.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • js判断字符串是否为空格_替换字符串c++

    js判断字符串是否为空格_替换字符串c++//判断字符串是否为空functionisNull(variable){if(variable!==null||variable!==undefined||variable!==”){ if(variable.replace(/(^s*)|(s*$)/g,””).length>0){returnfalse} }returntrue;

    2022年10月24日
  • intellij idea 2021激活码(最新序列号破解)

    intellij idea 2021激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
  • java 截位法保留小数_【数量关系速算技巧】泡泡截位法专题

    java 截位法保留小数_【数量关系速算技巧】泡泡截位法专题资料分析都要找技巧,进行分析之类的,但是如果你对计算有所技巧的话,那么你的计算就相对简单,也会比别人快些,在节省做题时间以及做题时间的同时,还能够提高正确率。截位法使用范围:除了加减法,其他的运算都可以使用截位法。【截位法原理】如果我要把分子提高一部分,分母也要提高相应的部分,这样子得到的答案才不会有偏差,简言之就是同增同减。除法:【分子除以分母】12345/54321【用计算器得结果227】变…

    2022年5月15日
  • Linux 操作系统基础知识总结

    Linux 操作系统基础知识总结1、操作系统总体介绍CPU:就像人的大脑,主要负责相关事情的判断以及实际处理的机制。查询指令:cat/proc/cpuinfo内存:大脑中的记忆区块,将皮肤、眼睛等所收集到的信息记录起来的地方,以供CPU进行判断。查询指令:cat/proc/meminfo1)物理内存物理内存,就是我们将内存条插在主板内存槽上的内存条的容量的大小。看计算机配置的时候,主要看的就是这个物理内存2)虚拟内存Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会

    2022年10月30日
  • 微软Office与金山WPS Office有何私密关系?「建议收藏」

    微软Office与金山WPS Office有何私密关系?

    2022年2月2日
  • 运算放大器的基本原理

    运算放大器的基本原理运算放大器的基本原理来源:21ic作者:关键字:运算放大器  原理    运算放大器(OperationalAmplifier,简称OP、OPA、OPAMP)是一种直流耦合﹐差模(差动模式)输入、通常为单端输出(Differential-in,single-endedoutput)的高增益(gain)电压放大器,因为刚开始主要用于加法,乘法等运算电路中,因而得名。

    2022年5月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号