# 主机小文件解析
查询48小时内未修改的文件
find ./ -type f -mtime +1
统计48小时之内未修改过的文件。
find ./ -type f -mtime +1 | wc -l
统计48小时之前未修改过并<10M(小文件)
find ./ -type f -mtime +1 -size -10M | wc -l
按照文件大小排序
find /var/log/ -type f -mtime +1 | xargs du --time | sort -h
按照文件大小排序,寻找前三并转换单位
find /var/log/ -type f -mtime +1 | xargs du --time | sort -h | awk -F " " '{print $1/1024 "M " $4 }' | tail -n 3
统计目录,排序
du -h /var/log | sort -h
查找大于200M的文件排序
find /var/log -type f -size +200M | xargs du -sh |sort -h
# HDFS小文件
## fsimage离线分析
1、获取fsimage文件(将最新的Image文件下载到本地)
hdfs dfsadmin -fetchImage /home/fionn/
2、解析faimage文件(使用-t参数使用临时文件处理中间数据,不加全部使用内存容易OOM)
hdfs oiv -i /home/fionn/fsimage_0000000000011359839 -t /home/fionn/tmpdir -o /home/fionn/fs_distribution -p Delimited -delimiter ','
-i: 要处理的FSImage或XML文件。
-t: 使用临时目录缓存中间文件,结果生成DetectCorruption或分隔输出。如果未设置,则处理器在内存中构造命名空间在输出文本之前。
-o: 输出文件的名称。如果指定文件存在,它将被覆盖。(默认情况下输出到stdout)如果输入文件是一个XML文件,还将创建一个<outputFile>.md5文件。
-p: 选择要应用的处理器类型针对图像文件。(XML|FileDistribution|ReverseXML|Web|Delimited|DetectCorruption)默认为Web。
-delimiter: 要与Delimited一起使用的分隔字符串。
3、创建hive库加载HDFS元数据
create database if not exists hdfsinfo;
use hdfsinfo;
4、创建表
CREATE TABLE 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';
4、上传文件
hdfs dfs -put ./fs_distribution /user/hive/warehouse/hdfsinfo.db/fsimage_info_csv
5、表查询分析
## 查询小于4M的文件
select path_dir, count(*) as small_file
from (select relative_size
, path_dir
from (select case
when filesize < 4194304
then 'small'
else 'large'
end as relative_size
, concat('/', split(path, '\/')[1], '/', split(path, '\/')[2], '/', split(path, '\/')[3], '/',
split(path, '\/')[4]) as path_dir
from fsimage_info_csv
where replication = 0
and path like '/user/hive%') t1
where relative_size = 'small'
and path_dir is not null) t2
group by path_dir
order by small_file desc ;
主机和HDFS小文件解析
于 2024-06-16 11:59:12 首次发布