use*_*111 2 hadoop mapreduce reducers mapper hadoop-partitioning
我现在正在学习分区概念.任何人都可以解释下面的代码.我很难理解
public class TaggedJoiningPartitioner extends Partitioner<TaggedKey,Text> {
@Override
public int getPartition(TaggedKey taggedKey, Text text, int numPartitions) {
return taggedKey.getJoinKey().hashCode() % numPartitions;
}
}
Run Code Online (Sandbox Code Playgroud)
这个taggedKey.getJoinKey().hashCode()%numPartitions如何确定要为密钥执行哪个reducer?
任何人都能解释一下这个吗?
一旦你打破了一点点,它并不像你想象的那么复杂.
taggedKey.getJoinKey().hashCode()
将只返回一个整数.每个对象都有一个hashCode()
函数,它只返回一个有希望对该对象本身唯一的数字.TaggedKey
如果您愿意,可以查看源代码以了解它是如何工作的,但您需要知道的是它根据对象的内容返回一个整数.
该%
运营商进行模数师,这是你执行除法后,退还剩余部分.(8%3 = 2,15%7 = 1等).
所以假设你有3个分区器(numPartitions = 3).每次使用3进行模数除法时,无论传递的是什么数字,都可以得到0,1或2.这用于确定3个分区中的哪个将获取数据.
分区器的整个想法是,您可以使用它们对要排序的数据进行分组.如果你想按月排序,你可以将每个字符串"January"传递给第一个分区,"12月"传递给第12个分区,等等.但在你的情况下,它在外面看起来有点令人困惑.但实际上他们只是希望将数据均匀地扩散(希望),因此他们使用简单的散列/模数函数来随机选择分区.