运行Hadoop时如何避免OutOfMemoryException?

2024-02-05

我正在运行一个超过 1.5 TB 数据的 Hadoop 作业,并进行大量模式匹配。我有几台每台 16GB RAM 的机器,我总是得到OutOfMemoryException使用这些数据来完成这项工作(我正在使用 Hive)。

我想知道如何最佳设置选项HADOOP_HEAPSIZE在文件中hadoop-env.sh这样,我的工作就不会失败。是否有可能设置此选项,这样我的工作就不会失败?

当我设置HADOOP_HEAPSIZE到 1.5 GB 并从查询中删除了一半的模式匹配,作业成功运行。那么,如果这个选项无助于避免工作失败,它还有什么用呢?

我想要对最佳设置进行更多实验,但由于这些作业需要超过 10 小时才能运行,因此我寻求您的建议。


作业失败还是您的服务器崩溃了?如果您的作业由于节点上的 OutOfMemmory 而失败,您可以调整最大映射和化简器的数量,JVM 会选择每个,这样就永远不会发生这种情况。 mapred.child.java.opts(默认为 200Xmx)通常需要根据数据节点特定硬件进行增加。

http://allthingshadoop.com/2010/04/28/map-reduce-tips-tricks-your-first-real-cluster/ http://allthingshadoop.com/2010/04/28/map-reduce-tips-tricks-your-first-real-cluster/

最大任务可以在名称节点上设置,也可以在可能具有不同硬件配置的数据节点上覆盖(并设置为最终)。最大任务是为映射器和缩减器设置的。要计算此值,它基于 CPU(核心)和您拥有的 RAM 量以及您在 mapred.child.java.opts 中设置的 JVM 最大值(默认值为 200)。 Datanode 和 Tasktracker 均设置为 1GB,因此对于 8GB 机器,mapred.tasktracker.map.tasks.maximum 可以设置为 7,mapred.tasktracker.reduce.tasks.maximum 设置为 7(使用 mapred.child.java) .opts 设置为 -400Xmx(假设 8 核)。请注意,如果您只有 1 个带有 1 个核心的 CPU,那么这些任务最大值是由您的 CPU 完成的,那么是时候为您的数据节点获取新硬件或将掩码任务设置为 1。如果您有 1 个带有 4 个核心的 CPU,那么是时候了将map设置为3并将reduce设置为3会很好(为守护进程节省1个核心)。

默认情况下只有一个reducer,你需要将mapred.reduce.tasks配置为多个。该值应介于每个节点最大任务数乘以数据节点数的 0.95 到 1.75 之间。因此,如果您有 3 个数据节点,并且设置最大任务数为 7,则将其配置在 25 到 36 之间。

如果您的服务器因 OutOfMemory 问题而崩溃,那么 HADOOP_HEAPSIZE 就只针对进程堆(而不是任务的执行)起作用。

最后,如果您的作业花费了那么长时间,您可以检查是否有另一个好的配置添加是mapred.compress.map.output。将此值设置为 true 应该(压缩时间与传输时间之间的平衡)大大加快减速器复制速度,尤其是在处理大型数据集时。通常工作确实需要时间,但也有一些选项可以进行调整以帮助加快速度=8^)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行Hadoop时如何避免OutOfMemoryException? 的相关文章

