在Hbase中快照實際上就是一份元信息的合集,在對表進行快照時,并不會涉及到表中實際數(shù)據的拷貝,而是僅僅拷貝關于該表的一些元數(shù)據信息。
例如組成表Region info,Descriptor描述信息以及與其對應的HFile文件的引用等內容。
在Hbase中不僅可以對表進行快照操作,還可以利用快照將表恢復到之前的狀態(tài),快照可以在線或者離線操作。
注意:Hbase中的快照是基于文件系統(tǒng)級別進行的。
實際上,利用Hbase的快照操作可以對表進行備份。在Hbase中對于表的備份包括表復制,導入導出表或者先將表關閉之后使用Distcp分布式拷貝來復制HDFS中關于表的Hfile文件等。
對于前兩種方式,實際上調用了MapReduce來掃描整張表的數(shù)據,然后將表復制出去。因為表數(shù)據是存放在RegionServer中的,所以需要RegionServer發(fā)生大量的I/O操作。將整張表的數(shù)據備份出去。
對于后一種方法,會將表關閉來停止所有的讀寫操作,在實際的生產環(huán)境中很難實現(xiàn)。
相比之下,在Hbase使用快照機制優(yōu)勢就很明顯了,在使用快照過程中,管理員不需要拷貝整張表的數(shù)據,而直接克隆表的元數(shù)據信息,因為不涉及大量的I/O操作,這對Regionerver產生的影響最小。
另外,也可以將快照導出到其他Hbase集群,導出操作只是帶有一些額外的集群間的邏輯數(shù)據的同步而已。
使用快照完成表的備份,是在HDFS層面進行的,意味著HMaster和域服務器與操作無關,就無需為不必要的數(shù)據創(chuàng)建緩存空間,不會涉及對整張表的掃描。
使用常規(guī)的表備份方式,因為會創(chuàng)建大量的對象而引起GC暫停,這會對Hbase的性能造成影響,例如DataNode數(shù)據節(jié)點會產生額外的網絡和磁盤負載等。
對于快照來說,離線方式指的是將表Disbale掉,由Hbase Master來遍歷HDFS中的表的元數(shù)據和Hfile,從而建立引用關系。
在線方式就是在表正常訪問的情況下,其過程類似于Prepare和Commit兩階段的提交。
HMaster收到創(chuàng)建快照命令后,會作為Coordinator協(xié)調者從Hbase的Meta表中取出目標表的Region和對應的RregionServer信息,這些RegionServer就作為第二階段提交的Participant參與者,Prepare準備階段會將表的Region信息做快照,并存儲到HDFS的臨時目錄,在Commit提交階段會將HMaster把臨時目錄改成正確的目錄。在創(chuàng)建快照的過程中,HMaster和Region server都是通過Zookeeper進行數(shù)據共享的。
這里使用了Hbase集群,其中包含三個節(jié)點。在執(zhí)行Hbase快照前,需要在主節(jié)點上進入Hbase的“conf”目 錄。 執(zhí) 行“vi hbasesite.xml”命令,在其配置文件中找到“”行,將其下的一行修改為“”,來啟動Hbase的快照功能。
同理,在其他兩個節(jié)點上分別打開上述配置文件,在其中添加“
然后,分別在以上節(jié)點的Hbase的“bin”目錄下執(zhí)行“./stop-hbase.sh” 和“./start-hbase.sh”命令,來重啟Hbase使上述配置生效。
在主節(jié)點上執(zhí)行“./hbase shell”命令,在控制臺中執(zhí)行“l(fā)ist”命令,查看數(shù)據庫中存在的表信息。例如執(zhí)行“scan ' product'”命令,查看“product”表的內容。
執(zhí) 行“s n a p s h o t'product',' productsnapsh ot'” 命 令,針 對 該 表創(chuàng)建快照,快照名為“productsnapshot”。
在Linux命令行下進入Hadoop的“bin”目錄,執(zhí)行“./hdfs dfs -ls /hbase/.hbase-snapshot”命令,查看快照文件存儲信息。
在其中打開名為“productsnapshot”的目錄,在其中包含“.snapshotinfo”和“data.manifest”兩個文件,存儲上述快照的元數(shù)據信息。
在Hbase控制臺下執(zhí)行“l(fā)ist_snapshots”命令,可以查看快照信息,包括快照的名稱,源表以及創(chuàng)建的日期和時間等。
利用快照可以創(chuàng)建一張新的表,可以實現(xiàn)表的克隆操作,新表中的數(shù)據和創(chuàng)建快照時的表數(shù)據相同。針對克隆表的修改操作,不會影響快照以及原始表。
在Hbase控 制 臺下 執(zhí) 行“clone_snap'p r o d u c t s n a p s h o t''klproduct'”命令,可以克隆出名為“klproduct”的新表。
利用快照可以將表恢復到快照創(chuàng)建時的狀態(tài)。
注意:在恢復時需要先將將表Disable掉。
例如執(zhí)行“disable product”,“r e s t o r e_s n a p s h o t'productsnapshot'”,“enable 'product'”命令,可以將表恢復到之前的狀態(tài)。
執(zhí) 行“delete_snapshot'productsnapshot'”命令,可以刪除指定的快照。
在Hbase集群環(huán)境中,可以將某集群中的Hbase快照導出到另外的集群中。
為此可以先在Linux中進入Hbase的“bin”目錄,執(zhí) 行“hbase class org.apache.hadoop.hbase.s n a p s h o t.t o o l.ExportSnapshot-snapshot productsnapshot-copy-to hdfs:///hostname:9000/hbase-mappers 16”命令,可以將名為“productsnapshot”的快照復制到名為“hostname”的集群中。