hive在運行過程中,我們經常會發現 hdfs /tmp/hive/hive or hdfs 目錄占用空間巨大,我這里已經清理過了所以,相對較小。但是初次使用hive的用戶,一定會發現
隨着時間的推移,/tmp/hive 目錄一定會變的越來越龐大,這主要是hive在運行過程中會生產大量的中間會話在/tmp目錄下,如果hive正常運行結束,臨時會話會被自動清理掉,
但是如果中間出現hive中斷,或者異常退出,這些中間會話就會一直保存在hdfs上,久而久之,越來越多,造成大量無用的積壓文件。必須手動清理掉。
參考國外論壇的腳本,寫了如下腳本,定時清理或者手動執行均可。
#!/bin/bash
#cleanup hive session dir on hdfs named with /tmp/hive/hdfs
usage="Usage: cleanup.sh [days]"
if [ ! "$1" ]
then
echo $usage
exit 1
fi
now=$(date +%s)
hadoop fs -ls /tmp/hive/hdfs | grep "^d" | while read f; do
dir_date=`echo $f | awk '{print $6}'`
difference=$(( ( $now - $(date -d "$dir_date" +%s) ) / (24 * 60 * 60 ) ))
if [ $difference -gt $1 ]; then
echo $f
hadoop fs -rm -r -skipTrash `echo $f| awk '{ print $8 }'`; //此處直接對上邊的過濾結果進行刪除,建議先改成 hadoop fs -ls -R 命令先進行測試,一切正常在改回刪除。
fi
done
-------------------------------------------------------------
我這邊,阿里雲centos7環境,腳本運行正常。