码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2020-04-22 16:12:15      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:while   失误   key   alt   for   数据   prefix   http   tail   

最近在做将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


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

标签:while   失误   key   alt   for   数据   prefix   http   tail   

原文地址:https://www.cnblogs.com/gxgd/p/12752678.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!