29 MAPREDUCE中的分区Partitioner

简介: 29 MAPREDUCE中的分区Partitioner
需求

根据归属地输出流量统计数据结果到不同文件,以便于在查询统计结果时可以定位到省级范围进行。

分析

Mapreduce中会将map输出的kv对,按照相同key分组,然后分发给不同的reducetask。

默认的分发规则为:根据key的hashcode%reducetask数来分发。

所以:如果要按照我们自己的需求进行分组,则需要改写数据分发(分组)组件Partitioner

自定义一个CustomPartitioner继承抽象类:Partitioner然后在job对象中,设置自定义partitioner: job.setPartitionerClass(CustomPartitioner.class)

实现
/**
 * 定义自己的从map到reduce之间的数据(分组)分发规则 按照手机号所属的省份来分发(分组)ProvincePartitioner
 * 默认的分组组件是HashPartitioner
 * 
 * @author
 * 
 */
public class ProvincePartitioner extends Partitioner<Text, FlowBean> {
  static HashMap<String, Integer> provinceMap = new HashMap<String, Integer>();
  static {
    provinceMap.put("135", 0);
    provinceMap.put("136", 1);
    provinceMap.put("137", 2);
    provinceMap.put("138", 3);
    provinceMap.put("139", 4);
  }
  @Override
  public int getPartition(Text key, FlowBean value, int numPartitions) {
    Integer code = provinceMap.get(key.toString().substring(0, 3));
    return code == null ? 5 : code;
  }
}


目录
相关文章
|
7月前
|
分布式计算 Hadoop Java
MapReduce编程:自定义分区和自定义计数器
MapReduce编程:自定义分区和自定义计数器
110 0
|
4月前
|
分布式计算 负载均衡 Hadoop
MapReduce 分区器的作用与重要性
【8月更文挑战第31天】
75 1
|
7月前
|
数据采集 分布式计算 DataWorks
DataWorks产品使用合集之在DataWorks中,在MapReduce作业中指定两个表的所有分区如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
92 0
|
分布式计算 DataWorks
DataWorks想在mapreduce中指定两个表的所有分区
DataWorks想在mapreduce中指定两个表的所有分区,
50 1
|
7月前
|
分布式计算
MapReduce【自定义分区Partitioner】
MapReduce【自定义分区Partitioner】
|
存储 分布式计算 Hadoop
Hadoop中的MapReduce框架原理、Shuffle机制、Partition分区、自定义Partitioner步骤、在Job驱动中,设置自定义Partitioner、Partition 分区案例
Hadoop中的MapReduce框架原理、Shuffle机制、Partition分区、自定义Partitioner步骤、在Job驱动中,设置自定义Partitioner、Partition 分区案例
Hadoop中的MapReduce框架原理、Shuffle机制、Partition分区、自定义Partitioner步骤、在Job驱动中,设置自定义Partitioner、Partition 分区案例
|
分布式计算 Hadoop 存储
[Hadoop]MapReduce中的Partitioner与Combiner
Partitioners负责划分Maper输出的中间键值对的key,分配中间键值对到不同的Reducer。Maper输出的中间结果交给指定的Partitioner,确保中间结果分发到指定的Reduce任务。
1586 0
|
存储 分布式计算 Hadoop
[Hadoop]MapReduce中的Partitioner
partitioner在处理输入数据集时就像条件表达式(condition)一样工作。分区阶段发生在Map阶段之后,Reduce阶段之前。
1232 0
|
分布式计算
MapReduce编程例子之Combiner与Partitioner
MapReduce编程例子之Combiner与Partitioner
264 0
MapReduce编程例子之Combiner与Partitioner
|
分布式计算
MapReduce自定义分区
MapReduce自定义分区