任何人都知道在Hdfs的namenode中每个文件占用多少字节?我想估计有多少文件可以存储在32G内存的单个名称节点中.
每个文件或目录或块在namenode内存中占用大约150个字节.[1]因此,具有32G RAM的名称节点的集群可以支持最多(假设namenode是瓶颈)大约3800万个文件.(每个文件也会占用一个块,因此每个文件生效300个字节.我也假设3x复制.所以每个文件占用900个字节)
然而,在实践中,数量将会小得多,因为名称节点上的所有32G都不可用于保持映射.您可以通过为该计算机中的namenode分配更多堆空间来增加它.
复制也会在较小程度上影响这一点.每个附加副本添加大约16个字节的内存要求.[2]
[1] http://www.cloudera.com/blog/2009/02/the-small-files-problem/
Cloudera建议每百万个块使用1 GB的NameNode堆空间.每百万个文件1 GB不太保守,但也应该工作.
此外,您不需要乘以复制因子,接受的答案是错误的.
使用128 MB的默认块大小,192 MB的文件被分成两个块文件,一个128 MB文件和一个64 MB文件.在NameNode上,命名空间对象由文件和块的数量来度量.相同的192 MB文件由三个命名空间对象(1个文件inode + 2个块)表示,并消耗大约450个字节的内存.
一个128 MB的数据文件由NameNode上的两个名称空间对象(1个文件inode + 1个块)表示,并消耗大约300个字节的内存.相比之下,每个1 MB的128个文件由256个命名空间对象(128个文件inode + 128个块)表示,并消耗大约38,400个字节.
复制影响磁盘空间但不影响内存消耗.复制会更改每个块所需的存储量,但不会更改块的数量.如果一个数据节点,通过在NameNode的一个框表示一个块文件,重复三次,块文件的数量增至三倍,但并不代表他们的块数.
例子:
来自cloudera 的原始文章中的更多示例文章.
| 归档时间: |
|
| 查看次数: |
9952 次 |
| 最近记录: |