Shuffle 机制

时间:2019-05-31 21:25:20   收藏:0   阅读:138

1. 概述

2. Partition 分区

// 默认 Partitioner 分区
public class HashPartitioner<K, V> extends Partitioner<K, V> {
    public int getPartition(K key, V value, int numReduceTasks) {
      return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
    }
}

2.1 自定义 Partitioner 步骤

// 1. 自定义类继承 Partitioner, 重写 getPartition() 方法
public class CustomPartitioner extends Partitioner<Text, FlowBean> {
    
    @Override
    public int getPartition(Text key, FlowBean value, int numPartitions) {
      // 控制区代码逻辑

      ......
    }
}

// 2. 在 Job 驱动中,设置自定义 Partitioner
job.setPartitionerClass(CustomPartitioner.class);

// 3. 自定义 Partition 后,要根据自定义 Partitioner 的逻辑设置相应数量的 ReduceTask
job.setNumReduceTasks(自定义的数量);

2.2 分区总结

3. WritableComparable 排序

3.1 排序概述

3.1 排序分类

3.2 Combiner 合并

3.3 GroupingComparator 分组(辅助排序)

// 分组排序步骤:
// 1. 自定义类继承 WritableComparator
// 2. 重写 compare()方法
// 3. 创建一个构造将比较对象的类传给父类

4. Shuffle 机制

技术分享图片

原文:https://www.cnblogs.com/linkworld/p/10957311.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!