HBase在0.94之后提供了Snapshot功能,一個snapshot其實就是一組metadata信息的集合,它可以讓管理員將表恢復到以前的一個狀態。snapshot並不是一份拷貝,它只是一個文件名的列表,並不拷貝數據。一個全的snapshot恢復以為着你可以回滾到原來的表schema和創建snapshot之前的數據。在0.95之后默認開啟snapshot功能,之前版本的需要手動開啟對snapshot的支持,修改hbas-site.xml文件添加
<property> <name>hbase.snapshot.enabled</name> <value>true</value> </property>
主要提供了以下幾個操作(目前只是對單個表進行這樣的操作):
#take snapshot hbase> snapshot 'tableName', 'snapshotName' #list snapshots hbase> list_snapshots #delete snapshot hbase> delete_snapshot 'snapshotName' #clone snapshot hbase> clone_snapshot 'src_snapshot','dest_snapshot' #restore snapshot, 首先必須將表disable掉 hbase> restore_snapshot 'snapshotName'
實踐的問題
目前我們線上的集群是hbase-0.94的,開啟了snapshot功能,實踐了一下,有以下幾個問題:
- 元數據存在不一致狀態時,一般的hbase一做split的時候就會出現暫態的元數據不一致
- 需要做restore的時候它會先對表的當前狀態做一下snapshot,成功之后才會去restore,這個有點沒必要,有時候我們正是因為元數據不一致才會去做restore,這樣就會沒辦法去做
- 生成snapshot的時候只能是一張表一張表去做,不知道后面的hbase版本會不會一個操作解決所有表的snapshot
后期計划升級hbase,嘗試新版本的snapshot會不會更實用可靠一些。