Hbase實用技巧:全量+增量資料的遷移方法

華為雲開發者社群發表於2020-10-28
摘要:本文介紹了一種Hbase遷移的方法,可以在一些特定場景下運用。

背景

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

簡介

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

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

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

遷移步驟

Hbase實用技巧:全量+增量資料的遷移方法

上圖給出了遷移的整個時間線流程,主要有這麼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

 

 

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

相關文章