通过FsImage文件统计HDFS文件的变化
操作场景
在使用distcp的数据迁移方案规划中,需要通过HDFS中日增数据量来评估增量迁移的时间及次数。
用户可以通过查看解析最新的FsImage到Hive表中,通过SQL筛选计算并统计修改时间在24小时内的文件总大小。
约束与限制
该功能适用于MRS 3.6.0及之后版本。
前提条件
已安装HDFS、Hive组件。
操作步骤
- 登录Manager页面,选择“集群 > 服务 > HDFS > 实例”,查看并记录主NameNode角色的业务IP地址。
- 使用root用户登录主NameNode节点,执行以下命令查看并记录最新的fsimage文件对应的生成时间,及文件大小。
ll /srv/BigData/namenode/current/
例如执行后结果如下,记录最新的fsimage文件的生成时间为“2024-12-20 09:03”。

- 以客户端安装用户,登录安装了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
- 执行如下命令,将最新fsimage文件导出为可读文件“fsimage.txt”。
hdfs oiv -i /srv/BigData/imagecsv/fsimage_xxx -o /tmp/fsimage.txt -p Delimited -delimiter"|"
- 执行以下命令进入Hive客户端。
kinit 业务用户 (如果集群未启用Kerberos认证(普通模式),则无需执行该命令)
beeline
- 在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;
- 执行以下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’