shell脚本删除hbase里面的数据(按照rowkey批量删除hbase的数据)

最近在做将kafka里面的业务日志写入到hbase 当中,然后要对hbase 里面的数据进行解析然后插入到数据库当中。

为了能节约磁盘空间想对hbase里面的数据进行删除,但是我们设置的rowkey是按照每小时 加日期 然后加hash码的方式组成的。例子如下:

 

这个地方我们没有办法通过框定一个时间范围对这个rowkey 进行删除。所以我想了一个办法。

(1)我们可以从外面传入2个参数 一个是起始日期 ,一个是结束日期,然后把里面的每个小时的rowkey通过rowkey 前缀过滤的形式将数据拿出来 然后塞入到一个文件当中

然后最后对这个文件进行批量删除。我的脚本如下:

#!/bin/bash
tablename=$1
startrow=$2
endrow=$3
if [ $# -eq 0 ];then
echo "请输入表名,startRow,endRow,日期的格式如下2017-04-04"
exit 0
fi

beg_s=`date -d "$startrow" +%s`
end_s=`date -d "$endrow" +%s`

rowkey=""

while [ "$beg_s" -le "$end_s" ];do
    day=`date -d @$beg_s +"%Y%m%d"`;
    echo "当前日期:$day"
    for((i=0;i<24;i++))
do

    if [ ${#i} -eq 1 ];then
        rowkey="0"$i"|"$day
        echo $rowkey
        echo "scan '${tablename}',{ROWPREFIXFILTER => '${rowkey}'}" |hbase shell|awk -F ' ' '{print $1'\t'}'> ./file.txt
        #删除前6行非表中数据
        sed -i '1,6d' file.txt
        #删除最后一行(空行)
        sed -i '$d' file.txt
        #删除最后一行(总条数)
        sed -i '$d' file.txt
        cat ./file.txt|awk '{print $1}'|while read rowvalue
        do
        echo -e "deleteall '${tablename}','${rowvalue}'" >> ./deleteRowFile.txt
        done
        rm ./file.txt


        
    else
        rowkey=$i"|"$day
        echo $rowkey
        echo "scan '${tablename}',{ROWPREFIXFILTER => '${rowkey}'}" |hbase shell|awk -F ' ' '{print $1'\t'}'> ./file.txt
        #删除前6行非表中数据
        sed -i '1,6d' file.txt
        #删除最后一行(空行)
        sed -i '$d' file.txt
        #删除最后一行(总条数)
        sed -i '$d' file.txt
        cat ./file.txt|awk '{print $1}'|while read rowvalue
        do
        echo -e "deleteall '${tablename}','${rowvalue}'" >> ./deleteRowFile.txt
        done
        rm ./file.txt


    fi
done
    
    beg_s=$((beg_s+86400));
done

echo "exit" >> ./deleteRowFile.txt
       
        #为避免线上执行失误 ,先检查deleteRowFile.txt中要删除的rowkey是否正确,所以以下两行命令请手动执行
        #hbase shell ./deleteRowFile.txt
        #rm ./deleteRowFile.txt

这里需要传入3个参数 分别是hbase 的表名称,然后起始时间,结束时间就可以将数据塞入到一个文件当中 最后塞入文件的形式如下

 

 为了防止数据删除错误,我们先检查 一下删除的是否正确,然后执行 

hbase shell ./deleteRowFile.txt

最后将这个文件删除掉。

借鉴博客:https://blog.csdn.net/nyistzp/article/details/76922512?utm_source=blogkpcl9


posted on 2020-04-22 15:59  gxg123  阅读(3823)  评论(0编辑  收藏  举报

导航