前言
在学习Java基础的过程中,泛型绝对算得上是一个比较难理解的知识点,尤其对于初学者而言,而且就算是已经有基础的Java程序员,可能对泛型的理解也不是那么透彻,属于那种看了明白,时间长了就忘的那种,究其根本,还是对泛型不够理解。
大部分人对泛型的认识:“基础知识,但是比较模糊”
public class HashPartitioner<K2, V2> implements Partitioner<K2, V2> {
public void configure(JobConf job) {}
/** Use {@link Object#hashCode()} to partition. */
public int getPartition(K2 key, V2 value,
int numReduceTasks) {
// key的hash值与integer的最大值取与然后对ReduceTask的个数取余
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}
hash的好处是可以很key的分布更加随机,但是这样会将一些不同的key放在同一个分区中,这并不是我们所期望的。
[](()3.自定义Partitioner
面对HashPartitioner所具有的局限,我们可以通过自定义Partitioner来解决,如下:
[](()3.1 实现自定义分区器
import java.util.HashMap;
import java.util.Map;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;
/*
Java泛型与MapReduce自定义分区器实践

本文介绍了Java泛型的常见误解,并详细讲解了如何在MapReduce中实现自定义分区器以改进数据分布。通过创建CustomPartitioner类,避免了HashPartitioner的局限,将手机号码的前三位作为分区依据。此外,还提到了Kafka实战笔记的概要,包括Kafka入门、生产者、消费者、集群等核心概念。
最低0.47元/天 解锁文章
2076

被折叠的 条评论
为什么被折叠?



