当前位置: 首页 > 面试题库 >

运行Hadoop时如何避免OutOfMemoryException?

常乐
2023-03-14
问题内容

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

我想知道如何HADOOP_HEAPSIZE在文件中优化设置选项,hadoop- env.sh所以我的工作不会失败。甚至可以设置此选项以使我的工作不会失败吗?

当我设置HADOOP_HEAPSIZE为1.5
GB并从查询中删除了一半的模式匹配时,作业成功运行。那么,如果该选项不能帮助避免作业失败,那么该选项又有什么用呢?

我想做更多关于最佳设置的实验,但是由于这些工作需要> 10个小时才能运行,因此我正在征求您的建议。


问题答案:

作业失败还是服务器崩溃?如果您的作业由于节点上的内存不足而失败,那么您可以减少最大映射数和缩减器的数量,而JVM选择它们的数量,这样就永远不会发生。通常必须根据您的数据节点特定的硬件来增加mapred.child.java.opts(默认值为200Xmx)。

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

可以在Namenode上设置最大任务,也可以在可能具有不同硬件配置的数据节点上覆盖(设置为final)。为映射器和化简器设置了最大任务。要计算此值,它基于CPU(内核)和您拥有的RAM数量,以及您在mapred.child.java.opts中设置的JVM
max(默认值为200)。Datanode和Tasktracker分别设置为1GB,因此对于8GB的计算机,可以将mapred.tasktracker.map.tasks.maximum设置为7,将mapred.tasktracker.reduce.tasks.maximum设置为7,而mapred.child.java
.opts设置为-400Xmx(假设8个内核)。请注意,如果您只有1个CPU和1个内核,那么这些最大任务是由CPU完成的,那么现在该为数据节点获取新硬件或将掩码任务设置为1了。

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

如果您的服务器因内存不足问题而崩溃,那么HADOOP_HEAPSIZE就是在其中用于进程堆(而不是任务的执行)的地方。

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



 类似资料:
  • 我正在使用 Kubernetes 作为容器编排器构建一个微服务应用程序。该应用程序现已启动并运行,但我有其他问题。那是在我的服务中,我每天都有一个计划任务运行,当服务部署时,将运行多个服务实例(通过设置副本编号),创建多个同时运行的任务。我期望的是只有一个服务任务实例将运行,而不是多个实例。有什么技术可以处理这种情况吗? 库伯内特斯 Asp.net核心构建微服务 CI/CD的基岩实现 Fabrik

  • 问题内容: 我正在尝试通过从客户端向服务器发送密钥和随机数来认证用户。 我的代码未向我显示客户端的响应。执行下面的代码时,我得到了一个空指针异常。 问题答案: 解决大多数问题的固定步骤: 阅读堆栈跟踪以确定哪一行代码引发NPE 在该行代码处设置一个断点 使用调试器,在遇到断点时,确定该行中的对象引用是 弄清楚为什么引用该文件(到目前为止,这是唯一实际的困难部分) 解决根本原因(也可能很困难)

  • 问题内容: 我有两个简单的Java代码。第一个将恒定功率定义为power = a.pow(b); 第二个将恒定功率定义为power = BigInteger.ONE.shiftLeft(b) 在命令行中设置内存标志- Xmx1024m,第一个代码可以正常工作,但是第二个代码却出现错误:java.lang.OutOfMemoryError:Java堆空间 我的问题:我应该在第二个代码中更改什么以避免

  • 问题内容: 我有一个用于将文本添加到现有.doc文件中的代码,它将通过使用apache POI将其另存为另一个名称。 以下是到目前为止我尝试过的代码 以下是我得到的 我已经添加了与此对应的所有jar文件,但仍然找不到解决方案。我对apache poi是陌生的,所以请帮我提供一些解释和示例。谢谢 问题答案: 从我对问题的评论中复制: 看起来您需要Apache POI发行版中的poi-ooxml-sc

  • 我已经在Jenkins安装上配置了两个多分支项目(来自GitHub)。目前遗嘱执行人的数量是四个。 有时,当有很多分支要构建时,它最终会出现所有执行器都在等待免费执行器而什么都没有发生的情况。 你通常如何避免这种情况?当然,人们不能在一台机器上配置一百万个执行器来确保这种情况永远不会发生。 我现在有四个执行者试图构建,他们都在等待对方: 另一个问题是,这是如何/为什么可能的?他们没有实施任何机制来

  • 问题内容: 避免同一脚本的两个实例同时运行的典型方法如下: 有没有更好的方法来锁定shell脚本中的文件,从而避免出现竞争状况?必须使用目录代替吗? 问题答案: 是的,示例脚本中确实存在竞争条件。您可以使用bash的选项,以便在比赛和其他测试脚本潜行时出现比赛失败。 以下是一个示例代码片段(受本文启发),说明了该机制: