兼职公司 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 "\t""\t"}' | 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 也是按顺序进行排列的。
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章