Hbase - 遷移數(shù)據[導出,導入]

有沒有這樣一樣情況,把一個集群中的某個表導到另一個群集中,或者hbase的表結構發(fā)生了更改,但是數(shù)據還要,比如預分區(qū)沒做,導致某臺RegionServer很吃緊,Hbase的導出導出都可以很快的完成這些操作。

環(huán)境使用

現(xiàn)在環(huán)境上面有一張表logTable,有一個ext列簇
但是沒有做預分區(qū),雖然可以強制拆分表,但是split的start,end范圍無法精確控制。

方式一 (先導出再導出)

  1. 創(chuàng)建導出目錄
hadoop fs -mkdir /tmp/hbase-export
  1. 備份表數(shù)據
    使用hbase內置的mr命令,會默認導出到hdfs
hbase org.apache.hadoop.hbase.mapreduce.Export \
 -D hbase.mapreduce.scan.column.family=ext \
logTable hdfs:///tmp/hbase-export/logTable
  1. 刪除表
disable 'logTable'
drop 'logTable'
  1. 創(chuàng)建表
    數(shù)據3天過期,可以根據RegionServer的個數(shù)做預分區(qū),假設有8臺,則使用下面的方式。
    由于我們是使用MD5("uid")前兩位作為打散,范圍為00~ff 256個分片,可以使用如下方式。
# scala shell 創(chuàng)建方式
(0 until 256 by 256/8).map(Integer.toHexString).map(i=>s"0$i".takeRight(2))

hbase創(chuàng)表

create 'logTable',{ \
  NAME => 'ext',TTL => '3 DAYS', \
  CONFIGURATION => {
  'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy', \
  'KeyPrefixRegionSplitPolicy.prefix_length' => '2'
  }, \
  COMPRESSION => 'SNAPPY' \
}, \
SPLITS => ['20', '40', '60', '80', 'a0', 'c0', 'e0']
  1. 導出備份數(shù)據
hbase org.apache.hadoop.hbase.mapreduce.Import logTable hdfs:///tmp/hbase-export/logTable

注意事項

  1. 默認導出所有列簇,可通過指定-D hbase.mapreduce.scan.column.family=ext,info參數(shù)導出。
  2. 如果另一張表沒有源表對應的列簇將會出錯。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • > 有沒有這樣一樣情況,把一個集群中的某個表導到另一個群集中,或者hbase的表結構發(fā)生了更改,但是數(shù)據還要,比如...
    kikiki5閱讀 165評論 0 2
  • > 有沒有這樣一樣情況,把一個集群中的某個表導到另一個群集中,或者hbase的表結構發(fā)生了更改,但是數(shù)據還要,比如...
    kikiki5閱讀 188評論 0 2
  • > 有沒有這樣一樣情況,把一個集群中的某個表導到另一個群集中,或者hbase的表結構發(fā)生了更改,但是數(shù)據還要,比如...
    kikiki5閱讀 156評論 0 2
  • > 有沒有這樣一樣情況,把一個集群中的某個表導到另一個群集中,或者hbase的表結構發(fā)生了更改,但是數(shù)據還要,比如...
    kikiki5閱讀 147評論 0 2
  • > 有沒有這樣一樣情況,把一個集群中的某個表導到另一個群集中,或者hbase的表結構發(fā)生了更改,但是數(shù)據還要,比如...
    kikiki5閱讀 137評論 0 3