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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM