Hadoop 减速器在内存中的值?

2023-11-26

我正在编写一个 MapReduce 作业,最终可能会在减速器中产生大量值。我担心所有这些值都会立即加载到内存中。

底层实现是否Iterable<VALUEIN> values根据需要将值加载到内存中? Hadoop:权威指南似乎表明情况确实如此,但没有给出“权威”答案。

减速器输出将比输入值大得多,但我相信输出会根据需要写入磁盘。


你读的书是正确的。减速器并不将所有值存储在内存中。相反,当循环遍历 Iterable 值列表时,每个 Object 实例都会被重复使用,因此它在给定时间只保留一个实例。

例如,在下面的代码中,objs ArrayList 在循环后将具有预期的大小,但每个元素都将相同,因为每次迭代都会重新使用 Text val 实例。

public static class ReducerExample extends Reducer<Text, Text, Text, Text> {
public void reduce(Text key, Iterable<Text> values, Context context) {
    ArrayList<Text> objs = new ArrayList<Text>();
            for (Text val : values){
                    objs.add(val);
            }
    }
}

(如果由于某种原因您确实想对每个 val 采取进一步的操作,您应该制作一个深层副本,然后存储它。)

当然,即使是单个值也可能大于内存。在这种情况下,建议开发人员采取措施削减前面Mapper中的数据,使该值不要太大。

UPDATE:请参阅 Hadoop 权威指南第 2 版第 199-200 页。

This code snippet makes it clear that the same key and value objects are used on each 
invocation of the map() method -- only their contents are changed (by the reader's 
next() method). This can be a surprise to users, who might expect keys and vales to be 
immutable. This causes prolems when a reference to a key or value object is retained 
outside the map() method, as its value can change without warning. If you need to do 
this, make a copy of the object you want to hold on to. For example, for a Text object, 
you can use its copy constructor: new Text(value).

The situation is similar with reducers. In this case, the value object in the reducer's 
iterator are reused, so you need to copy any that you need to retain between calls to 
the iterator.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop 减速器在内存中的值? 的相关文章

随机推荐

  • CAShapeLayer 的框架和边界

    我正在研究CAShapeLayer 并尝试绘制非线性路径 我想将框架设置为CAShapeLayer 所以我可以使用CGPathGetPathBoundingBox从中获取帧的方法CGPathRef 这是代码 CGMutablePathRef
  • 什么是<?超级 T> 语法? [复制]

    这个问题在这里已经有答案了 我无法理解以下语法 public class SortedList lt T extends Comparable lt super T gt gt extends LinkedList lt T gt 我看到类
  • Mockito junit 5 模拟构造函数

    我想模拟构造函数并在调用构造函数时返回模拟对象 这可以使用 powermockito 的 whenNew 方法来实现 如下所示 PowerMockito whenNew ClassName class withAnyArguments th
  • 从文本文件中删除特定行?

    我需要从文本文件中删除确切的一行 但我一生都无法弄清楚如何执行此操作 任何建议或例子将不胜感激 相关问题 从文本文件中删除行的有效方法 C 如果要删除的行是基于该行的内容 string line null string line to de
  • d3.js 中子节点朝向多个侧面的树(类似于家谱)

    var treeData name Device parent null var treeData2 name Device parent null document ready function var margin top 20 rig
  • SQLAlchemy @property 使用 dump_only 在 Marshmallow 中导致“未知字段”错误

    我正在使用flask marshmallow marshmallow v3 0 0rc1 flask marshmallow 0 9 0 和flask sqlalchemy sqlalchemy 1 2 16 flask sqlalchem
  • 矢量与数组性能

    在另一个线程中 我开始了关于向量和数组的讨论 其中我主要扮演魔鬼代言人的角色 按下按钮 然而 在这个过程中 我偶然发现了一个让我有点困惑的测试用例 我想对此进行一次真正的讨论 关于我因扮演魔鬼代言人而受到的 虐待 开始一个真正的测试用例 现
  • 在 Powershell 中使用参数调用 Invoke-Expression

    我用 C 编写了一个 powershell 模块 其中包含一堆 cmdlet 例如 Add VM 这些 cmdlet 会访问 API 并拉回数据 但为了与产品的 ssh CLI 保持一致 我编写了一个名为 newtask 的函数 它接受 a
  • Heroku Postgres:此连接已关闭

    我开发了一个小型 Heroku Grails Postreg 应用程序 部署后 20 分钟左右它就会正常工作 之后我总是得到 This connection has been closed Stacktrace follows Heroku
  • 从 Eclipse 查看本机代码

    我有一个使用本机方法调用的 java 应用程序 有没有办法在 eclipse 中查看此代码 我可以获得这个本机库的源代码 但不知道如何在 IDE 中链接 如果有人告诉我如何调试这个本机方法 也会很有帮助 不是完整的答案 但 Eclipse
  • 如何在 Javascript 中使用循环生成事件处理程序? [复制]

    这个问题在这里已经有答案了 例如 我有 10 个从 AJAX 响应生成的 a 标签 a href b1 a a href b2 a a href b3 a a href b4 a a href b5 a a href b6 a a href
  • 如何监听VueJS中的所有自定义事件?

    在我的 VueJS 应用程序中 我有一个 Vue 实例 我将其用作事件总线 用于在组件之间发送数据 就是这样 import Vue from vue export const EventBus new Vue 然后在我的组件中导入 Even
  • 将多个选择器与伪类关联

    有没有办法让多个选择器与伪类关联 换句话说 我想让它在悬停或聚焦于锚点 图像或按钮时 它们周围会有一个特殊的边框 我尝试过这个 在黑暗中拍摄 a button img hover a button img focus border 2px
  • 隐式使用 Scala 实现类型相等

    我一直在阅读一些有关 Scala 类型级编程的内容 主要是 Apocalisp 博客 还有 Alexander Lehmann 的 YouTube 演讲 我有点坚持我认为可能非常基本的事情 即使用隐式比较两种类型 如下所示 implicit
  • 使用本机滚动时使滚动条在离子内容中可见

    我在用overflow scroll true 让 ionic 使用原生滚动
  • 如何获取sbt多项目构建中的子项目路径

    我正在尝试获取 sbt 中多项目构建中子项目的位置 但我只能获取根项目目录 lazy val copyToResources taskKey Unit copies the assembly jar private val rootLoca
  • iOS 设备和蓝牙

    有谁知道外部蓝牙设备和 iPhone iPad 4S 及以上 之间的最大数据传输速率 我读到 BT3 0 中的增强数据速率为 24Mbs iPhone 可以支持吗 使用 BT4 0 LTE 的最大数据量是多少 多谢你们 iPhone iPa
  • 使用 SQLDataReader 代替记录集

    我对此很陌生并且有这个问题 我可以使用 SQLDataReader 代替 Recordset 吗 我想在 SQLDataReader 中实现以下结果 Dim dbConn As New ADODB Connection Dim rs As
  • AngularJS 和 jQuery 冲突

    我用 AngularJs 和 jQuery 编写了一些代码 只有一种方法有效 要么是 AngularJs 要么是 jQuery jQuery 和 AngularJs 似乎互相冲突 一旦我包含这两个库 它们就不再正常工作 如果我只包含其中之一
  • Hadoop 减速器在内存中的值?

    我正在编写一个 MapReduce 作业 最终可能会在减速器中产生大量值 我担心所有这些值都会立即加载到内存中 底层实现是否Iterable