HDFS容量规划是确保集群能够满足业务需求的关键环节,涉及NameNode内存、DataNode内存和存储空间三个维度。
NameNode内存
HDFS 将一个大文件切分成多个固定大小的数据块(Block),默认大小为 256MB(可配置)。每个 Block 独立存储,并复制多个副本(默认 3 份)分布在不同 DataNode 上,保证数据可靠性。NameNode 维护文件到 Block 的映射关系,以及 Block 到 DataNode 的对应列表。NameNode的内存主要用于存储文件系统的元数据,包括文件/目录的inode信息和文件块映射。合理规划NameNode内存是保证HDFS性能和稳定性的关键。
HDFS文件对象数计算
每个文件/目录/Block都被视为一个HDFS对象。
| 单个文件大小 | 文件对象数 |
|---|---|
| 小于256MB | 1(对应文件) + 1(对应Block)= 2 |
| 大于256MB(例如256GB) | 1(对应文件) + 1024(对应Block)= 1025 |
查看HDFS文件对象数
1、登录翼MR Manager。
2、选择“集群服务 > HDFS > 集群大屏”。
3、“文件总数” + “块总数” 就是当前HDFS的文件对象数。
NameNode内存配置
1、登录翼MR Manager。
2、选择“集群服务 > HDFS > 配置管理 > hadoop-env.sh”。
3、搜索并修改”NAMENODE_HEAPSIZE”参数。
NameNode堆内存配置参照表:
| HDFS文件对象数 | 参考值 |
|---|---|
| 10,000,000 | -Xmx6g -Xms6g -Xmn1g |
| 50,000,000 | -Xmx25g -Xms25g -Xmn3g |
| 100,000,000 | -Xmx50g -Xms50g -Xmn5g |
| 200,000,000 | -Xmx100g -Xms100g -Xmn10g |
4、单击“保存更改”。
5、单击”同步”,等待同步完成。
6、重启NameNode实例。
注意
HDFS文件对象数建议不超过10亿
NameNode堆配置需要考虑机器可用内存
DataNode内存
DataNode 是实际存储 Block 的节点,每个 Block 以文件形式存储在本地磁盘。同一个 Block 的多个副本分布在不同的 DataNode 上,实现容错。DataNode 定期向 NameNode 发送心跳和块报告,汇报自身存储的Block 信息。DataNode 还会定期扫描 Block 文件,校验 CRC 确保数据无损坏。DataNode的内存用于管理数据块副本信息。相比NameNode,DataNode的内存规划相对简单。
内存估算因素
单个DataNode实例支持最大Block数建议不超500万。
单个DataNode实例上单个磁盘支持的最大Block数建议不超50万。
堆内存可按照每100万Block数配置2GB内存。
DataNode内存配置
1、登录翼MR Manager。
2、选择“集群服务 > HDFS > 配置管理 > hadoop-env.sh”。
3、搜索并修改”DATANODE_HEAPSIZE”参数。
DataNode堆内存配置参照表:
| Block数 | 参考值 |
|---|---|
| 1,000,000 | -Xmx2g -Xms2g -Xmn256m |
| 2,000,000 | -Xmx4g -Xms4g -Xmn512m |
| 5,000,000 | -Xmx10g -Xms10g -Xmn1g |
4、单击“保存更改”。
5、单击”同步”,等待同步完成。
6、重启DataNode实例。
HDFS存储空间
HDFS默认采用三副本策略存储数据,以保证数据的高可靠性。存储空间规划需要考虑副本因子。
规划示例
示例:规划一个100TB有效存储的HDFS集群。
原始存储需求:100TB
实际存储需求:100TB × 3 = 300TB
预留空间考虑:300TB / 0.8=375TB
节点规划:使用12TB硬盘,每节点配置6块数据盘,单节点原始容量 = 6× 12TB = 72TB
所需DataNode节点数 = 375TB / 72TB ≈ 5节点