关于Hadoop集群物理及虚拟内存的检测的设置说明

简介: 关于Hadoop集群物理及虚拟内存的检测的设置说明

关于Hadoop集群物理及虚拟内存的检测的设置说明


a53fa7633514475fa766316fab7a2e3e.jpeg


写在前面

  • Linux: CentOS7.5 
  • Java: JDK8 
  • Hadoop: Hadoop3.1.3 
  • 场景: 离线数仓集群搭建 



正文


配置 yarn-site.xml 文件


不能关闭对物理内存的检测


  • 集群规划图 


如下图:

1.jpeg


计算任务运行在 NodeManager  的 Container  容器中


  • 任务运行细节说明 


在 NodeManager 中有一个 Monitor线程 ,用于 一直监控NodeManager的内存使用量 ,假设NodeManager 设置为3G,用于后面的资源(如 Kafka、Flume)的内存为1G;


若 NodeManager 内存使用率超过集群机器设置的内存,当 Monitor 线程发现 NodeManager 内存使用即将超过 3G 时,此时为了不让 NodeManager 内存使用量超过设置值,Monitor线程会将nodeManager`挂掉`。


  • 挂掉的原因


一旦 NodeManager 内存使用即将超过 3G,将会「导致后面的组件及框架 所需要的内存被其挂掉 ,内存被 NodeManager 占用 」,则Kafka、Flume 需要进行 GC(内存不够,进行FullGC,即将自己Pass掉),此时 数据传输通道不存在 了,Kafka、Flume这些大数据框架就停止了运转,这是我们不愿意看到的。


我们只希望是 NodeManager 运行的任务挂掉而已,之后我们重新启动这个任务即可,这样不会影响其他组件|组件|框架的使用


故,不需要关闭对物理内存的检测

yarn.nodemanager.pmem-check-enabled 设置为true(默认就是为true)


关闭对虚拟内存的检测


  • 原因 是:


JDK8与CentOS7存在Bug 


  • 虚拟内存 定义 


虚拟内存是 内存和磁盘交互 的第二个媒介。虚拟内存是指把磁盘的一部分作为`假想内存`来使用。这与磁盘缓存是假想的磁盘(实际上是内存)相对,虚拟内存是假想的内存(实际上是`磁盘`)。


虚拟内存是计算机系统`内存管理`的一种技术。它使得应用程序认为它拥有 连续可用 的内存(一个完整的地址空间),但是实际上,它通常被分割成多个物理 碎片 ,还有部分存储在 外部磁盘管理器 上,必要时进行数据交换。


通过借助虚拟内存,在内存不足时仍然可以运行程序。 


例如,在只剩 5MB 内存空间的情况下仍然可以运行 10MB 的程序。由于 CPU 只能执行加载到内存中的程序,因此,虚拟内存的空间就需要和内存中的空间进行置换(swap),然后运行程序。


又如:有时候电脑内存占比高达99%甚至于100%,但是你的电脑仍然可以继续工作,只不过是很卡而已,原因是超出的部分工作是在磁盘上运行的


  • 离线数仓 之虚拟内存的 应用 


如果物理内存不够用,则采用虚拟内存计算一部分资源


假设一台机器内存为 4G ,目前4G已经 被占满 ,此时会将资源放置到 虚拟内存 来计算,由于4G内存已被占据完毕,本质上是在 磁盘 上计算的.


CentOS7会预留出一部分内存给JDK


2.jpeg


JDK实际使用的虚拟内存占比比 CentOS7会预留给JDK的虚拟内存 低,可能会出现任务挂掉的情况,会有报错产生。

关闭对虚拟内存的检测,即将 yarn.nodemanager.vmem-check-enabled 设置为false,可以忽略过报错,依然可以继续运行


关于虚拟内存的大小,Hadoop官网说明如下:


yarn.nodemanager.pmem-check-enabled true
yarn.nodemanager.vmem-check-enabled true
yarn.nodemanager.vmem-pmem-ratio  2.1


