Apache HBase快照介绍
轉自?http://www.importnew.com/4966.html
CDH是Cloudera的完全開源分布式Apache Hadoop及相關項目(包括Apache?HBase)。CDH的當前版本(4.2)引入的一個HBase新特性最近加入到了主干中,允許用戶對指定表進行快照。
在CDH4.2之前,唯一能夠備份或克隆表的方法就是使用復制/導出表或者在關閉表之后拷貝HDFS中所有的hfile。復制/導出是通過一系列工具調用MapReduce來掃描并復制表,這樣會對域服務器的效率有直接的影響。關閉表會停止所有的讀寫操作,實際環境中往往無法接受。
相比之下HBase快照允許管理員不拷貝數據直接克隆一張表,這對域服務器產生的影響最小。將快照導出至其他集群不會直接影響到任何域服務器;導出只是帶有一些額外邏輯的群間數據同步。
下面是一些HBase快照的使用場景:
- 從用戶/應用異常中還原
- 從一個已知的安全狀態恢復/還原
- 查看之前的快照并有選擇性的合并不同寫入產品環境
- 當主應用程序升級或改版時保存快照。
- 在指定時間審查和/或報告數據。
- 按照規定捕獲月度數據
- 生成日終/月末/季末報告
- 應用測試
- 通過快照模擬生產環境下結構或應用發生的變化,測試完成即可丟棄。例如:生成快照,利用快照中內容構建新表(原有結構+數據)并且修改新表的結構,添加或刪除列之類。(原始表、快照和新表保持相互獨立)
- 減少工作壓力
- 生成快照,導入到其他集群,然后運行MapReduce jobs。因為導出的快照是HDFS級別,所以不會像復制表那樣降低HBase主集群的效率。
快照是什么?
快照就是一份元信息的合集,允許管理員恢復到表的先前狀態。快照不是表的復制而是一個文件名稱列表,因而不會復制數據。完全快照恢復是指恢復到之前的“表結構”以及當時的數據,快照之后發生的數據不會恢復。
操作
- 生成快照:本操作嘗試對指定表生成快照。如果集群在執行數據均衡、分隔或合并等操作時,可能會引起操作失敗。
- 克隆快照:本操作使用與指定快照相同的結構數據構建一張新表。操作結果會生成一張有完整功能的表,對該表的任意修改不會對原表或快照產生影響。
- 還原快照:本操作將表結構和數據恢復到生成快照時的狀態。(注意:本操作會舍棄快照生成后任何改變)。
- 刪除快照:本操作將系統中的快照刪除,釋放未共享的磁盤空間,而且不會影響其他克隆或快照。
- 導出快照:本操作將快照數據和元數據復制到其他集群。操作只會涉及HDFS,不會與Master或域服務器產生任何聯系,因此HBase集群可以關閉。
零復制快照,恢復,克隆
快照和復制/導出表之間的主要差異是快照操作只寫入元數據,不涉及海量數據。
HBase的主要設計原則之一就是一旦文件寫入就不再修改。文件不可變意味著快照只需保持對快照產生時存在的文件追蹤,并且在壓縮時負責提示系統該文件不應刪除而是應當歸檔保存。
同樣的原則也適用于克隆和恢復操作。因為文件是不變的,新建一個表只需要通過快照“鏈接”到文件引用即可。
導出快照是唯一需要復制數據的操作,因為其他集群沒有數據文件。
導出快照 vs 復制/導出表
導出快照與復制/導出表除了更好地保持一致性外,主要的不同在于導出快照是在HDFS的層面操作的。這意味這Master和域服務器與操作無關。因此不需要為不必要的數據創建緩存空間,也不會有掃描過程因為大量對象創建引起的GC暫停。對于HBase來說主要性能影響就是DataNode額外的網絡和磁盤負載。
HBase命令:快照操作
通過檢查hbase-site.xml中的hbase.snapshot.enabled是否設置為true確認打開了快照許可。獲取指定表的快照使用snapshot命令(不產生文件復制)
| 1 | hbase> snapshot ‘tableName’, ‘snapshotName’ |
列出所有的快照,使用 list_snapshot 命令。會展示出快照名稱,源表,以及創建日期和時間
| 1 2 3 | hbase> list_snapshots SNAPSHOT?????????????? TABLE + CREATION TIME ?TestSnapshot????????? TestTable (Mon Feb 25 21:13:49 +0000 2013) |
刪除快照使用 deleted_snapshot 命令。刪除快照不會影響到克隆表或者之后生成的快照。
| 1 | hbase> delete_snapshot ‘snapshotName’ |
使用clone_snapshot命令從指定的快照生成新表(克隆)。由于不會產生數據復制,所以最終用到的數據不會是之前的兩倍。
| 1 | hbase> clone_snapshot ‘snapshotName’, ‘newTableName’ |
使用restore_snapshot命令將指定快照內容替換當前表結構/數據。
| 1 | hbase> restore_snapshot ‘snapshotName’ |
使用ExportSnapshot工具將現有快照導出至其他集群。導出工具不會影響到域服務器負載,只是工作在HDFS層面所以需要指定HDFS路徑(其他集群的hbase根目錄)
| 1 2 3 | hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot SnapshotName -copy-to hdfs:///srv2:8082/hbase |
目前的限制
快照需要依賴一些條件,目前有一些工具還沒有很好的整合新特性:
- 合并引用快照的集群會引起快照和克隆表的數據丟失。
- 當復制開啟時還原一個表,會造成兩個集群不同步。表不會在復制集上還原。
結論
當前快照包含了所有的基礎功能特性,但是還是有很多工作要做,包括監測、頁面UI集成、磁盤空間優化等等。
了解更多如何使用HBase和快照,請參考文檔。
原文鏈接:? Cloudera ?翻譯:? ImportNew.com? -? 陳 晨
譯文鏈接:? http://www.importnew.com/4966.html
[? 轉載請保留原文出處、譯者和譯文鏈接。 ]
總結
以上是生活随笔為你收集整理的Apache HBase快照介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用Hadoop的JobContro
- 下一篇: redis 工具类