hdfs存储空间维护
hadoop集群运行一段时间,发现集群运行缓慢,执行df -h显示:
[hadoop@hadoop7 ~]$ df -h
/dev/mapper/vg_localhost-lv_data 591G 66G 496G 12% /data
/dev/mapper/vg_localhost-lv_home 296G 17G 264G 7% /home
/dev/mapper/vg_data1-lv_data1 1.1T 599G 445G 88% /data1
/dev/mapper/vg_data2-lv_data2 1.1T 591G 453G 87% /data2
/dev/mapper/vg_data3-lv_data3 1.1T 591G 453G 87% /data3
磁盘的存储已经达到了百分之80多,针对可以有如下解决方案
1.首先写sh监控磁盘,达到80%告警
for i in `df -h |grep /| awk -F " " '{print $5 ";" $6}'`;do
rm -rf disk_bak.txt
echo ${i} >> disk_bak.txt
#占比
number=""
number=`awk -F ";" '{print $1}' disk_bak.txt|tr -d "%"`
if [ ${number} -gt 80 ];then
#磁盘分区
disk=""
disk=`awk -F ";" '{print $2}' disk_bak.txt`
echo "${IP};${disk};${number}">>disk_log.log
fi
done
直接调用发短信接口,或者把日志disk_log.log发送邮件,了解集群磁盘情况
2.通过删除分区维护hdfs大小
表分区的建立,会在hdfs中按照分区建立文件夹,删除分区则删除了文件夹,查询hdfs文件得知:
[hadoop@hadoop7 ~]$ hadoop fs -ls /user/hive/warehouse/hive_test_table/op_month=201701/
Found 6 items
drwxrwxr-x+ - dj hadoop 0 2017-01-06 04:46 /user/hive/warehouse/hive_test_table/op_month=201701/op_time=20170104
drwxrwxr-x+ - dj hadoop 0 2017-01-06 10:17 /user/hive/warehouse/hive_test_table/op_month=201701/op_time=20170105
[hadoop@hadoop7 ~]$
执行命令:
hive -e "alter table hive_test_table drop partition (op_month=201701,op_time=20170104,op_hour=2017010111);
则删除了hdfs中的文件。
3.通过hdfs提供的shell接口,通过命令行删除文件
查询hdfs中文件占比大小
[hadoop@hadoop7 ~]$ hadoop fs -du /user/hive/warehouse/
272 816 /user/hive/warehouse/admin_hive
92 276 /user/hive/warehouse/admin_hive_external
0 0 /user/hive/warehouse/brk_d_comp_base_ds
11794905347 35384716041 /user/hive/warehouse/hive_test_table
删除不需要的文件
hadoop fs -rmr /user/hive/warehouse/hive_test_table/*201611*
4.删错文件处理方案
如果删除文件,在hadoop集群中的配置文件core-site.xml配置了:
1440分钟,是如果值为0,则不保存删除的文件,1440代表保留1440分钟删除的文件日志如下:
Moved: 'hdfs://gzcluster/user/hive/warehouse/hive_test_table/20161111' to trash at: hdfs://gzcluster/user/hadoop/.Trash/Current
16/12/23 15:43:21 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1440 minutes, Emptier interval = 0 minutes
Moved: 'hdfs://gzcluster/bass_cdr' to trash at: hdfs://gzcluster/user/hadoop/.Trash/Current
从日志显示删除的文件保存在路径hdfs://gzcluster/user/hadoop/.Trash/Current中
恢复hdfs文件,执行:
hadoop fs -mv /user/ocdc/.Trash/Current/bass_cdr/ /
如上就能回复删除的文件,当然,要在临时文件保存时间内恢复文件。