统计 HDFS 的小文件个数
程序员文章站
2022-07-14 19:50:25
...
使用 hdfs oiv 命令解析 namenode fsimage 文件,输入为 , 号分隔的文本文件
hdfs oiv -i $fsimage -t /data1/zpf/ops/small_file/tmp/ -o /data1/zpf/ops/small_file/fsimage.txt -p Delimited -delimiter ,
在hive上建一个表
将数据 put 到 hive 表对应的 hdfs 目录上
hadoop fs -put -f /data1/zpf/ops/small_file/fsimage.txt $hdfs_path
使用 hive sql 对组和用户进行分组统计
select groupname,username,count(1) filenum from ocdp.analysis where replication <>0 and username <> '-1' and filesize < $small_file_size group by groupname,username;
通过 beeline 将执行结果写入 csv 文件
beeline -u "$beeline_url" --outputformat=csv2 -e "select groupname,username,count(1) filenum from ocdp.analysis where replication <>0 and username <> '-1' and filesize < $small_file_size group by groupname,username;" > /data1/zpf/ops/small_file/analysis.csv
然后将 csv 结果解析写入 MySQL
for str in `cat /data1/zpf/ops/small_file/analysis.csv|tail -n +2`
do
g=`echo $str|awk -F ',' '{print $1}'`
u=`echo $str|awk -F ',' '{print $2}'`
s=`echo $str|awk -F ',' '{print $3}'`
sql="insert into filesize_simple (cluster_name,group_name,user_name,file_num) values ('bjtelcluster','$g','$u','$s')"
#echo $sql
mysql -h$db_host -D$db_database -u$db_user -e "$sql"
done