兼职公司 hadoop 运维之后,经常要解决 hdfs 空间占用的问题,不知道哪天谁又在集群上留下一大堆缓存文件也不清掉,hadoop 本身默认就是三副本,人一多每个人留一点结果占用了一堆的存储空间。
在 linux 上游 du
这个指令可以很轻松的结合 sort
对文件夹的大小进行排序,分析,如下:
du -smh * | sort -h
[root@hadoop101 opt]# du -smh * | sort -h
154m rh
1.2g software
14g module
在 hdfs 上也支持使用 du 进行文件大小的分析,但是套用上面的模式,就会有些不兼容,所以我对这个指令的结果进行一定的处理,可以得到和上面一样的效果,在此记录一下供大家参考,具体的脚本如下。
脚本名:./analyze_hdfs_files.sh
#!/bin/bash
hadoop fs -du -h ${1:?} | grep -e "m|g|t" | awk '{print $1$2"\t"$3$4"\t"$5}' | sort -h
- 案例
例如:我想看一下 hive 数据库下哪一个库,以及哪一个表的占用最大,可以像下面这样处理:
[root@hadoop101 opt]$ ./analyze_hdfs_files.sh /user/hive/warehouse
4.2t 12.8t /user/hive/warehouse/tmp_table.db
9.0t 27.0t /user/hive/warehouse/dws_table.db
161.2t 491.8t /user/hive/warehouse/dw_table.db
228.0t 691.7t /user/hive/warehouse/ods_table.db
可以看到 ods_table.db
数据库下的表是最大的,具体是哪一张表呢,可以继续深入:
[sunkangkang@fmidcslave01 scripts]$ ./analyze_hdfs_files.sh /user/hive/warehouse/ods_table.db | tail -3
189.8g 569.3g /user/hive/warehouse/ods_table.db/ods_status_change
430.3g 1.3t /user/hive/warehouse/ods_table.db/ods_locations
160.6t 481.7t /user/hive/warehouse/ods_table.db/ods_log
这样就可以查到具体哪一张表的占用最大,类似的想要看哪个用户的存储占用,可以分析 /user
路线下的占用情况,而且这个脚本也可以兼容不同量级的存储大小,进行排序的时候,kb、mb、gb、tb 也是按顺序进行排列的。
发表评论