hadoop - 对 Hadoop namenode 内存使用的困惑

标签 hadoop hadoop2

我对Hadoop namenode内存计算有一个愚蠢的怀疑。它在Hadoop书(明确指南)中提到

“由于名称节点在内存中保存文件系统元数据,文件系统中文件数量的限制由名称节点上的内存量决定。根据经验,每个文件、目录和 block 大约需要 150字节。因此,例如,如果您有 100 万个文件,每个文件占用一个 block ,则您至少需要 300 MB 的内存。虽然存储数百万个文件是可行的,但数十亿个文件超出了当前硬件的能力。”

由于每取一个 block ,namenode最小内存应该是150MB而不是300MB。请帮我理解为什么是300MB

最佳答案

我猜你读过 Tom White 的书的第二版。我有第三版了,引用这个帖子Scalability of the Hadoop Distributed File System .进入帖子,我看了下一句话:

Estimates show that the name-node uses less than 200 bytes to store a single metadata object (a file inode or a block).

HDFS NameNode中的一个文件是:一个文件inode + 一个block。每个对两者的引用都有 150 个字节。 1.000.000 个文件 = 1.000.000 个 inode + 1.000.000 个 block 引用(在示例中,每个文件占用 1 个 block )。

2.000.000 * 150 字节 ~= 300Mb

我把链接放上来,你可以验证我的论证是否有误。

关于hadoop - 对 Hadoop namenode 内存使用的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211548/

相关文章:

hadoop -version 给我错误的结果,为什么? Hadoop 1.2.1

hadoop - 如何仅将 365 个最近的文件加载到 Hadoop/Hive 中?

hadoop - Pig - Order by - 不同的 reducer ?

java - 如何在 HBase 中更新过期的 Kerberos 票证?

hadoop - 为什么我们不能在 Hadoop 中计算作业执行时间?

java - Windows : <console>:16: error: not found: value sqlContext 中的 Spark 失败

Hadoop 2.6.0 - 在运行启动脚本时询问用户密码?

apache-spark - 带有类型安全配置的 Spark 2.1.1

hadoop - YARN在特定节点上分配容器

python - 2 个键的 MapReduce Reducer - Python