【问题标题】:Is it possible to perform any mapreduce task with a single reducer?是否可以使用单个 reducer 执行任何 mapreduce 任务?
【发布时间】:2016-06-21 19:48:35
【问题描述】:

如果输出太大以至于无法放入减速器 RAM 中怎么办? 例如排序任务。在这种情况下,输出与输入一样大。如果您使用单个 reducer,则所有数据都无法放入 RAM。那么排序是如何进行的呢?

【问题讨论】:

  • 您认为为什么会在 RAM 中发生这种情况?它完全在磁盘上完成。
  • 它是否像外部合并排序一样完成?在聚合的情况下会发生什么?它会为每个 reduce() 调用写入磁盘吗?

标签: hadoop mapreduce reduce bigdata


【解决方案1】:

我想我已经得到了答案。 是的,即使数据大于 reduce 的内存,也可以在单个 reducer 中执行任何 map 任务。在 shuffle 阶段,reducer 将数据从 mapper 复制到 reducer 的内存并对其进行排序,直到溢出。一旦它溢出内存,部分数据将存储在 reducers 本地磁盘中,并开始获取新值。一旦再次溢出,它将新数据与先前存储的文件合并。合并后的文件保持排序方式(可能使用外部合并排序)。一旦对中间键进行改组,值对就会以排序的方式存储。然后对该数据执行reduce任务。随着数据的排序,很容易通过一次在内存中获取一大块数据来在内存中进行聚合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多