使用Hadoop,我的reducer是否保证使用相同的密钥获取所有记录?

使用Hadoop,我的reducer是否保证使用相同的密钥获取所有记录?,hadoop,mapreduce,hive,uniq,Hadoop,Mapreduce,Hive,Uniq,我正在使用Hive运行一个Hadoop作业,实际上它应该是许多文本文件中的uniq行。在reduce步骤中,它为每个键选择最近的时间戳记录 Hadoop是否保证映射步骤输出的每个具有相同键的记录都将被分配到一个reducer,即使多个reducer在集群中运行? 我担心映射器的输出可能在同一密钥记录集的中间发生洗牌后发生分裂。 < P>键的所有值都被发送到同一个减速器。更多讨论请参见此 此行为由分区程序决定,如果您使用的分区程序不是默认的分区程序,则可能不正确。是的,Hadoop确实保证所有相同

我正在使用Hive运行一个Hadoop作业,实际上它应该是许多文本文件中的
uniq
行。在reduce步骤中,它为每个键选择最近的时间戳记录

Hadoop是否保证映射步骤输出的每个具有相同键的记录都将被分配到一个reducer,即使多个reducer在集群中运行?


我担心映射器的输出可能在同一密钥记录集的中间发生洗牌后发生分裂。

< P>键的所有值都被发送到同一个减速器。更多讨论请参见此


此行为由分区程序决定,如果您使用的分区程序不是默认的分区程序,则可能不正确。

是的,Hadoop确实保证所有相同的键都将转到同一个缩减器。这是通过使用分区函数实现的,该分区函数使用散列函数对密钥进行存储

有关分区过程的更多信息,请查看以下内容:


它特别讨论了处理同一个键的不同映射程序如何确保给定值的所有键都位于同一分区中,从而由同一个缩减器处理。

实际上,不是!您可以创建一个
Partitioner
,它在每次调用
getPartition
时将相同的键发送到不同的reducer。对于大多数应用程序来说,这通常不是一个好主意。

事实上,我不确定这一点。看见我没有在程序中修改分区程序。