Hadoop自然而然地被创建用于处理大数据。但是,如果从Mappers输出的内容也很大,太大而无法适应Reducers内存会怎样?
我们说我们正在考虑一些我们想要聚类的大量数据。我们使用一些分区算法,它会找到指定数量的"组"元素(集群),使得一个集群中的元素相似,但属于不同集群的元素是不相似的。通常需要指定群集数量。
如果我尝试将K-means实现为最着名的聚类算法,那么一次迭代将如下所示:
但是如果我们只有两个集群会发生什么呢?
在这种情况下,大数据集将分为两部分,并且只有两个键,每个键值将包含大数据集的一半。
我不明白的是 - 如果Reducer获得一个键的许多值,该怎么办?他怎么能把它装进RAM?这不是创建Hadoop的原因之一吗?
我只举了一个算法的例子,但这是一个普遍的问题。
答案 0 :(得分:1)
准确地说,在Reducer中你永远不会获得特定键的值列表。您只获得值的迭代器。如果特定键的值的数量太多,则它们不会存储在内存中,但会从本地磁盘读取值。
链接:Reducer
另外请参阅Secondary Sort,这是一个非常有用的设计模式,当你有太多值的场景时。