如果数据变大,1减速机(rhadoop)会怎样?

j8yoct9x  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(322)

我对大数据和hadoop还不熟悉。我试着用mapreduce找到中间带。据我所知,mapper将数据传递给1个reducer,然后1个reducer排序并使用 median() 功能。
r在内存中运行,那么如果数据太大而无法存储在运行在一台计算机上的一个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
)
qjp7pelc

qjp7pelc1#

根据情况,如果我们将减速机的数量设置为0(通过设置作业)。setnumreducetasks(0)),则不会执行任何缩减器,也不会进行聚合。map使用inputsplit执行所有任务,而reducer不执行任何操作。
在您的情况下,这还取决于您是否希望在一个可能需要1个以上减速机的序列中找到中位数。根据输入集中值的范围和唯一性,您可以引入一个组合器来输出每个值的频率—减少发送到单个缩减器的map输出的数量。然后,reducer可以使用排序值/频率对来识别中值。
另一种方法,如果你认为你的数据对于1 reducer来说太大了,那就是定制分区器。这将按范围桶(0-1000到减速器1,1001-2000到减速器3,…减速器n)分配键。这将保证一些次要工作来分析减速机输出并执行最终的中值计算(例如知道每个减速机中的键数,您可以计算哪个减速机输出将包含中值)。
您可以看看这个答案,它可能会有所帮助-mapreduce中一个任务的reducer数

相关问题