
# 查看HDFS容量状态
HDFS DataNode以Block的形式，保存用户的文件和目录，同时在NameNode中生成一个文件对象，对应DataNode中每个文件、目录和Block。
NameNode文件对象需要占用一定的内存，消耗内存大小随文件对象的生成而线性递增。DataNode实际保存的文件和目录越多，NameNode文件对象总量增加，需要消耗更多的内存，使集群现有硬件可能会难以满足业务需求，且导致集群难以扩展。
规划存储大量文件的HDFS系统容量，就是规划NameNode的容量规格和DataNode的容量规格，并根据容量设置参数。
#### 容量规格
以下相关参数可以参考[修改集群服务配置参数](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_2125.html)进入HDFS服务全部配置页面，搜索对应参数查看。
- NameNode容量规格 在NameNode中，每个文件对象对应DataNode中的一个文件、目录或Block。
  一个文件至少占用一个Block，默认每个Block大小为"134217728"即128MB，对应参数为"dfs.blocksize"。默认情况下一个文件小于128MB时，只占用一个Block；文件大于128MB时，占用Block数为：文件大小/128MB。目录不占用Block。
  根据"dfs.blocksize"，NameNode的文件对象数计算方法如下：
  表1NameNode文件对象数计算 
  | 单个文件大小          | 文件对象数                                         |
  |:---|:---|
  | 小于128MB         | 1（对应文件）+1（对应Block）=2                          |
  | 大于128MB（例如128G） | 1（对应文件）+1,024（对应128GB/128MB=1024 Block）=1,025 |
     
  主备NameNode支持最大文件对象的数量为300,000,000（最多对应150,000,000个小文件）。"dfs.namenode.max.objects"规定当前系统可生成的文件对象数，默认值为"0"表示不限制。
  
- DataNode容量规格 在HDFS中，Block以副本的形式存储在DataNode中，默认副本数为"3"，对应参数为"dfs.replication"。
  集群中所有DataNode角色实例保存的Block总数为：HDFS Block \* 3。集群中每个DataNode实例平均保存的Blocks= HDFS Block \* 3/DataNode节点数。
  表2DataNode支持规格 
  | 项目                             | 规格        |
  |:---|:---|
  | 单个DataNode实例支持最大Block数         | 5,000,000 |
  | 单个DataNode实例上单个磁盘支持最大Block数    | 500,000   |
  | 单个DataNode实例支持最大Block数需要的最小磁盘数 | 10        |
     
  表3DataNode节点数规划 
  | HDFS Block数 | 最少DataNode角色实例数                |
  |:---|:---|
  | 10,000,000  | 10,000,000 \*3/5,000,000 = 6   |
  | 50,000,000  | 50,000,000 \*3/5,000,000 = 30  |
  | 100,000,000 | 100,000,000 \*3/5,000,000 = 60 |
     
  
 
#### 内存参数设置
以下相关参数可以参考[修改集群服务配置参数](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_2125.html)进入HDFS服务全部配置页面，搜索对应参数查看。
- NameNode JVM参数配置规则 NameNode JVM参数"GC_OPTS"默认值为：
  -Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -Djdk.tls.ephemeralDHKeySize=3072 -Djdk.tls.rejectClientInitiatedRenegotiation=true -Djava.io.tmpdir=${Bigdata_tmp_dir}
  NameNode文件数量和NameNode使用的内存大小成比例关系，文件对象变化时请修改默认值中的"-Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M"。参考值如下表所示。
  表4NameNode JVM配置 
  | 文件对象数量      | 参考值                                                    |
  |:---|:---|
  | 10,000,000  | "-Xms6G -Xmx6G -XX:NewSize=512M -XX:MaxNewSize=512M"   |
  | 20,000,000  | "-Xms12G -Xmx12G -XX:NewSize=1G -XX:MaxNewSize=1G"     |
  | 50,000,000  | "-Xms32G -Xmx32G -XX:NewSize=3G -XX:MaxNewSize=3G"     |
  | 100,000,000 | "-Xms64G -Xmx64G -XX:NewSize=6G -XX:MaxNewSize=6G"     |
  | 200,000,000 | "-Xms96G -Xmx96G -XX:NewSize=9G -XX:MaxNewSize=9G"     |
  | 300,000,000 | "-Xms164G -Xmx164G -XX:NewSize=12G -XX:MaxNewSize=12G" |
     
  

- DataNode JVM参数配置规则 DataNode JVM参数"GC_OPTS"默认值为：
  -Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -Djdk.tls.ephemeralDHKeySize=3072 -Djdk.tls.rejectClientInitiatedRenegotiation=true -Djava.io.tmpdir=${Bigdata_tmp_dir}
  集群中每个DataNode实例平均保存的Blocks= HDFS Block \* 3/DataNode节点数，单个DataNode实例平均Block数量变化时请修改默认值中的"-Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M"。参考值如下表所示。
  表5DataNode JVM配置 
  | 单个DataNode实例平均Block数量 | 参考值                                                  |
  |:---|:---|
  | 2,000,000             | "-Xms6G -Xmx6G -XX:NewSize=512M -XX:MaxNewSize=512M" |
  | 5,000,000             | "-Xms12G -Xmx12G -XX:NewSize=1G -XX:MaxNewSize=1G"   |
     
  Xmx内存值对应DataNode节点块数阈值，每GB对应500000块数，用户可根据需要调整内存值。
  
 
#### 查看HDFS容量状态
- NameNode信息 MRS 3.x之前版本：登录MRS控制台，选择"组件管理 \> HDFS \> NameNode(主)"，单击"Overview"，查看"Summary"显示的当前HDFS文件对象、文件数量、目录数量和Block数量信息。
  ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001209472823.png)
  MRS 3.x及后续版本：登录FusionInsight Manager，选择"集群 \> 服务 \> HDFS \> NameNode(主)"，单击"Overview"，查看"Summary"显示的当前HDFS文件对象、文件数量、目录数量和Block数量信息。
  
- DataNode信息 MRS 3.x之前版本：登录MRS控制台，选择"组件管理 \> HDFS \> NameNode(主)"，单击"Datanodes"，查看所有告警DataNode节点的Block数量信息。
  ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001164033232.png)
  MRS 3.x及后续版本：登录FusionInsight Manager，选择"集群 \> 服务 \> HDFS \> NameNode(主)"，单击"DataNodes"，查看所有告警DataNode节点的Block数量信息。
  
- 告警信息 监控ID为14007、14008、14009的告警是否产生，根据业务需要修改告警阈值。
  
 
