【hadoop运维】running beyond physical memory limits:正确配置yarn中的mapreduce内存

这篇具有很好参考价值的文章主要介绍了【hadoop运维】running beyond physical memory limits:正确配置yarn中的mapreduce内存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 问题描述

在hadoop3.0.3集群上执行hive3.1.2的任务,任务提交时报如下错误:

Application application_1409135750325_48141 failed 2 times due to AM Container for
appattempt_1409135750325_48141_000002 exited with exitCode: 143 due to: Container
[pid=4733,containerID=container_1409135750325_48141_02_000001] is running beyond physical memory limits.
Current usage: 2.0 GB of 2 GB physical memory used; 6.0 GB of 4.2 GB virtual memory used. Killing container.

上述日志大致描述了:

任务申请了2.0g的物理内存,6g的虚拟内存,但是yarn只能分配2g的物理内存,4.2g的虚拟内存。因为虚拟内存不够,导致任务无法启动而报错。

 

二. 问题分析与解决

报错的原因是:申请的物理内存比container中物理内存大,导致任务无法运行。那为什么超预算申请?这是我们需要探索的问题。

1. container内存监控

本节讨论yarn是如何监控container的内存变化。

每一个yarn的节点都会运行一个nodemanager,nodemanager会监控container的运行,其中nodemanager会监控container的内存使用率。具体地,nodemanager会定期(yarn.nodemanager.container-monitor.interval-ms 默认三秒)监控container,它会计算进程树(每一个container所有的子进程),检查每一个进程文件/proc/<PID>/stat(PID:container的pid),并解析物理内存和虚拟内存。

 

1.1. 虚拟内存判断

如果启用虚拟内存检查(默认为 true,yarn.nodemanager.vmem-check-enabled),则 YARN 会判断container现在所申请的虚拟内存是否小于允许的最大虚拟内存

而最大的虚拟内存由yarn.nodemanager.vmem-pmem-ratio(默认为 2.1)计算得出。

比如,container配置 2 GB 物理内存,则该数字乘以 2.1,得出可以使用 4.2 GB 虚拟内存。

 

1.2. 物理内存判断

如果启用物理内存检查(默认为 true,yarn.nodemanager.pmem-check-enabled),则 YARN 会判断container现在所申请的物理内存是否小于允许的最大物理内存

 

综上所述:

如果虚拟或物理高于允许的最大值,YARN 将终止container运行,报错如本文顶部所示。

知道了报错的原因我们就可以针对性的配置mapreduce相关配置,接着往下看。

 

2. 正确配置mapReduce内存

2.1. 配置map和reduce进程的物理内存:

假如map限制为2GB、reduce限制为4GB,且设置为默认值,则可以在mapred-site.xml中配置:

<property>
  <name>mapreduce.map.memory.mb</name>
  <value>2048</value>
</property>
<property>
  <name>mapreduce.reduce.memory.mb</name>
  <value>4096</value>
</property>

而上述的配置必须在container允许的最小和最大内存范围内(在yarn-site.xml中分别检查yarn.scheduler.maximum-allocation-mb和yarn.scheduler.minimum-allocation-mb属性)。

    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1024</value>
    </property>
        <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>8196</value>
    </property>

 

2.2. Map 和Reduce 进程的JVM 堆大小

这些大小需要小于您在上一节中配置的物理内存。一般来说,它们应该是 YARN 物理内存设置大小的 80%。采用 2GB 和 4GB 物理内存限制并乘以 0.8 来得出 Java 堆大小。

<property>
  <name>mapreduce.map.java.opts</name>
  <value>-Xmx1638m</value>
</property>
<property>
  <name>mapreduce.reduce.java.opts</name>
  <value>-Xmx3278m</value>
</property>

 

3. 小结

如果说配置之后还是报开头的错误,说明物理内存配置还是小不足以加载mr程序,接着申请了大于2.1比例的虚拟内存,这样任务还是启动不了。

这时可以调大yarn.nodemanager.vmem-pmem-ratio比例,或者进一步调大物理内存。2.1是yarn推荐的比例(ing),这里建议调整物理内存。

如果是少数任务需要特定调整,则我们可以在任务启动时,根据实际情况配置,动态地传递以下参数,来覆盖不适合此任务的默认配置。