虚拟内存和物理内存的比例关系是: 2.1倍 

物理内存此时有4G,则对应的虚拟内存为8.2G

预留出来给JDK的虚拟内存可能高达6G,而实际使用的虚拟内存低于3G


参考


https://hadoop.apache.org/docs/r3.1.3/hadoop-yarn/hadoop-yarn-common/yarn-default.xml


结束

目录
相关文章
|
11天前
|
开发工具 Swift iOS开发
【Swift开发专栏】Swift中的内存泄漏检测与修复
【4月更文挑战第30天】本文探讨了Swift中的内存泄漏问题,尽管有ARC机制,但仍需关注内存管理。文章分为三部分:内存管理基础知识、检测方法和修复技巧。了解ARC原理和循环引用陷阱是防止内存泄漏的关键。检测方法包括使用Xcode内存调试器、LeakSanitizer和性能分析工具。修复技巧涉及打破循环引用、使用弱/无主引用及手动管理内存。理解这些对优化应用性能和稳定性至关重要。
|
11天前
|
Dart 前端开发 Java
【Flutter前端技术开发专栏】Flutter中的内存泄漏检测与解决
【4月更文挑战第30天】本文探讨了Flutter应用中的内存泄漏检测与解决方法。内存泄漏影响性能和用户体验,常见原因包括全局变量、不恰当的闭包使用等。开发者可借助`observatory`工具或`dart_inspector`插件监测内存使用。解决内存泄漏的策略包括避免长期持有的全局变量、正确管理闭包、及时清理资源、妥善处理Stream和RxDart订阅、正确 disposal 动画和控制器,以及管理原生插件资源。通过这些方法,开发者能有效防止内存泄漏,优化应用性能。
【Flutter前端技术开发专栏】Flutter中的内存泄漏检测与解决
|
11天前
|
存储 算法 内存技术
深入理解操作系统内存管理:从虚拟内存到物理内存的映射
【4月更文挑战第30天】 在现代操作系统中,内存管理是一个复杂而关键的功能。它不仅确保了系统资源的有效利用,还为每个运行的程序提供了独立的地址空间,保障了程序之间的隔离性和安全性。本文将探讨操作系统如何通过分页机制和虚拟内存技术实现内存的抽象化,以及这些技术是如何影响应用程序性能的。我们将详细解析虚拟地址到物理地址的转换过程,并讨论操作系统在此过程中扮演的角色。文章的目的是为读者提供一个清晰的框架,以便更好地理解内存管理的工作原理及其对系统稳定性和效率的影响。
|
11天前
|
数据可视化 Java 测试技术
【Go语言专栏】Go语言中的内存泄漏检测与修复
【4月更文挑战第30天】Go语言内存泄漏详解:概念、原因、检测与修复。内存泄漏由忘记释放内存、循环引用等引起,Go通过垃圾回收机制管理内存,但仍有泄漏风险。检测方法包括pprof、可视化工具、代码审查和单元测试。修复策略涉及优化代码、使用defer、减少全局变量、弱引用及及时释放资源。实践案例分析有助于理解和解决问题。了解内存管理,防止泄漏,提升Go应用性能和稳定性。
|
11天前
|
分布式计算 Hadoop 测试技术
|
13天前
|
存储 分布式计算 资源调度
Hadoop节点检查物理连接
【4月更文挑战第21天】
17 2
|
15天前
|
分布式计算 资源调度 监控
Hadoop节点扩容检查物理连接
【4月更文挑战第20天】
24 2
|
17天前
|
分布式计算 监控 Hadoop
Ganglia监控Hadoop与HBase集群
Ganglia监控Hadoop与HBase集群
|
23天前
|
存储 分布式计算 Hadoop
Hadoop集群搭建
Hadoop集群搭建
|
23天前
|
分布式计算 负载均衡 Hadoop
Hadoop集群节点添加
Hadoop集群节点添加

相关实验场景

更多