本篇內(nèi)容主要講解“Hbase數(shù)據(jù)的遷移方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Hbase數(shù)據(jù)的遷移方法是什么”吧!
創(chuàng)新互聯(lián)是一家專業(yè)提供武鳴企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都做網(wǎng)站、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為武鳴眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
在Hbase使用過程中,使用的Hbase集群經(jīng)常會因?yàn)槟承┰蛐枰獢?shù)據(jù)遷移。大多數(shù)情況下,可以跟用戶協(xié)商用離線的方式進(jìn)行遷移,遷移離線數(shù)據(jù)的方式就比較容易了,將整個Hbase的data存儲目錄進(jìn)行搬遷就行,但是當(dāng)集群數(shù)據(jù)量比較多的時候,文件拷貝的時間很長,對客戶的業(yè)務(wù)影響時間也比較長,往往在客戶給的時間窗口無法完成,本文給出一種遷移思路,可以利用Hbase自身的功能,對集群進(jìn)行遷移,減少集群業(yè)務(wù)中斷時間。
大家都知道Hbase有snapshot快照的功能,利用快照可以記錄某個時間點(diǎn)表的數(shù)據(jù)將其保存快照,在需要的時候可以將表數(shù)據(jù)恢復(fù)到打快照時間時的樣子。我們利用Hbase的snapshot可以導(dǎo)出某個時間點(diǎn)的全量數(shù)據(jù)。
因?yàn)橛脩舻臉I(yè)務(wù)還在不停的寫入表中,除了遷移快照時間點(diǎn)之前的全量數(shù)據(jù),我們還需要將快照時間點(diǎn)后源源不斷的增量數(shù)據(jù)也遷移走,這里如果能采用雙寫的方式,將數(shù)據(jù)寫入兩個集群就好了,但是用戶的業(yè)務(wù)不會這樣做,如果這樣做還得保證雙寫的事務(wù)一致性。于是可以利用Hbase的replication功能,replication功能本身就是保留了源集群的WAL日志記錄,去回放寫入到目的集群,這樣一來用戶業(yè)務(wù)端->原始集群->目的集群便是個串形的數(shù)據(jù)流,且由Hbase來保證數(shù)據(jù)的正確性。
所以這個遷移的方法就是利用snapshot遷移全量數(shù)據(jù),利用replication遷移增量數(shù)據(jù)。
T0: 配置好老集群A集群到新集群B的Replication關(guān)系,Replication的數(shù)據(jù)由A集群同步到集群B,將表設(shè)置成同步,從此刻開始新寫入A集群表的數(shù)據(jù)會保留在WAL日志中;
T1: 生成該時間點(diǎn)的全量數(shù)據(jù),通過創(chuàng)建快照,以及導(dǎo)出快照數(shù)據(jù)的方式將該時間點(diǎn)的數(shù)據(jù)導(dǎo)出到新集群B;
T2: 新集群B將T1時刻的快照數(shù)據(jù)導(dǎo)入,此時新集群B中會由快照創(chuàng)建出表,此時老集群A集群上設(shè)置的Replication的關(guān)系會自動開始將T0時刻保留的WAL日志回放至新集群B的表中,開始增量數(shù)據(jù)同步。
T3: 由于從T0-T3之間的操作會花費(fèi)一段時間,此時會積累很多WAL日志文件,需要一定的時間來同步至新集群,這里需要去監(jiān)控一下數(shù)據(jù)同步情況,等老集群WAL被逐漸消費(fèi)完,此時可以將老集群的寫業(yè)務(wù)停止一下并準(zhǔn)備將讀寫業(yè)務(wù)全部切到新集群B。
T4: T3-T4之間應(yīng)該是個很短的時間,整個遷移也只有這個時間點(diǎn)會有一定中斷,此時是讓用戶將業(yè)務(wù)完全切到新集群B,至此遷移完成。
1.設(shè)置集群A和集群B的peer關(guān)系
在源集群Hbase shell中, 設(shè)定peer
add_peer 'peer_name','ClusterB:2181:/Hbase'
2.在集群A的表中設(shè)置replication屬性
假設(shè)目標(biāo)表名為Student,先獲取Family=f
進(jìn)入Hbase shell中,
alter 'Student',{NAME => 'f',REPLICATION_SCOPE => '1'}
3.給集群A的表創(chuàng)建快照
在Hbase shell中
snapshot 'Student','Student_table_snapshot'
4.在A集群中導(dǎo)出快照
Hbase org.apache.hadoop.Hbase.snapshot.ExportSnapshot -snapshot Student_table_snapshot -copy-to /snapshot-backup/Student
5.將快照數(shù)據(jù)放置到集群B的對應(yīng)的目錄下
上面命令會導(dǎo)出2個目錄,一個是快照元數(shù)據(jù),一個是原始數(shù)據(jù)
將元數(shù)據(jù)放到/Hbase/.Hbase-snapshot中,將原始數(shù)據(jù)放到/Hbase/archive目錄中
由于Hbase的archive目錄會有個定時清理,這里可以提前將集群B的master的Hbase.master.cleaner.interval值設(shè)置大點(diǎn),避免拷貝過程中發(fā)生碰巧發(fā)生了數(shù)據(jù)清理。
如果集群B中沒有對應(yīng)的目錄,可以提前創(chuàng)建
hdfs dfs -mkdir -p /Hbase/.Hbase-snapshot
hdfs dfs -mkdir -p /Hbase/archive/data/default/
移動導(dǎo)出的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中恢復(fù)表的快照
進(jìn)入Hbase shell
restore_snapshot 'Student_table_snapshot'
恢復(fù)完成后,記得將集群B的hmaster中Hbase.master.cleaner.interval的值調(diào)整回來。
到此,相信大家對“Hbase數(shù)據(jù)的遷移方法是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!