统计 HDFS 的小文件个数

使用 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

 

你可能感兴趣的:(HDFS)