【问题标题】:Storage of large amount of global variables in MapReduce in javajava中MapReduce中大量全局变量的存储
【发布时间】:2016-01-08 06:04:10
【问题描述】:

如果我们需要使用多个reducer 来执行reduce 作业,我们的全局变量存储在哪里,考虑到一个reducer 不能为该作业的全局数据提供那么多内存。

它们是否存储在 HDFS 中并由每个 reducer 访问?

或者

我们需要明确说明。

【问题讨论】:

    标签: java mapreduce global-variables


    【解决方案1】:

    否。它们不存储在 HDFS 中。我们不需要明确地做任何事情。

    每个Reducer 在单独的JVM 中运行,Reducer 实例将在jvm heap memory 区域中维护自己的变量。所以每个 Reducer 都会有自己的全局或局部变量实例。对象的创建和存储与普通的java程序相同。 MapperReducer 对象没有什么特别之处。

    【讨论】:

    • 如果 reducer 没有那么多内存怎么办?假​​设全局数组的大小为 100Mb,而我们的 reducer 只有 64Mb。或者在更一般的方面,reducer 具有 O(n) 内存,全局变量为 O(n^2)。
    • @RuchiJaiswal 没有那么多内存是什么意思?你是说全局变量存储了大量的数据?
    • @RuchiJaiswal 如果程序访问的内存超过了作为对象状态一部分的可用内存,那么它将抛出 OutOfMemoryError 并退出。对象状态均值,变量是reducer对象状态的一部分。
    • 是的,实际上我正在实现一个 MRC 类算法,根据该算法,单个映射器/缩减器只有 O(n^(1-epsilon)) 内存空间和 O(n^(1-epsilon) ) 用于 n 输入算法的减速器。我想存储 O(n) 数组。
    • @RuchiJaiswal O(n^(1-epsilon)) 所以代码在reduce运行时需要这么多内存来存储临时结果,这会给您带来内存问题。我对吗。我建议你先试一下,不管它是否失败,你得到了什么错误。
    猜你喜欢
    • 2021-09-18
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多