请参考 上一个 链接地址:
hdfs为什么不擅长存储大量小文件
https://blog.51cto.com/12445535/2354951
概述:namenode replication(复制)
复制
默认块复制因子(dfs.replication)为3。复制影响磁盘空间但不影响内存消耗。复制会更改每个块所需的存储量,但不会更改块的数量。如果DataNode上的一个块文件(由NameNode上的一个块表示)被复制三次,则块文件的数量将增加三倍,但不会代表它们的块数。
关闭复制时,一个192 MB的文件占用192 MB的磁盘空间和大约450字节的内存。
//(计算方式为:128+64 也就是1个文件inode+2个块 3150 大约消耗 450字节的内存)
如果你有一百万个这样的文件,或192 TB的数据,你需要192 TB的磁盘空间,而不考虑RPC工作负载,450 MB内存:(100万inode + 200万个块) 150个字节。启用默认复制后,您需要576 TB的磁盘空间:(192 TB * 3)但内存使用率保持不变,450 MB。当您考虑簿记和RPC,并遵循每百万个块1 GB堆内存的建议时,对此方案更安全的估计是2 GB内存(有或没有复制)。
例子
示例1:估计使用的NameNode堆内存
Alice,Bob和Carl每个磁盘上都有1 GB(1024 MB)的数据,但切成不同大小的文件。 Alice和Bob的文件是块大小的一部分,需要的内存最少。 Carl没有用不必要的命名空间对象填充堆。
Alice:1 x 1024 MB文件
1个文件inode
8块(1024 MB / 128 MB)
总计= 9个对象* 150个字节= 1,350个字节的堆内存
Bob:8 x 128 MB文件
8个文件inode
8个块
总计= 16个对象* 150个字节= 2,400个字节的堆内存
Carl:1,024 x 1 MB文件
1,024个文件inode
1,024个街区
总计= 2,048个对象* 150个字节= 307,200个字节的堆内存
**计算实例//生产可用 根据已知磁盘大小去计算需要多大的namenode堆内存
示例2:估计所需的NameNode堆内存**
在该示例中,通过考虑群集的容量来估计存储器。值四舍五入。两个集群都物理存储4800 TB或大约3600万个块文件(默认块大小)。复制确定有多少名称空间块代表这些块文件。
群集A:每个24 TB的200个主机= 4800 TB。
Blocksize = 128 MB,复制= 1
以MB为单位的群集容量:200 24,000,000 MB = 4,800,000,000 MB(4800 TB)
每个块所需的磁盘空间:每块128 MB 1 =每块128 MB存储空间
块中的群集容量:4,800,000,000 MB / 128 MB = 36,000,000块
在容量方面,建议分配每百万个块1 GB的内存,群集A需要36 GB的最大堆空间。
群集B:每个24 TB的200个主机= 4800 TB。
Blocksize = 128 MB,复制= 3
以MB为单位的群集容量:200 24,000,000 MB = 4,800,000,000 MB(4800 TB)
每个块所需的磁盘空间:每块128 MB 3 =每块384 MB存储空间
块中的群集容量:4,800,000,000 MB / 384 MB = 12,000,000个块
在容量方面,建议为每百万个块分配1 GB内存,群集B需要12 GB的最大堆空间。
群集A和群集B都存储相同数量的块文件。但是,在群集A中,每个块文件都是唯一的,并由NameNode上的一个块表示;在群集B中,只有三分之一是唯一的,三分之二是副本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。