首页 > 解决方案 > 如何在 hadoop 集群中调整“DataNode 最大 Java 堆大小”

问题描述

我在谷歌搜索找到有关如何调整值的信息 - DataNode 最大 Java 堆大小,除了这个 -

https://community.hortonworks.com/articles/74076/datanode-high-heap-size-alert.html

https://docs.oracle.com/cd/E19900-01/819-4742/abeik/index.html

但未找到计算DataNode 最大 Java 堆大小值的公式

DataNode 最大 Java 堆大小的默认值为1G

我们将此值增加到 5G ,因为在某些情况下,我们从 datanode 日志中看到有关堆大小的错误

但这不是调整价值的正确方法

那么任何建议或好文章如何为 -datanode 记录有关堆大小的错误设置正确的值?

假设我们有以下 hadoop 集群大小:

  1. 10台datanode机器,5个磁盘,每个磁盘1T

  2. 每个数据节点有 32 个 CPU

  3. 每个数据节点有256G内存

基于此信息,我们能否找到显示正确值的公式 - “ datanode logs error about heap size ”?

关于 hortonworks: 他们建议将 Datanode Java 堆设置为 4G,但我不确定这种情况是否可以涵盖所有场景?

根本原因:DN 操作的 IO 开销很大,不需要 16GB 的堆。

https://community.hortonworks.com/articles/74076/datanode-high-heap-size-alert.html

RESOLUTION: Tuning GC parameters resolved the issue -
4GB Heap recommendation : 
-Xms4096m -Xmx4096m -XX:NewSize=800m 
-XX:MaxNewSize=800m -XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC 
-XX:+UseCMSInitiatingOccupancyOnly 
-XX:CMSInitiatingOccupancyFraction=70 
-XX:ParallelGCThreads=8 

标签: javahadoopambaridatanode

解决方案


hadoop-env.sh(也是 Ambari 中的某些字段,只需尝试搜索堆),有一个设置值的选项。可能HADOOP_DATANODE_OPTS在 shell 文件中调用

对于大多数服务器来说,8GB 通常是一个不错的价值。但是,您有足够的内存,所以我将从那里开始,并通过 Grafana 中的 JMX 指标主动监控使用情况,例如。

名称节点可能也需要调整https://community.hortonworks.com/articles/43838/scaling-the-hdfs-namenode-part-1.html


推荐阅读