Hbase實用技巧:全量+增量數據的遷移方法


摘要:本文介紹了一種Hbase遷移的方法,可以在一些特定場景下運用。

背景

在Hbase使用過程中,使用的Hbase集群經常會因為某些原因需要數據遷移。大多數情況下,可以跟用戶協商用離線的方式進行遷移,遷移離線數據的方式就比較容易了,將整個Hbase的data存儲目錄進行搬遷就行,但是當集群數據量比較多的時候,文件拷貝的時間很長,對客戶的業務影響時間也比較長,往往在客戶給的時間窗口無法完成,本文給出一種遷移思路,可以利用Hbase自身的功能,對集群進行遷移,減少集群業務中斷時間。

簡介

大家都知道Hbase有snapshot快照的功能,利用快照可以記錄某個時間點表的數據將其保存快照,在需要的時候可以將表數據恢復到打快照時間時的樣子。我們利用Hbase的snapshot可以導出某個時間點的全量數據。

因為用戶的業務還在不停的寫入表中,除了遷移快照時間點之前的全量數據,我們還需要將快照時間點后源源不斷的增量數據也遷移走,這里如果能采用雙寫的方式,將數據寫入兩個集群就好了,但是用戶的業務不會這樣做,如果這樣做還得保證雙寫的事務一致性。於是可以利用Hbase的replication功能,replication功能本身就是保留了源集群的WAL日志記錄,去回放寫入到目的集群,這樣一來用戶業務端->原始集群->目的集群便是個串形的數據流,且由Hbase來保證數據的正確性。

所以這個遷移的方法就是利用snapshot遷移全量數據,利用replication遷移增量數據。

遷移步驟

上圖給出了遷移的整個時間線流程,主要有這么5個時間點。

T0: 配置好老集群A集群到新集群B的Replication關系,Replication的數據由A集群同步到集群B,將表設置成同步,從此刻開始新寫入A集群表的數據會保留在WAL日志中;

T1: 生成該時間點的全量數據,通過創建快照,以及導出快照數據的方式將該時間點的數據導出到新集群B;

T2: 新集群B將T1時刻的快照數據導入,此時新集群B中會由快照創建出表,此時老集群A集群上設置的Replication的關系會自動開始將T0時刻保留的WAL日志回放至新集群B的表中,開始增量數據同步。

T3: 由於從T0-T3之間的操作會花費一段時間,此時會積累很多WAL日志文件,需要一定的時間來同步至新集群,這里需要去監控一下數據同步情況,等老集群WAL被逐漸消費完,此時可以將老集群的寫業務停止一下並准備將讀寫業務全部切到新集群B。

T4: T3-T4之間應該是個很短的時間,整個遷移也只有這個時間點會有一定中斷,此時是讓用戶將業務完全切到新集群B,至此遷移完成。

操作涉及的命令

1.設置集群A和集群B的peer關系

在源集群Hbase shell中, 設定peer

add_peer 'peer_name','ClusterB:2181:/Hbase'

2.在集群A的表中設置replication屬性

假設目標表名為Student,先獲取Family=f

進入Hbase shell中,

alter 'Student',{NAME => 'f',REPLICATION_SCOPE => '1'}

3.給集群A的表創建快照

在Hbase shell中

snapshot 'Student','Student_table_snapshot'

4.在A集群中導出快照

Hbase org.apache.hadoop.Hbase.snapshot.ExportSnapshot -snapshot Student_table_snapshot -copy-to /snapshot-backup/Student

5.將快照數據放置到集群B的對應的目錄下

上面命令會導出2個目錄,一個是快照元數據,一個是原始數據

將元數據放到/Hbase/.Hbase-snapshot中,將原始數據放到/Hbase/archive目錄中

由於Hbase的archive目錄會有個定時清理,這里可以提前將集群B的master的Hbase.master.cleaner.interval值設置大點,避免拷貝過程中發生碰巧發生了數據清理。

如果集群B中沒有對應的目錄,可以提前創建

hdfs dfs -mkdir -p /Hbase/.Hbase-snapshot
hdfs dfs -mkdir -p /Hbase/archive/data/default/

移動導出的snapshot文件到snapshot目錄
hdfs dfs -mv /snapshot-backup/Student/.Hbase-snapshot/Student_table_snapshot /Hbase/.Hbase-snapshot/
hdfs dfs -mv /snapshot-backup/Student/archive/data/default/Student /Hbase/archive/data/default/

6.在新集群B中恢復表的快照

進入Hbase shell
restore_snapshot 'Student_table_snapshot'

恢復完成后,記得將集群B的hmaster中Hbase.master.cleaner.interval的值調整回來。

參考文檔:

https://blog.csdn.net/qq475781638/article/details/95253603

https://support.huaweicloud.com/usermanual-mrs/mrs_01_0501.html

 

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

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



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