【问题标题】:what if data to big for 1 reducer (RHadoop)?如果 1 个减速器(RHadoop)的数据变大怎么办?
【发布时间】:2020-04-14 10:34:08
【问题描述】:

我是大数据和 hadoop 方面的新手。我尝试使用 mapreduce 找到中位数。据我所知,mapper 将数据传递给 1 个 reducer,然后 1 个 reducer 排序并使用 median() 函数找到中间值。

R 在内存中运行,如果数据太大而无法存储在 1 台计算机上运行的 1 个 reducer 中怎么办?

这是我用 RHadoop 查找中位数的代码示例。

map <- function(k,v) {
    key <- "median"
    keyval(key, v)
}
reduce <- function(k,v) {
    keyval(k, median(v))
}

medianMR <- mapreduce (
    input= random, output="/tmp/ex3",
    map = map, reduce = reduce
)

【问题讨论】:

    标签: r hadoop mapreduce rhadoop


    【解决方案1】:

    视情况而定,如果我们将 Reducer 的数量设置为 0(通过设置 job.setNumreduceTasks(0)),则不会执行任何 reducer,也不会发生聚合。地图用它的 InputSplit 完成所有任务,而减速器不做任何工作。

    在您的情况下,这还取决于您是否希望在可能需要超过 1个减速机。根据输入集中值的范围和唯一性,您可以引入组合器来输出每个值的频率 - 减少发送到单个减速器的地图输出数量。然后,您的 reducer 可以使用排序值/频率对来识别中位数。

    另一种方法,如果您认为您的数据对于 1 个 reducer 来说太笨重,则可以使用自定义分区器。这通过范围桶分配密钥(0-1000 到减速器 1,1001-2000 到减速器 3,...减速器 n)。这将保证一些辅助工作来分析 reducer 输出并执行最终的中值计算(例如,知道每个 reducer 中的键数,您可以计算哪个 reducer 输出将包含中值。

    你可以看看这个可能有帮助的答案 - number of reducers for 1 task in MapReduce

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 2011-07-25
      • 1970-01-01
      相关资源
      最近更新 更多