我正在使用Hive运行Hadoop作业,实际上应该在许多文本文件中使用uniq
行。在reduce步骤中,它为每个键选择最近加时间戳的记录。
Hadoop是否保证每个具有相同键的记录(通过映射步骤输出)将转到单个reducer,即使群集中有许多Reducer正在运行?
我担心在使用相同密钥的一组记录中间发生shuffle后,mapper输出可能会被拆分。
答案 0 :(得分:14)
密钥的所有值都发送到同一个reducer。有关详细讨论,请参阅此Yahoo! tutorial。
此行为由分区程序决定,如果使用默认分区程序,则可能不为真。
答案 1 :(得分:5)
实际上,不!您可以创建Partitioner
,每次调用getPartition
时,都会将相同的密钥发送到不同的reducer。对于大多数应用程序来说,这通常不是一个好主意。
答案 2 :(得分:3)
是的,Hadoop确保所有相同的密钥都会转到同一个Reducer。这是使用分区函数实现的,该函数使用散列函数来存储密钥。
有关分区过程的详细信息,请查看以下内容:Partitioning Data
它具体讨论了处理相同键的不同映射器如何确保给定值的所有键最终都在同一个分区中,因此由相同的reducer处理。