大数据HDFS集群运维之小文件统计

本文介绍了如何采集和解析HDFS的FsImage文件,以解决大数据集群中小文件问题。通过统计FsImage文件字段,将数据导入Hive表,然后使用SQL进行分析,以支持小文件治理和集群性能优化决策。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:大数据集群小文件分析:

随着公司集群规模越来越大,数据增长越来越快,文件Size比HDFS的Block Size(默认128MB)小的多的文件,小文件治理也迫在眉睫。目前采用离线分析Namenode元数据的方式进行统计分析。


提示:以下是本篇文章正文内容,下面案例可供参考

一、采集解析FsImage文件

#!/bin/bash

current_path=$(pwd)
echo "当前目录:$current_path"

if [ ! -d "${current_path}/tmp_image/" ]; then
    mkdir -p $current_path/tmp_image/
    echo "创建tmp_image目录"
else
    echo "tmp_image目录已经存在,请手动删除"
    exit
fi

echo "正在采集Fsimage文件"
hdfs dfsadmin -fetchImage ${current_path}/tmp_image

if ls $current_path/tmp_image/fsimage_0* 1> /dev/null 2>&1; then
    echo "存在以fsimage_0开头的文件"

    # 获取符合条件的文件名
    ovipath=$current_path/tmp_image/fsimage_0*
    echo "符合条件的文件:" $ovipath

    filename=$(ls $ovipath)
    echo "文件名:" $filename

    hdfs oiv -i "$filename" -o $current_path/tmp_image/fsimage.csv -p Delimited
    echo "成功解析文件并导出为fsimage.csv,路径是: $current_path/tmp_image/fsimage.csv"

    sed -i -e "1d" $current_path/tmp_image/fsimage.csv


else
    echo "不存在以fsimage_0开头的文件"
fi

二、统计小文件情况

1.FsImage文件字段含义

字段注释
PathHDFS路径
Replication副本数
ModificationTime最近修改时间
AccessTime最近访问时间
PerferredBlockSizeblock size
BlocksCount块总数
FileSize文件大小
NSQUOTA名称配额
DSQUOTA监控配额
Permission文件权限
UserName所属用户
GroupName所属用户组

2.本地文件导入hive表

2.1 创建hive外表

CREATE TABLE `tmp.fsimage_info_csv`(
  `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 SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'=',', 
  'serialization.format'=',') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
    'hdfs://bigdata/user/hive/warehouse/fsimage_info_csv';

将步骤1中解析到的fsimage.csv文件上传到hdfs里:

hdfs dfs -put ./tmp_image/fsimage.csv hdfs://bigdata/user/hive/warehouse/fsimage_info_csv/

2.2 分析统计

SELECT
    dir_path ,
    COUNT(*) AS small_file_num 
FROM
    (    SELECT
            relative_size,
            dir_path 
        FROM
            (    SELECT
                    (
                    CASE filesize < 4194304 
                        WHEN TRUE 
                        THEN 'small' 
                        ELSE 'large' 
                    END)  AS relative_size,
                    concat('/',split(PATH,'\/')[1], '/',split(PATH,'\/')[2], '/',split(PATH,'\/')[3], '/',split(PATH,'\/')[4], '/', split(PATH,'\/')[5], split(PATH,'\/')[6]) AS dir_path 
                FROM
                    tmp.fsimage_info_csv 
                --WHERE
                 --   replication = 0 and path like '/hive/warehouse/%'
                    ) t1
        WHERE
            relative_size='small'
            and 
            dir_path is not null 
            ) t2 
GROUP BY
    dir_path 
ORDER BY
    small_file_num desc

执行结果如下:
在这里插入图片描述


总结

使用Fsimage文件可以获取到HDFS的文件情况,使用sql进行统计分析能获取到集群文件使用情况,具体看业务需要,运维人员也方便对现HDFS集群做出更好的判断。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值