如何去计算hdfs中namenode中所需的堆内存大小

  

请参考上一个链接地址:
hdfs为什么不擅长存储大量小文件https://blog.51cto.com/12445535/2354951

  

概述:namenode复制(复制)
复制

  

默认块复制因子(dfs.replication)为3。复制影响磁盘空间但不影响内存消耗。复制会更改每个块所需的存储量,但不会更改块的数量。如果DataNode上的一个块文件(由NameNode上的一个块表示)被复制三次,则块文件的数量将增加三倍,但不会代表它们的块数。

  

关闭复制时,一个192 MB的文件占用192 MB的磁盘空间和大约450字节的内存。
//(计算方式为:128 + 64也就是1个文件inode + 2个块3 150大约消耗450字节的内存)
如果你有一百万个这样的文件,或192 TB的数据,你需要192 TB的磁盘空间,而不考虑RPC工作负载,450 MB内存:(100年万inode + 200万个块)
150个字节。启用默认复制后,您需要576 TB的磁盘空间:结核病(192 * 3)但内存使用率保持不变,450 MB。当您考虑簿记和RPC,并遵循每百万个块1 GB堆内存的建议时,对此方案更安全的估计是2 GB内存(有或没有复制)。

  <人力资源/>   

<>强例子
示例1:估计使用的NameNode堆内存

  

爱丽丝,鲍勃和卡尔每个磁盘上都有1 GB (1024 MB)的数据,但切成不同大小的文件。爱丽丝和鲍勃的文件是块大小的一部分,需要的内存最少。卡尔没有用不必要的命名空间对象填充堆。
艾丽斯:1 x 1024 MB文件

  

1个文件inode
8块(1024 MB/128 MB)

  

总计=9个对象* 150个字节=1350个字节的堆内存
鲍勃:8 x 128 MB文件

  

8个文件inode
8个块

  

总计=16个对象* 150个字节=2400个字节的堆内存
卡尔:1024 x 1 MB文件

  

1024个文件inode
1024个街区

  

总计=2048个对象* 150个字节=307200个字节的堆内存

  

* *计算实例//生产可用根据已知磁盘大小去计算需要多大的namenode堆内存

  

示例2:估计所需的NameNode堆内存* *

  

在该示例中,通过考虑群集的容量来估计存储器。值四舍五入。两个集群都物理存储4800 TB或大约3600多万个块文件(默认块大小)。复制确定有多少名称空间块代表这些块文件。
群集:每24个结核病的200个主机=4800 TB。

  

Blocksize=128 MB,复制=1
以MB为单位的群集容量:200 24000000 MB=4800000000 MB (4800 TB)
每个块所需的磁盘空间:每块128 MB
1=每块128 MB存储空间
块中的群集容量:4800000000 MB和128 MB=36000000块

  

在容量方面,建议分配每百万个块1 GB的内存,群集一个需要36 GB的最大堆空间。
群集B:每24个结核病的200个主机=4800 TB。

  

Blocksize=128 MB,复制=3
以MB为单位的群集容量:200 24000000 MB=4800000000 MB (4800 TB)
每个块所需的磁盘空间:每块128 MB
3=每块384 MB存储空间
块中的群集容量:4800000000 MB和384 MB=12000000个块

  

在容量方面,建议为每百万个块分配1 GB内存,群集B需要12 GB的最大堆空间。

  

群集和一群集B都存储相同数量的块文件。但是,在群中集,每个块文件都是唯一的,并由NameNode上的一个块表示,在群集B中,只有三分之一是唯一的,三分之二是副本。

如何去计算hdfs中namenode中所需的堆内存大小