HDFS, NameNode堆内存计算

1. 问题

NameNode Heap size配置多大合适?

2. 分析

2.1. 前提

以后标准引用自cloudera ( Sizing NameNode Heap Memory | 5.16.x | Cloudera Documentation), 供参考, 准确性请自行考究

  • In HDFS, data and metadata are decoupled. Data files are split into block files that are stored, and replicated, on DataNodes across the cluster. The filesystem namespace tree and associated metadata are stored on the NameNode.
  • Namespace objects are file inodes and blocks that point to block files on the DataNodes. These namespace objects are stored as a file system image (fsimage) in the NameNode’s memory and also persist locally.
  • Each namespace object on the NameNode consumes approximately 150 bytes.
  • Replication affects disk space but not memory consumption.
  • A more conservative estimate is 1 GB of memory for every million blocks.

2.2. NameNode堆内存使用计算评估

假设共有1024M数据, HDFS块大小128M

2.2.1. 场景一, 1个1024M文件

1个文件=1 file inode, 占用8个块 (1024 / 128) = 8 blocks metadata

消耗namenode堆内存: 150 bytes * (1 + 8) = 1350 bytes

2.2.2. 场景二, 8个128M文件

8个文件 = 8 file inodes, 占用8个块 = 8 blocks metadata

消耗namenode堆内存: 150 bytes * (8 + 8) = 2400 bytes

2.2.3. 场景三, 1024个1M文件

1024个文件 = 1024 file inodes, 占用1024个块 = 1024 blocks metadata

消耗namenode堆内存: 150 bytes * (1024 + 1024) = 307200 bytes

2.3. NameNode堆内存大小需求评估

假设有100台存储主机, 每台数据存储16T, HDFS块大小128M, 副本数为3

  • 最大数据量: 100 * 12 T = 1200 T
  • 块数量: 1200 T / (128M * 3) = 3125000
  • 需要的堆内存: 3125000/ 1000000 ~= 3G
  • 平均1G内存对应400T数据

实际情况, 文件不可能按128M完美切分, 小文件的存在, 使NameNode的堆内存使用率比想象的高

如果块的平均大小为1M, 那128M的理想大小块消耗内存变为原来的128倍, 所以1G内存真实对应3T数据 (400T / 128)

3. 疑惑

官方认为1G内存对应1百万个块

按照上面的前提计算, 1百万块实际大约消耗内存300M ( 150 bytes * (1000000 + 1000000)), 远低于1G, 当然NameNode堆内存除了存储元数据, 还需要供自身进程使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值