如果输出太大以至于无法放入 reducer RAM 怎么办? 例如排序任务。在这种情况下,输出与输入一样大。如果您使用单个 reducer ,那么所有数据都无法放入 RAM。那么排序是如何进行的呢?
最佳答案
我想我已经找到答案了。 是的,可以在单个 reducer 中执行任何 map 任务,即使数据大于 reduce 的内存。在 shuffle 阶段,reducer 将数据从 mapper 复制到 reducer 的内存中,并对其进行排序直到溢出。一旦溢出内存,部分数据将存储在 reducers 本地磁盘中,并开始获取新值。一旦再次溢出,它将新数据与先前存储的文件合并。合并后的文件保持排序方式(可能使用外部合并排序)。混洗完成后,中间键值对以排序方式存储。然后对该数据执行reduce任务。由于数据已排序,因此很容易通过在内存中一次获取一大块数据来在内存中进行聚合。
关于hadoop - 是否可以使用单个 reducer 执行任何 mapreduce 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35857668/