14

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

Hadoop 是否保证每个具有相同键的记录(由 map 步骤输出)都将转到单个 reducer,即使多个 reducer 在集群中运行?

我担心在具有相同键的一组记录中间发生随机播放后,映射器输出可能会被拆分。

4

3 回答 3

14

一个键的所有值都发送到同一个 reducer。看到这个雅虎!教程进行更多讨论。

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

于 2010-04-13T22:53:11.600 回答
5

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

于 2010-04-14T12:13:20.670 回答
3

是的,Hadoop 确实保证所有相同的键都将进入同一个 Reducer。这是使用分区函数实现的,该函数使用散列函数对键进行分桶。

有关分区过程的更多信息,请查看:分区数据

它特别讨论了处理相同键的不同映射器如何确保给定值的所有键最终都在同一个分区中,从而由同一个reducer处理。

于 2010-04-13T22:53:56.777 回答