Spark_算子調優
1119
2025-03-31
背景
在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
HBase 表格存儲服務 CloudTable 智能數據 EI企業智能
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。