關於hbase的數據遷移


 

場景:

一套自己編譯的Hbase集群 A

一套自己通過cloudera平台搭建的Hbase集群 B

注意:( 我的兩套集群是同一個網段的)

方式1:通過快照方式進行數據遷移(不需要提前建表)

1):首先現在老集群A上進行快照制作(hbase命令行)

hbase> snapshot '要快照的表名tableA' , '快照名稱snapA'

查看快照:list_snapshots

刪除快照:delete_snapshot '快照名稱snapA'

2):開始快照遷移(將集群A的快照遷移到集群B上)

bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 快照名稱snapA -copy-to hdfs://newCluster:8082/hbase

3):登錄新集群的hbase命令行,然后執行

restore_snapshot 'snapA'

但是執行第3)步時候報錯:

Caused by: java.lang.IllegalArgumentException: A clone should not have regions to restore

發現其實自己編譯的快照和cloudera平台的Hbase不兼容。so,這種方式不合適

 

方式2:在老集群A上通過bulkload寫入新集群B上(需要提前建表,別忘記預分區)

1):在新集群B 提前將表創建好,例如:

create 'renter_info',{NAME =>'MM', COMPRESSION => 'SNAPPY'}, SPLITS => ['19999999', '33333332', '4ccccccb', '66666664' , '7ffffffd' , '99999996' , 'b333332f' , 'ccccccc8' , 'e6666661']

2):在老集群A 執行bulkload命令語句:

bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dcreate.table=no -DHbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=2014 hdfs://newCluster:8020/hbase/data/default/order_info

依然執行不過去!

因此上面的方式1、方式2其實是很依賴是否集群版本兼容問題

 

方式3:hadoop distcp 方式

1):通過hadoop distcp將集群A中要遷移的表數據 通過分布式copy方式,copy到集群B

hadoop distcp hdfs://oldcluster:8020/hbase/data/default/order_info  hdfs://newCluster:8020/hbase/data/default/order_info

2):修復元數據

/opt/cloudera/parcels/CDH/lib/hbase/bin/hbase hbck -fixMeta

3):重啟Hbase

解決!

 


免責聲明!

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



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