
# 通过FsImage文件统计HDFS文件的变化
#### 操作场景
在使用distcp的数据迁移方案规划中，需要通过HDFS中日增数据量来评估增量迁移的时间及次数。
用户可以通过查看解析最新的FsImage到Hive表中，通过SQL筛选计算并统计修改时间在24小时内的文件总大小。
#### 约束与限制
该功能适用于MRS 3.6.0及之后版本。
#### 前提条件
已安装HDFS、Hive组件。
#### 操作步骤
1. 登录Manager页面，选择"集群 \> 服务 \> HDFS \> 实例"，查看并记录主NameNode角色的业务IP地址。
2. 使用**root** 用户登录主NameNode节点，执行以下命令查看并记录最新的fsimage文件对应的生成时间，及文件大小。
   
   **ll /srv/BigData/namenode/current/**
   例如执行后结果如下，记录最新的fsimage文件的生成时间为"2024-12-20 09:03"。
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002526101349.png "点击放大")
   
   
3. 以客户端安装用户，登录安装了HDFS客户端的节点。执行以下命令修改"*HDFS客户端安装路径* /HDFS/component_env"文件。
   
   **vi** *HDFS客户端安装路径* **/HDFS/component_env**
   修改"CLIENT_GC_OPTS"参数，内存大小可按照fsimage文件大小设置，1GB fsimage的物理文件对应配置CLIENT_GC_OPTS 4GB。
   修改保存后，执行以下命令重新加载客户端环境变量bigdata_env。
   **source** *HDFS客户端安装路径* **/bigdata_env**
   
   
4. 执行如下命令，将最新fsimage文件导出为可读文件"fsimage.txt"。 
   **hdfs oiv -i /srv/BigData/imagecsv/fsimage_xxx -o /tmp/fsimage.txt -p Delimited -delimiter"\|"**
   
   
5. 执行以下命令进入Hive客户端。 
   **kinit** *业务用户* （如果集群未启用Kerberos认证（普通模式），则无需执行该命令）
   **beeline**
   
   
6. 在Hive客户端中执行以下语句创建Hive表，并将导出的fsimage文件加载入该Hive表。 
   ```
   CREATE TABLE `fsimage_view`(
     path string,
     replication int,
     modificationtime string,
     accesstime string,
     preferredblocksize bigint,
     blockscount  int,
     filesize bigint,
     nsquota string,
     dsquota string,
     permission string,
     username string,
     groupname string)
     ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' stored as textfile;
   ```
   ```
   LOAD DATA  LOCAL INPATH '/tmp/fsimage.txt'  OVERWRITE INTO TABLE fsimage_view;
   ```
   
   
7. 执行以下SQL统计修改时间在12.19-12.20范围内变化的文件的总大小，一般统计fsimage文件生成前一天的数据变化量，如下SQL是统计一天新增变化的文件大小，单位GB。 
   ```
   Select (sum(filesize)/1024/1024/1024) from fsimage_view where modificationtime between ‘2024-12-19 00:00’ and ‘2024-12-20 00:00’
   ```
   
   
 