配置 描述
mapreduce.map.memory.mb map所用物理内存
mapreduce.reduce.memory.mb reduce所用物理内存
mapreduce.map.java.opts map堆内存,一般为mapreduce.map.memory.mb的80%
mapreduce.reduce.java.opts reduce堆内存,一般为mapreduce.reduce.memory.mb的80%

 

参考:
http://grepalex.com/2016/12/07/mapreduce-yarn-memory/文章来源地址https://www.toymoban.com/news/detail-699121.html

到了这里,关于【hadoop运维】running beyond physical memory limits:正确配置yarn中的mapreduce内存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • doris查询报错err: Error 1105: errCode = 2, detailMessage = Memory limit exceeded:<consuming tracker:...

    为了防止用户的一个查询可能因为消耗内存过大。查询进行了内存控制,一个查询任务,在单个 BE 节点上默认使用不超过 2GB 内存。 用户在使用时,如果发现报 Memory limit exceeded 错误,一般是超过内存限制了。 遇到内存超限时,用户应该尽量通过优化自己的 sql 语句来解决。

    2024年02月10日
    浏览(39)
  • k8s+arm环境,clickhouse出现多次MEMORY_LIMIT_EXCEEDED导致pod crash

    k8s+arm环境,clickhouse出现多次MEMORY_LIMIT_EXCEEDED导致pod crash,可能是hugepage干扰内存分配器 1、修改文件 2、验证是否关闭

    2024年02月08日
    浏览(38)
  • FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory(JS stacktrace )

    目录 一、问题 二、原因分析 三、解决方案 1.package.json中配置 2.使用increase-memory-limit插件 往期回顾 我的博客原文:FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory(JS stacktrace ) 我们前端在升级运行自动化运行脚本的时候,linux机器上会报这样一个错误 FATAL E

    2024年03月26日
    浏览(55)
  • 运行代码报错:FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

    一、背景         进公司拉取项目代码,npm install拉取依赖后,运行控制台报错:FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory 二、原因分析         JavaScript heap out of memory说的是 JavaScript 运行内存不足,其实就是Node运行时内存不足。Node 中通过script使用

    2024年02月06日
    浏览(46)
  • FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory node编译时的内存溢出

    报错:FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory 原因:node编译时的内存溢出,因为打包文件过大,刚好超过内存的限制大小造成编译中断。 解决方法1: 解决方法2:(实践过可用) 使用 increase-memory-limit 插件,增加node服务器内存限制

    2024年02月03日
    浏览(39)
  • docker run中的-itd参数正确使用

    docker run  命令的作用是通过镜像(image)创建一个docker容器。如果本地没有相关镜像会自动从远程仓库拉取(镜像)到本地,再进行创建容器。 简写的参数一般都是英文单词的简写,理解了单词的意思会加强记忆。使用的过程 -i,--interactive,以交互模式运行容器,并保持终端激活

    2024年02月08日
    浏览(40)
  • npm run报错:FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript

    npm run 报错:FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 内存不足 原因: Node 是基于V8引擎 ,在一般的后端开发语言中,在基本的内存使用上没有什么限制。 但是在 Node 中通过 JavaScript 使用内存时只能使用部分内存 (64位系统下约为1.4 G

    2024年04月28日
    浏览(38)
  • 使用beyond compare比较git版本差异的配置和使用方法

    首先输入下述指令查看自己的git版本支持哪些工具 bc3,bc4,代表的就是beyond compare,如果没有的话就升级git版本吧 git bash中输入下述指令,换成你自己的文件路径,注意是BComp.exe不是BCompare.exe 之后只需要在gitbash中输入git difftool,就能自动打开beyond compare显示差异的文件 但假

    2024年02月16日
    浏览(48)
  • [hive]return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. GC overhead limit exceeded

    [2022-11-10 10:21:31] [08S01][-101] Error while processing statement: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. GC overhead limit exceeded 一般map读取一个片的数据不会内存不够,所以: 1、调大reduce个数 2、group by 数据倾斜 3、使用大的队列

    2024年02月12日
    浏览(36)
  • Mechanisms for Deployment and Running a Hadoop+Spark Cl

    作者:禅与计算机程序设计艺术 大数据集市的蓬勃发展给企业、政府、媒体等提供海量的数据资源。随着Hadoop和Spark等开源工具的不断发展,越来越多的人开始采用这类框架来开发分布式计算系统。然而,部署和运行Hadoop集群、Spark应用也面临一些关键的技术问题。因此,如

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包