hbase snapshot 表備份 恢復

2022-09-02 17:30:09 字數 3352 閱讀 6525

snapshot其實就是一組

metadata

資訊的集合,它可以讓管理員將表恢復到以前的乙個狀態。

snapshot

並不是乙份拷貝,它只是乙個檔名的列表,並不拷貝資料。乙個全的

snapshot

恢復以為著你可以回滾到原來的表

schema

和建立snapshot

之前的資料。

應用場景

1獲取:該操作嘗試從指定的表中獲取乙個snapshot。該操作在

regions

作balancing

,split

或者merge

等遷移工作的時候可能會失敗。

2拷貝:該操作用指定snapshot的

schema

和資料來建立乙個新錶。該操作會不會對 原表或者該

snapshot

造成任何影響。

3恢復:

該操作將乙個表的schema和

data

回滾到建立該

snapshot

時的狀態。

4刪除:該操作將乙個snapshot從系統中移除,釋放磁碟空間,不會對其他拷貝或者

snapshot

造成任何影響。

5匯出:該操作拷貝這個snapshot的

data

和metadata

到另乙個集群。該操作僅影響

hdfs

,並不會和

hbase

的master

或者region server

通訊(這些操作可能會導致集群掛掉)。

首先我們要理解,hbase的底層儲存檔案

hfile

是什麼,以及是怎麼被生成的、怎麼被刪除的(或者叫生命週期)。其次就不難理解

snapshot

為什麼不需要複製業務資料了。

1. hfile是什麼

hbase是乙個

key-value

資料庫,其基本資料操作(如

put、

delete

等)最後都化歸為

key-value

對,儲存在

hdfs

的乙個個檔案(

hfile

)中:

hfile有兩種生成方式,分別是memstore flush和compaction

memstore flush

寫操作(put、delete等)在wal(write-ahead log)提交成功後,馬上會寫入對應region server的記憶體緩衝區(memstore)中。在memstore裡這些操作是按key排好序的。當memstore寫滿時,就會將這些資料寫入到hdfs中成為乙個hfile。

compaction

hfile內部的資料是按key排好序的,但hfile之間的資料並不能保證key的順序,也就是說,對於新生成的hfile,其裡面的key值並不都比老的hfile的大。因此每次檢索時,都需要在所有hfile中檢索一次,再將結果合併。雖然hbase針對這個設計了各種加速機制(如bloom filter),但hfile檔案數目一多還是會比較吃力,因此就需要對hfile做合併操作(compaction)。compaction分為minor和major兩種級別,本質上都是從幾個hfile生成合併後的hfile(類似於合併幾個有序陣列),然後,老的hfile被刪除,起用合併後的hfile。

3. hfile何時會被刪除

上面提到過的,在完成compaction後,老的hfile就會被刪除,起用合併後的hfile。

4. snapshot操作的實現

細心的你是否發現了乙個事實,hfile是不會被追加或者修改的!hfile一旦生成,就不會再被改變,只有被拿去合併後,生成了新的hfile,完成自己的使命時才會被刪除。

那如果不刪除呢?

比如說,我今天建了個表開始跑業務,這個表總共生成了10個hfile,第二天又生成一些hfile,並因此觸發了合併操作,現在啟用的hfile裡有一些是老的沒被合併的,有一些是新的由合併產生的。如果昨天那10個hfile還在,那我只要讓這個表啟用原來的這10個hfile,不就回滾到昨天的狀態了嘛。依靠的是什麼?就是這10個hfile自從誕生之後就不會被改動,連追加都不會。他們像琥珀一樣,記錄了這個表昨天的所有資料。

因此,建立snapshot其實就是把當前所有啟用的hfile檔名記錄下來,並提醒系統在compaction時不要刪除它們。恢復snapshot就是重新啟用當時的那些hfile。當然這兩句話說得不嚴謹,還有一些細節要處理,比如建snapshot時要把記憶體裡的東西也存下來先。具體是這樣的:

建立snapshot

1,master與regionserver同步,讓他們同時進行memstore flush

2,記錄metadata,即當前表有哪些region,每個region使用的hfile是哪些

3,「標記」hfile以防被刪除

*建立snapshot的過程不需要讓表下線。

恢復snapshot

根據snapshot對應的metadata恢復各個region,該錶需要先下線

5.hbase shell: snapshot 操作

想使用snapshot功能,請確認你的hbase-site.xml中的hbase.snapshot.enabled 配置項為true

hbase.snapshot.enabled

true

5.1表上建立snapshot

hbase(main):003:0> snapshot 'abc','spabc'

(abc為表名字,spabc為快照名字)

5.2檢視快照

hbase(main):004:0> list_snapshots

5.3恢復快照

hbase(main):012:0> deleteall 'abc','admin'

(刪除rowkey為admin 的整行)

hbase(main):013:0> scan 'abc'

hbase(main):016:0> disable 'abc'

hbase(main):017:0> restore_snapshot 'spabc'

(spabc為快照名字)

hbase(main):018:0> enable 'abc'

hbase(main):019:0> scan 'abc'

刪除的資料又回來了

5.4刪除快照

hbase(main):001:0> delete_snapshot 'spabc'

xtrabackup全備 增備 恢復

全備 innobackupex no timestamp defaults file path my.cnf data backup 20141106 增量1 innobackupex no timestamp defaults file path my.cnf incremental increm...

Hadoop的冷備 熱備

冷備份 hadoop1.x namenode 主 secondarynamenode 從 在hadoop1.x中,secondarynamenode會按照時間閾值 比如24小時 或者edits日誌大小閾值 比如1g 週期性的將fsimage和edits合併成新的fsimage並替換,然後將最新的fs...

xtrabackup備份(全備,增備)

xtrabackup的介紹 mysql冷備 mysqldump mysql熱拷貝都無法實現對資料庫進行增量備份。在實際生產環境中增量備份是非常實用的,如果資料大於50g或100g,儲存空間足夠的情況下,可以每天進行完整備份,如果每天產生的資料量較大,需要定製資料備份策略。例如每週實用完整備份,周一到...