关于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


结束

目录
相关文章
|
2月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
381 1
|
3月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
206 6
|
2月前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
155 52
|
20天前
|
运维 监控 Ubuntu
【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出
通过设置内存守护进程,可以有效监控和管理系统内存使用情况,防止内存溢出带来的系统崩溃和服务中断。本文介绍了如何在Ubuntu中编写和配置内存守护脚本,并将其设置为systemd服务。通过这种方式,可以在内存使用超过设定阈值时自动采取措施,确保系统稳定运行。
46 4
|
2月前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
56 1
|
2月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
54 6
|
2月前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
283 1
|
2月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
363 9
|
2月前
|
监控 JavaScript 前端开发
如何检测和解决 JavaScript 中内存泄漏问题
【10月更文挑战第25天】解决内存泄漏问题需要对代码有深入的理解和细致的排查。同时,不断优化和改进代码的结构和逻辑也是预防内存泄漏的重要措施。
75 6
|
2月前
|
Web App开发 缓存 JavaScript
如何检测和解决闭包引起的内存泄露
闭包引起的内存泄露是JavaScript开发中常见的问题。本文介绍了闭包导致内存泄露的原因,以及如何通过工具检测和代码优化来解决这些问题。

热门文章

最新文章

相关实验场景

更多