常用的HBASE數據遷移目前的方案有非常多種,本文主要介紹兩種一種為Hadoop手動數據遷移,另一種為Snapshot數據遷移
原理不多介紹,直接實戰
一、Hadoop層手動數據遷移
需要注意:
1.Hadoop/hbase版本也要注意是否一致,如果版本不一致,最終load表時會報錯
2.遷移實時寫的表,最好是停止集群對錶的寫入,在以下方式需要遷移的表為Test
步驟說明:將需要遷移的數據表傳輸到臨時目錄,再copyFromLocal到hdfs修復元數據
第一步:新建個臨時文件夾 /opt/hbaseDataTest/Test
第二步:在需要遷移的集群.hadoop/bin目錄下 執行
./hadoop fs -copyToLocal /hbase/data/default/Test /opt/hbaseDataTest/Test
第三步:在目標的集群.hadoop/bin目錄下 執行
./hadoop fs -copyFromLocal /opt/hbaseDataTest/Test /hbase/data/default/Test
第四步:在hbase/bin 執行
./hbase hbck -fixMeta 修復meta表數據
第五步: 在hbase/bin 執行
./hbase hbck -fixAssignments 重新分配數據到各個RegionServer
第六步:檢查表數據是否OK
二. Snapshot數據遷移方式
HBase快照(snapshot)顧名思義就是在某個時刻對某個HBase表的數據做了快速備份,就像拍照一下,讓數據停留在那個時刻不再變動,後面用來做數據的恢復或者遷移。HBase在0.94版本開始提供了快照功能,0.95版本以後默認開啟快照功能。
HBase的snapshot其實就是一組metadata信息的集合(文件列表),通過這些metadata信息的集合,就能將表的數據回滾到snapshot那個時刻的數據。
簡單概括HBase快照的使用場景如下:
1.HBase表的定期快速備份
2.升級前的HBase數據備份
3.集群間的數據遷移
4.構建測試環境數據
5.做數據恢復
遷移步驟
第一步:遷移snapshot
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot snapshot_src_table \
-copy-from hdfs://src-hbase-root-dir/hbase \
-copy-to hdfs://dst-hbase-root-dir/hbase \
-mappers 20 \
-bandwidth 1024
第二步:恢復snapshot
命令 :restore_snapshot ‘snapshotName’
備註:需要對錶進行過disable才能進行restore_snapshot的操作,如果這個還在寫入數據,需要採用第三步bulkload的方式導入
第三步:將snapshot使用bulkload的方式導入
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
-Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 \
hdfs://dst-hbase-root-dir/hbase/archive/datapath/tablename/filename tablename
備註:這種方式需要將所有的文件進行遍歷並全部通過bulkload導入,上面的只是一個文件的導入,這種方式不需要disable表。
其他snapshot操作
1.創建snapshot : snapshot 'tableName', ‘snapshotName'
2.查看snapshot : list_snapshots
3.查找以alrm開頭的snapshot : list_snapshots 'alrm.*'
4.刪除snapshot: delete_snapshot 'snapshotName'
三、總結
本文介紹兩種常用HBase數據遷移方案,總結起來:
Hadoop手動數據遷移: 比較簡單坑比較少 ,比較大數據量效率可能比較低
Snapshot: 比較常用 , 應用靈活,採用快照技術,效率比較高
具體場景還是具體選擇,想了解更多信息可以關注一下微信公眾號,回覆1024可以領取大數據學習資料,每日更新大數據學習文章。