zoukankan      html  css  js  c++  java
  • [MapReduce_8] MapReduce 中的自定义分区实现


    0. 说明

      设置分区数量 && 编写自定义分区代码


    1. 设置分区数量

      分区(Partition)

      分区决定了指定的 Key 进入到哪个 Reduce 中

      分区目的:把相同的 Key 发送给同一个 Reduce


      默认 hash 分区,算法

    // 返回的分区号
    (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks

      设置分区数

    job.setNumReduceTasks(3);

     2. 代码编写

      在 [MapReduce_1] 运行 Word Count 示例程序 代码基础之上进行以下操作

      实现将文本中的数字存放在分区0,数字之外的内容放置到分区1

      【2.1 编写 MyPartition.java】

    package hadoop.mr.partition;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Partitioner;
    
    
    /**
     * MapReduce 自定义分区
     */
    public class MyPartition extends Partitioner<Text, IntWritable> {
        /**
         * 自定义分区将数字放在0号分区,其余放在1号分区
         */
        @Override
        public int getPartition(Text key, IntWritable value, int numPartitions) {
            try {
                Integer.parseInt(key.toString());
                return 0;
            } catch (Exception e) {
                return 1;
            }
        }
    }

      【2.2 修改 WCApp.java】

       

      【2.3 最终结果】

          


  • 相关阅读:
    学习进度笔记13
    学习进度笔记12
    学习进度笔记11
    学习进度笔记10
    学习进度笔记9
    《架构之美》读书笔记1
    学习进度笔记8
    电话拨号盘(带触摸振动反馈)
    堆排序(小根堆)
    图论起步(长期更新)
  • 原文地址:https://www.cnblogs.com/share23/p/9779593.html
Copyright © 2011-2022 走看看