本文为您介绍如何调整NameNode JVM和DataNode JVM内存大小,以便优化HDFS的稳定性。
调整NameNode JVM内存大小
背景:在HDFS中,每个文件对象都需要在NameNode中记录元数据信息,并占用一定的内存空间。默认的JVM配置可以满足部分普通的HDFS使用。部分Workload会向HDFS中写入更多的文件, 或者随着一段时间的积累HDFS保存的文件数不断增加,当增加的文件数超过默认的内存空间配置时,则默认的内存空间无法存储相应的信息,您需要修改内存大小的设置。
建议:修改NameNode JVM内存大小。修改方式如下:
HA集群
您可以在EMR控制台的HDFS服务的配置页面,在搜索区域,搜索参数hadoop_namenode_heapsize,参数值根据实际需求进行调整。
非HA集群
您可以在EMR控制台的HDFS服务的配置页面,在搜索区域,搜索参数hadoop_namenode_heapsize和hadoop_secondary_namenode_heapsize,参数值根据实际需求进行调整。
说明配置完成后,需要重启相应的NameNode或SecondaryNamenode服务,使得配置生效。
您可以通过访问HDFS UI页面,查看文件数Files和文件块数Blocks,访问Web UI的详情信息,请参见访问链接与端口。您可以根据以下计算方法调整NameNode JVM内存大小。
建议值=( 文件数(以百万为单位)+块数(以百万为单位))×512 MB
例如,您有1000万个文件,都是中小文件且不超过1个Block,Blocks数量也为1000万,则内存大小建议值为10240 MB,即(10+10)×512 MB。
当您的大多数文件不超过1个Block时,建议值如下。
文件数量
建议值(MB)
10,000,000
10240
20,000,000
20480
50,000,000
51200
100,000,000
102400
调整DataNode JVM内存大小
- 背景:在HDFS中,每个文件Block对象都需要在DataNode中记录Block元数据信息,并占用一定的内存空间。默认的JVM配置可以满足部分简单的、压力不大的作业需求。而部分作业会向HDFS写入更多的文件, 或者随着一段时间的积累HDFS保存的文件数不断增加。当文件数增加,DataNode上的Block数也会增加,而默认的内存空间无法存储相应的信息时,则需要修改内存大小的设置。
- 建议:您可以在EMR控制台的HDFS服务的配置页面,在搜索区域,搜索参数hadoop_datanode_heapsize,参数值根据实际需求进行调整,以修改DataNode JVM内存大小。您可以根据以下计算方法调整DataNode JVM内存大小。
集群中每个DataNode实例平均保存的副本数Replicas=文件块数Blocks×3÷DataNode节点数 建议值=单个DataNode副本数Replicas(百万单位)×2048 MB
说明 配置完成后,需重启DataNode服务,使配置生效。例如,大数据机型为3副本,Core节点数量为6,如果您有1000万个文件且都是中小文件,Blocks数量也为1000万,则单个DataNode副本数Replicas为 500万(1000万×3÷6), 内存大小建议值为10240 MB(5×2048 MB)。
当您的大多数文件不超过1个Block时,建议值如下。单个DataNode实例平均Replicas数量 建议值(MB) 1,000,000 2048 2,000,000 4096 5,000,000 10240 说明 该建议值已为JVM内核预留了部分空间,以及为作业高峰压力预留了部分空间,因此通常情况下可以直接换算使用。