【问题标题】:Loading the same file in memory for each mapper hadoop为每个映射器 hadoop 在内存中加载相同的文件
【发布时间】:2012-11-02 03:19:39
【问题描述】:

我遇到了一个算法,其中相同的文件被加载到每个映射器的主内存中。

我假设,对于每个映射器,我们必须使用分布式缓存来获取文件,读取文件并将其加载到内存中。当我实现这个时,我发现地图需要很长时间才能完成。我假设,这是因为每次从本地磁盘读取每个映射器值的文件。

我的实施是否正确?

还有其他建议吗?

请帮忙!提前致谢!

【问题讨论】:

    标签: java hadoop mapreduce


    【解决方案1】:

    您想在 Mapper setup() 方法中从本地磁盘读取。使用实例变量来保持引用。

    【讨论】:

    • 我已经使用job conf,旧的api实现了,有没有办法在旧的api中做到这一点?
    • 看一下configure()方法。
    • 所以,如果我在map方法之外的configure方法中读取文件,那么我就不必一次又一次地读取它。我说的对吗?
    • 是的。这就是 configure() 方法的 for()。如果在所有 map() 调用之后您有需要做的事情,您可以将该逻辑放在 close() 方法中。请注意,每个输入切片都会调用一次 configure() 和 close() 方法。如果 10 个映射器每个运行 3 次(30 个切片,每个切片有许多记录)来处理所有输入,则 configure() 和 close() 将分别调用 30 次。
    • 非常感谢!因此,我将读取文件 30 次以处理整个输入。我说的对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多