1. 程式人生 > >hbase資料刪除不釋放region解決辦法

hbase資料刪除不釋放region解決辦法

轉http://www.aboutyun.com/thread-8306-1-1.html

設定ttl,這個就需要disable表,需要丟資料,實在是沒有辦法了,然後設定了ttl


  1. 1:disable "table"  
  2. 2:alter 'table' , {NAME=>'la',TTL=>'15768000'}   
  3. 3:enable "table"  
複製程式碼
然後日誌就一直刷屏,在合併,更新。刪除資料檔案。
疑問:執行以上三條命令,時間差不多3分鐘,就恢復了,但是後日志一直在合併,我查詢了下資料,資料也正常記錄,但是查詢報錯“region not online”,region還在合併唄。就是說影響資料就影響了幾分鐘,hdfs的資料在慢慢的刪除,大概執行了6小時,刪除了完畢,伺服器恢復正常。

最嚴重的一個問題:
       hbase不釋放region,把資料刪除了,region還不釋放,那在分析的時候,很消耗記憶體。
       思路:刪除hdfs regionID、刪除meta表的region指向.

刪除hdfs 


  1. #!/bin/sh  
  2. if [ $# -lt 3 ] ; then  
  3.     echo "please input 3 parameter[file_name_path、hadoop_path、input_path]"  
  4.     exit  
  5. else  
  6.     cat $1 | while read row  
  7.     do  
  8.         regionpath=`echo "$row" | awk -F '.' '{print $2}'`  
  9.         table=`echo "$row" | awk -F ',' '{print $1}'`  
  10.         #刪除hdfs的region  
  11.         if [ -z $table ] ; then  
  12.            echo "table is null"  
  13.            exit;  
  14.         fi  
  15.         if [ -z $regionpath ] ; then  
  16.            echo "regionpath is null"  
  17.            exit;  
  18.         fi  
  19.         cd $2  
  20.         ./hadoop fs -rmr  /hbase/$table/$regionpath  
  21.         #刪除meta表的region  
  22.         echo "deleteall '.META.','$row'">>$3  
  23.         echo "$regionpath"  
  24.     done  
  25. fi  
複製程式碼
刪除meta

  1. #!/bin/sh  
  2. if [ $# -lt 2 ] ; then  
  3.     echo "please input 2 parameter[hbase_path、file_path]"  
  4.     exit  
  5. else  
  6.     if [ -z $1 ] ; then  
  7.         echo " hbase_path is null!!!"  
  8.         exit  
  9.     fi  
  10.     if [ -z $2 ] ; then  
  11.         echo " file_path is null!!!"  
  12.         exit  
  13.     fi  
  14.     cd $1  
  15.     ./hbase shell< $2  
  16. fi  
  17. ~                  
複製程式碼