欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

统计 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