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


相关推荐

  • 如何彻底禁止易升更新Win10自动更新「建议收藏」

    如何彻底禁止易升更新Win10自动更新「建议收藏」Win10版本:家庭中文版64位版本1803[10.0.17134.285]]文章版本:v1.9最后修改日期:2019年5月11日正文第一步关闭系统更新服务下载WindowsUpdateBlockerv1.2,按照下图所示操作下载地址:点我第二步(禁止安装Windows易升):1打开C盘,在根目录下新建一个文件夹,将此文件夹重命名…

    2022年6月4日
    49
  • 深入浅出Yolo系列之Yolov5核心基础知识完整讲解

    大白在之前写过《Yolov3&Yolov4核心基础知识的完整讲解》:https://blog.csdn.net/nan355655600/article/details/106246625/对Yolov4的相关基础知识做了比较系统的梳理,但Yolov4后不久,又出现了Yolov5,虽然作者没有放上和Yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的。很多人考虑到Yolov5的创新性不足,对算法是否能够进化,称得上Yolov5而议论纷纷。但既然称之为Yolov5,也有很多非常不

    2022年4月6日
    208
  • android进程间通信的方式_Android进程注入

    android进程间通信的方式_Android进程注入定义多进程Android应用中使用多进程只有一个办法(用NDK的fork来做除外),就是在AndroidManifest.xml中声明组件时,用android:process属性来指定。不知定process属性,则默认运行在主进程中,主进程名字为包名。android:process=package:remote,将运行在package:remote进程中,属于全局进程,其他具有相同…

    2022年10月11日
    0
  • 普天通信JavaEE开发岗面试题

    普天通信JavaEE开发岗面试题

    2021年11月14日
    54
  • SpringCloud-Alibaba-Sentinel-服务降级-热点限流-服务熔断

    SpringCloud-Alibaba-Sentinel-服务降级-热点限流-服务熔断前言:除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方API等。例如,支付的时候,可能需要远程调用银联提供的API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用熔断策略Sentinel提供

    2022年6月12日
    23
  • 基于云计算的大数据平台基础设施建设实践

    基于云计算的大数据平台基础设施建设实践大数据平台基础建设当前的趋势是云化与开放,这个平台需要可以提供各类大数据相关PaaS服务,也需要使各类服务间可以简单灵活的组合来满足多变及定制的需求。如何在云上提供弹性、敏捷,却不失稳定和高性能的大数据平台?如何高效的利用云计算的特点来开发大数据平台?本期青云QingCloud系统工程师周小四给大家带来基于云计算的大数据平台基础设施建设以及其架构特点的主题分享。以下是分享原文。——————大…

    2022年5月16日
    42

发表回复

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

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