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

Posted gxg123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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


以上是关于shell脚本删除hbase里面的数据(按照rowkey批量删除hbase的数据)的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本中实现hbase shell命令调用

hbase shell 常见命令

如何使用 shell 脚本加载 Hbase 表

hbase模糊查询key删除指定创建时间的数据

HBase-Shell-数据结构-原理

HBase Shell操作HBase创建表添加数据查看表数据操作列簇删除表