hive 中间会话临时文件自动清理脚本

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环境,脚本运行正常。

原文地址:https://www.cnblogs.com/telegram/p/10748530.html