我在努力理解 partitioning
在 MapReduce
我知道hadoop有一个默认的分区器,叫做 HashPartitioner
,而partitioner有助于决定给定键将转到哪个reducer。
从概念上讲,它是这样工作的:
hashcode(key) % NumberOfReducers, where `key` is the key in <key,value> pair.
我的问题是:
你怎么知道的 HashPartitioner
计算密钥的哈希码?只需调用键的hashcode(),或者 HashPartitioner
使用其他逻辑来计算密钥的哈希码?
有人能帮我理解吗?
1条答案
按热度按时间pu82cl6c1#
默认的分区器只需使用
hashcode()
方法并计算分区。这给了你一个实施你的计划的机会hascode()
调整键的分区方式。从javadoc:
对于实际代码,它只返回
(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks
:编辑:在自定义分区器上添加详细信息
您可以为partitioner添加一个不同的逻辑,它甚至可能不使用
hashcode()
完全。因为自定义分区器可以通过扩展
Partitioner
```public class CustomPartitioner extends Partitioner<Text, Text>
public static class CustomPartitioner extends Partitioner<Text, Text>{
@Override
public int getPartition(Text key, Text value, int numReduceTasks){
String emp_dept = key.getDepartment();
if(numReduceTasks == 0){
return 0;
}
}