hadoop提供的默认hashpartioner的替代方法

dgiusagp  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(212)

我有一个hadoopmapreduce程序,它不均匀地分配密钥。有些减速机最后有两个键,有些有一个键,有些没有。如何强制hadoop将每个具有特定密钥的分区分配给一个单独的reducer。我有九个独一无二的钥匙:

0,0
0,1
0,2
1,0
1,1
1,2
2,0
2,1
2,2

我设定了任务。setnumreducetasks(9);但是hashpartitioner似乎将两个键散列到同一个hashcode中,导致重叠的键被发送到同一个reducer,并使一些reducer处于空闲状态。
一个随机分区器能解决这个问题吗?它会将每个唯一的密钥发送给一个随机的reducer,保证每个reducer接收一个密钥。如何启用它并替换默认值?
编辑:
有人能解释一下为什么我的输出是这样的吗

-rw-r--r--   1 user supergroup          0 2018-04-19 18:58 outbin9/_SUCCESS
drwxr-xr-x   - user supergroup          0 2018-04-19 18:57 outbin9/_logs
-rw-r--r--   1 user supergroup        869 2018-04-19 18:57 outbin9/part-r-00000
-rw-r--r--   1 user supergroup       1562 2018-04-19 18:57 outbin9/part-r-00001
-rw-r--r--   1 user supergroup        913 2018-04-19 18:58 outbin9/part-r-00002
-rw-r--r--   1 user supergroup       1771 2018-04-19 18:58 outbin9/part-r-00003
-rw-r--r--   1 user supergroup        979 2018-04-19 18:58 outbin9/part-r-00004
-rw-r--r--   1 user supergroup        880 2018-04-19 18:58 outbin9/part-r-00005
-rw-r--r--   1 user supergroup          0 2018-04-19 18:58 outbin9/part-r-00006
-rw-r--r--   1 user supergroup          0 2018-04-19 18:58 outbin9/part-r-00007
-rw-r--r--   1 user supergroup        726 2018-04-19 18:58 outbin9/part-r-00008

较大的组part-r-00001和part-r-00003分别接收到密钥1,0和2,2/0,0和1,2。注意,part-r-00006和part-r-00007是空的。

ntjbwcob

ntjbwcob1#

HashPartitioner 是hadoop中的默认分区器,它为每个唯一的“键”创建一个reduce任务。在对reduce函数的一次调用中,具有相同键的所有值都会转到reducer的同一个示例。
如果用户有兴趣将一组特定的结果存储在不同的缩减器中,那么用户可以编写自己的分区器实现。它可以是通用的,也可以定制为您希望在用户应用程序中使用的特定数据类型或值。 Custom Partitioner 是一个允许您根据用户条件将结果存储在不同还原器中的过程。通过将partitioner设置为按键分区,我们可以保证,相同键的记录将转到相同的reducer。分区器确保只有一个reducer接收该特定键的所有记录。
示例链接

相关问题