Hadoop MapReduce - 具有少量键和每个键许多值的 Reducer

Hadoop MapReduce - Reducer with small number of keys and many values per key

Hadoop 天生就是为处理大数据而创建的。但是,如果 Mappers 的输出也很大,太大而无法容纳 Reducers 内存,会​​发生什么情况?

假设我们正在考虑要聚类的大量数据。我们使用一些分区算法,将找到指定数量的 "groups" 个元素(簇),使得一个簇中的元素相似,但属于不同簇的元素不相似。通常需要指定簇数。

如果我尝试将 K-means 实施为最著名的聚类算法,一次迭代将如下所示:

但是如果我们只有两个集群会怎样?

在那种情况下,大数据集将被分成两部分,并且只有两个键,每个键的值将包含大数据集的一半。

我不明白的是 - 如果 Reducer 为一个键获取多个值怎么办?他怎么能把它装进它的RAM??这不正是 Hadoop 诞生的原因之一吗?

我只是举了一个算法的例子,但这是一个一般性的问题。

这正是在 Reducer 中您永远无法获得特定键的值列表的原因。您只会获得值的迭代器。如果特定键的值数量太多,它们不会存储在内存中,而是从本地磁盘读取值。

链接:Reducer

另请参阅二次排序,当您遇到值过多的情况时,这是一种非常有用的设计模式。