Nad*_*nem 6 hadoop mapreduce partitioner
我想问一下 Hadoop 分区器,它是在 Mappers 中实现的吗?。如何衡量使用默认哈希分区器的性能 - 是否有更好的分区器来减少数据倾斜?
谢谢
分区器不在映射器内。
\n\n以下是每个映射器中发生的过程 -
\n\n下面是每个Reducer中发生的过程
\n\n现在,每个Reducer从每个映射器收集所有文件,它进入排序/合并阶段(排序已经在映射器端完成),该阶段合并所有映射输出并保持排序顺序。
在reduce 阶段,为排序输出中的每个键调用reduce 函数。
下面是代码,说明了键分区的实际过程。getpartition() 将返回特定键必须根据其哈希码发送到的分区号/化简器。每个键的哈希码必须是唯一的,并且在整个环境中,键的哈希码应该是唯一且相同的。为此,hadoop 为其密钥实现了自己的哈希码,而不是使用 java 默认哈希码。
\n\n Partition keys by their hashCode(). \n\n public class HashPartitioner<K, V> extends Partitioner<K, V> {\n public int getPartition(K key, V value,\n int numReduceTasks) {\n return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;\n }\n\n }\n
Run Code Online (Sandbox Code Playgroud)\n