Hadoop中Partitioner解析
来源:互联网 发布:c语言做游戏 编辑:程序博客网 时间:2024/05/18 13:44
Mapper最终生成的键值对<key,value> 需要送到Reducer进行合并,相同的key会送到同一个Reducer中,哪个key由哪个Reducer来处理的分配过程是由Partitioner规定的,Partitioner接口如下:
public abstract class Partitioner<KEY, VALUE> {
/**
* Get the partition number for a given key (hence record) given the total
* number of partitions i.e. number of reduce-tasks for the job.
*
* <p>Typically a hash function on a all or a subset of the key.</p>
*
* @param key the key to be partioned.
* @param value the entry value.
* @param numPartitions the total number of partitions.
* @return the partition number for the <code>key</code>.
*/
public abstract int getPartition(KEY key, VALUE value, int numPartitions);
}
输入是Map的结果对<key, value>和Reducer的数目,输出则是分配的Reducer(整数编号)。就是指定Mappr输出的键值对到哪一个reducer上去。系统缺省的Partitioner是HashPartitioner,它以key的Hash值对Reducer的数目取模,得到对应的Reducer。这样保证如果有相同的key值,肯定被分配到同一个reducre上。如果有N个reducer,编号就为0,1,2,3……(N-1)。
JobContext.java中如下:
/**
* Get the {@link Partitioner} class for the job.
*
* @return the {@link Partitioner} class for the job.
*/
@SuppressWarnings("unchecked")
public Class<? extends Partitioner<?,?>> getPartitionerClass()
throws ClassNotFoundException {
return (Class<? extends Partitioner<?,?>>)
conf.getClass(PARTITIONER_CLASS_ATTR, HashPartitioner.class);
}
系统缺省的HashPartitioner.java实现如下:
public class HashPartitioner<K, V> extends Partitioner<K, V> {
/** Use {@link Object#hashCode()} to partition. */
public int getPartition(K key, V value,
int numReduceTasks) {
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}
可以继承Partitioner抽象类来实现自己的Partitioner对象MyParatitioner,通过job.setPartitionerClass(myParatitioner);来执行
- Hadoop中Partitioner解析
- hadoop中Partitioner、WritableComparator的自己总结
- Hadoop partitioner及自定义partitioner
- FirstKeyIntPartitioner---hadoop中支持快速查询的自定义Partitioner
- hadoop中的Partitioner分区
- hadoop中的Partitioner分区
- hadoop的partitioner
- hadoop Partitioner 分区
- hadoop中的Partitioner分区
- Hadoop的Partitioner
- Hadoop里的Partitioner
- Hadoop自定义分区Partitioner
- 【hadoop】 4001-Partitioner编程
- Hadoop 中的 Partitioner 过程
- hadoop之partitioner编程
- 深入理解Hadoop Partitioner
- Hadoop:Partitioner的应用
- Hadoop的Partitioner
- 【动态调试so文件】 + AliCrackMe_2分析记录
- 驯服腾讯的QQ(在此我谴责一下国内的软件制造商)
- android 日记
- USACO5.3.2 Window Area(window)
- 后缀数组(不相同的子串个数)——SPOJ 705
- Hadoop中Partitioner解析
- 编程珠玑之第三章习题5
- 关于正则表达式的常规用法
- Unity3D_IOS研究院之构建游戏框架与导出IOS项目(一)
- BASIC-20 数的读法
- Machine Learning - III. Linear Algebra Review线性代数 (Week 1, Optional)
- C Socket Programming server client
- 统揽《运筹学基础》
- MRF,马尔科夫随机场