随机推荐

  • requestFocus 不适用于 EditText

    花了很多时间解决这个问题 看起来很简单 但我真的很累 找不到解决办法 我有一个活动 活动有 4 个 EditText 组件 其中 2 个具有包含列表的弹出菜单 AlertDialog 下一个 禁用编辑 最后一个 是可编辑的 并且当用户点击它
  • java 枚举构造函数中是否允许使用可变参数?

    enum MyEnum A 1 2 3 4 B 1 2 C 4 5 8 8 9 private MyEnum int firstInt int otherInts do something with arguments perhaps in
  • 如何为 Google 地图指定自定义聚类标记

    我有一个带有标记和聚类的谷歌地图 我可以使用如下代码轻松更改标记图标 marker new google maps Marker position lat location data lat lng location data lng ma
  • 对象数组不可picklable

    我用 python 创建了一个类 如下所示 class myClass fields 1 2 其中 field 1 和 field 2 应该是整数 然后我创建了一个数组 其元素属于该类myClass如下 array myClass for
  • 如何为打字稿编译器配置`baseUrl`?

    我有一个使用模块构建的网站requireJS 我想开始在这个项目上使用 TypeScript 1 8 Visual Studio 2015 并尝试重写其中一个模块 目前我的模块如下所示 file ProjectFoo app dashboa
  • 旋转数组 LeetCode (189)

    问题如下 给定一个数组 将数组向右旋转 k 步 其中 k 为非负数 这是我的代码 class Solution public void rotate vector
  • NoSql 速成课程/教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经看到 NoSQL 在 SO 上出现了很多 并且我对why你会使用它 来自这里 维基百科等 这可能是由于缺乏对它是什么的具体和统一的定
  • Eclipse 在哪里存储更新站点列表?可以将其复制到另一个安装吗?

    我的 Eclipse 安装完全失败并且无法启动 因此我可能必须重新安装它 但这在升级到新的 Eclipse 版本时也相关 我不想寻找我安装的所有插件 那么 Eclipse 在哪里存储可用更新站点的列表呢 如果它不是纯文本形式 是否可以毫无问
  • Angular 2 中的嵌套模板[重复]

    这个问题在这里已经有答案了 我有一个组件
  • 在 ClosedXML 中应用多个过滤器 (SetAutoFilter)

    我通过 ClosedXML 对多个列应用过滤器 但是 仅应用最后一项 这些过滤器在单独使用时会起作用 我怎样才能应用所有这些 我在这里发现了类似的问题ClosedXML Excel 按多列中的值过滤行 https stackoverflow
  • Chrome 扩展页面 popup.html 无法调整大小

    所以我有这个 Chrome 扩展程序 可以从互联网上加载一些内容 基本上 用户单击弹出图标 然后后台页面中的一些 JavaScript 加载一些页面 从中解析图像并将其放入 popup html 页面中 问题是 popup html 没有调
  • 在 C# 中扩展枚举

    我想知道是否可以扩展 C 中的 Enum 类型来实现我的自定义 Enum GetValues type 并像 Enum GetMyCustomValues type 那样调用它 我正在尝试实现这样的事情 public static bool
  • 使用 C++ 命名参数习惯用法的更好方法?

    我一直在为 Windows 开发一个 GUI 库 作为个人业余项目 不希望有用 对于我的主窗口类 我设置了选项类的层次结构 使用命名参数惯用语 http www parashift com c faq lite named paramete
  • Microsoft Edge:本地/会话存储无法在新选项卡中工作

    我正在开发一个托管在 Azure 中的 Web 应用程序 我在 MS Edge 版本 20 10525 0 0 上尝试过 但遇到了以下问题 我有一个带有 target blank 的链接 可以在新选项卡中打开页面 在该链接的点击事件中 我将
  • 将日期字符串转换为正确的格式

    我收到服务器的响应 并且需要将日期字符串转换为日期 2017 年 6 月 29 日星期四 07 15 25 0000 我正在尝试将字符串转换为人类可读的格式 谁能建议如何将此字符串转换为日期 您需要将日期字符串解析为Date对象使用Date
  • 可捕获的致命错误:类 mysqli 的对象无法转换为字符串

    所以我有一个问题 我对 PHP 非常陌生 并且在更新数据库上的字符串时遇到问题 它抛出了这个错误 Catchable fatal error Object of class mysqli Could not be Converted to
  • 获取类型的默认构造函数的最有效方法

    获取 System Type 的默认构造函数 即不带参数的实例构造函数 的最有效方法是什么 我正在思考下面的代码 但似乎应该有一种更简单更有效的方法来做到这一点 Type type typeof FooBar BindingFlags fl
  • 如何从对象中深度删除空值、空对象和空数组

    我有一个看起来像这样的对象 var myObject a b c d 2 e 2 f g h i null 2 我想删除空值和空对象 数组和对象 使其看起来像 a c d 2 e 2 i 2 该函数应删除空值 空对象和空数组 有什么优雅的方
  • 找出远程服务器上git的版本

    我正在本地计算机上寻找 git 命令 我可以运行该命令来查找远程服务器上运行的 git 版本 如果这可能的话 现代 git 服务器 始于git 1 7 12 1 https github com git git commit ff5effd
  • 运行Hadoop时如何避免OutOfMemoryException?

    我正在运行一个超过 1 5 TB 数据的 Hadoop 作业 并进行大量模式匹配 我有几台每台 16GB RAM 的机器 我总是得到OutOfMemoryException使用这些数据来完成这项工作 我正在使用 Hive 我想知道如何最佳设