本文由 ImportNew - 陳 晨 翻譯自 Cloudera。如需轉載本文,請先參見文章末尾處的轉載要求。 在關于Apache HBase 快照系列的第一篇中,我們學到了如何使用新的快照特性,以及實現背后的一些理論支持。現在是時候再深入探索一些技術細節了。 表是什么? HBase
本文由 ImportNew - 陳 晨 翻譯自 Cloudera。如需轉載本文,請先參見文章末尾處的轉載要求。在關于Apache HBase快照系列的第一篇中,我們學到了如何使用新的快照特性,以及實現背后的一些理論支持。現在是時候再深入探索一些技術細節了。
HBase表包含一系列元數據信息和鍵值對集合。
表信息:一份描述“設置”的清單文件,如列族,壓縮類型與編碼,布隆(bloom)過濾器類型等。
域:表“分區”稱之為域。每個域都通過定義起始鍵和終止鍵來負責管理一份連續的鍵值集合。
WALs/MemStore:在數據寫入磁盤之前,put會先寫到寫前日志(Write Ahead Log – WAL)然后保存在內存中,直到內存壓力觸發寫入磁盤。WAL為恢復那些因為異常沒有寫入磁盤的put操作提供了一個簡單的方式。
HFiles:某些時候所有數據都寫入了磁盤。HFile就是HBase存儲鍵值對的文件格式,HFile是不變的。但是當合并或域刪除時可以被刪除掉。(注意:想了解更多HBase寫入過程的內容可以看下HBase寫入過程博文,對于HFiles更多的細節可以看下HBase I/O – HFiles 博文)
快照就是一系列元數據信息集合,能夠允許管理員將表恢復至生成快照時的狀態。快照不是表的復制。最簡單的方式就是把它想象成為了追蹤元數據(表信息和域)和數據(HFiles, 內存存儲, WALs)一系列操作的集合。在生成快照操作中沒有執行任何復制數據的動作。
離線快照:討論快照的最簡單的場景就是當一張表被關閉了。關閉一張表意味著所有的數據都寫入了磁盤,而且不允許任何讀寫操作。在這種情況下,生成快照僅僅就是獲取表元數據并且與磁盤中的HFiles保持關聯。主節點執行操作需要的時間,主要取決于HDFS的namenode提供文件列表需要的時間。
在線快照:在大部分情況下,表都是開啟的,而且每個域服務器都不斷的處理put和get請求。在這種情況下,主節點接收到快照請求并要求每個域服務器都為其負責的域生成一份快照。
主節點和域服務器之間的通信是通過Apache ZooKeeper的,使用了類似兩階段提交事務。主節點建立一個“準備快照”的znode。每個域服務器會處理請求,并且為指定的表在其負責范圍內的域準備快照。一旦準備完成,就會在準備請求的znode下建立一個子節點,意味著“準備完成”。
一旦所有域服務器都回報了他們的狀態,主節點就建立另一個znode表示“提交快照”;每個域服務器會完成快照并在加入節點前報告狀態。一旦所有域服務器都回報完成,主節點會完成快照并標記操作完成。若某個域服務器報告失敗,主節點會新建znode來廣播放棄信息。
當域服務器繼續處理新請求是,不同的用例情況下可能需要不同的一致性模型。例如有人可能對不包含內存中最新數據的不完全的快照感興趣,而有的人希望鎖定寫操作來獲得一份完全保證一致性的快照以及其他可能性。
因此在域服務器上生成快照的程序是可拔插的。現在唯一的實現是“Flush Snapshot”,就是在生成快照之前進行寫入操作(flush)來保證列一致性。其他的使用不同的一致性策略的程序可能會在未來實現。
在線生成快照需要的時間取決于實施快照操作并且將成功狀態回報給主節點最慢的域服務器。這樣的操作差不多在數秒之內完成。
就像我們之前看到的,HFiles是不可變的。這樣使得我們避免了在快照或克隆操作中復制數據,但在合并過程中文件被刪除或者被合并后的版本替代。在這樣情況下,如果有快照或者克隆表指向其中某些文件,可以將他們轉移到一個“歸檔”位置而不是刪除。如果你刪除了快照且該文件不存在其他的引用,則該文件會被刪除。
當快照被用于在用戶或程序異常后恢復/還原表時,可以看做是一個備份方案,但實際上快照特性的用處遠遠超過簡單的備份還原。當從快照中克隆表后,你可以寫一個MapReduce job或者簡單應用來有選擇性的合并差異,或者其他你認為重要的內容寫入產品環境。另外一個場景就是你能夠測試結構變化或者更新數據,而不用為復制表等待數小時并且最后硬盤中也不會存在大量重復數據。
當管理員執行克隆操作時,按快照中的表結構建立了新表并按快照域信息中的開始/結束鍵分割。一旦表元數據建立,能夠像快照使用的方式一樣而不用拷入數據。因為HFiles是不可變的只是對建立的源文件的引用,這樣就避免了數據拷貝并允許克隆能夠修改而不影響源表或鏡像。克隆操作是由主節點執行的。
恢復操作與克隆操作相似。你可以把它想象成時刪除表之后再從快照中克隆出來。恢復操作會恢復快照中的老數據并刪除快照中不存在的數據,表結構也會恢復到與快照相同。在底層,恢復操作時通過比較表狀態與快照間不同來實現的,移除快照中不存在的文件并加上快照中有而當前表狀態中沒有的文件關聯。同樣的表結構也被修改至快照生成時刻的狀態。恢復操作是由主節點執行并且表要處于關閉狀態。
當前,快照實現了包括所有基礎功能性需求。如我們所見,新的在線快照一致性策略能夠提供更好的伸縮性、一致性及性能提高。更好的文件管理能夠縮減HDFS NameNode的加載時間以及提高磁盤空間管理。接下來,測量數據、Web 界面 (Hue)以及東西會加入到目標列表。
HBase快照添加了類似“過程協作”的新功能用于在線快照、寫時備份、恢復和克隆。
快照基于機器拷貝數據和復制表之上提供了更快更好的選擇來處理“備份”和“克隆”方案。所有的快照操作(快照、恢復、克隆)不執行數據復制,使得表的快照更快并且節省磁盤空間。
期望了解更多關于啟動和使用快照信息,請訪問HBase的操作管理文檔。
原文地址:Apache HBase 快照介紹之二:深入探索, 感謝原作者分享。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com