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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 机器学习中最常见的四种分类模型

    机器学习中最常见的四种分类模型点击蓝字关注我,有干货领取!作者:JasonBrownlee翻译:候博学前言机器学习是一个从训练集中学习出算法的研究领域。分类是一项需要使用机器学习算法的任务,该算法学习如何为数据集…

    2022年10月5日
    1
  • 黑客入门,从HTB开始

    黑客入门,从HTB开始Hackthebox是国外的一个靶机平台,里面的靶机包含多种系统类型,并且里面可以利用的漏洞类型多种多样,有很多靶机其实非常贴近实战情景。因此HTB是一个很好的学习渗透测试靶场。之前在HTB也玩过一些机器。里面的机器难度有好几个档次,insane难度的一般都是极其困难的,这种机器一般让我对着大神的Writeup我可能都没有办法复现出来。之前也有在公众号上分享过几篇H…

    2022年4月26日
    53
  • iPhone 各机型屏幕尺寸

    iPhone 各机型屏幕尺寸iPhone各机型屏幕尺寸手机设备型号屏幕尺寸分辨率点数(pt)屏幕显示模式分辨率像素(px)屏幕比例iPhoneSE4.0吋320×568@2x640x113616:9iPhone6/6s/7/8/SE24.7吋375×667@2x750x133416:9iPhone6p/7p/8p5.5吋414×736@3x1242x220816:9iPhoneXR/116.1吋414×896@2x828x179219

    2022年5月14日
    130
  • PHP json_decode 出错

    PHP json_decode 出错json串中有时会包含json_decode解析不了的字符串,可以使用下面封装好的来处理。下载地址:Services_JSON

    2022年7月17日
    12
  • springaop的使用_Spring注解

    springaop的使用_Spring注解目录SpringAOP简介AOP概念SpringAOP简单流程图SpringAOP之Annotation前置通知(Beforeadvice)返回后通知(Afterreurningadvice)抛出异常后通知(Afterthrowingadvice)后置通知(After(finally)advice)环绕通知(Aroundadvice)引入…

    2022年8月11日
    9
  • 2022年计算机考研过线就能上的学校[通俗易懂]

    2022年计算机考研过线就能上的学校[通俗易懂]部分考研同学本科是双非计算机类专业,基础能力一般,编程能力较弱,那么对于这类考生,主要还是以求稳为主,选择一个分数略低,复试较简单的学校,上岸几率就会加大。那么2022年计算机考研过线上岸率高的院校有哪些呢?

    2022年6月6日
    340

发表回复

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

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