亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HBase的內存壓縮算法怎么使用

發布時間:2021-12-09 13:59:25 來源:億速云 閱讀:252 作者:iii 欄目:大數據

這篇文章主要介紹“HBase的內存壓縮算法怎么使用”,在日常操作中,相信很多人在HBase的內存壓縮算法怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”HBase的內存壓縮算法怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

介紹

現今,HBase 所支持的現代產品對Hbase讀寫性能的期望越來越高。理想情況下,HBase 也希望在保證其可靠的持久存儲的前提下能同時享有內存數據庫的速度。社區的貢獻者在HBase 2.0中引入了一種名為Accordion的新算法,這促使Hbase又朝著其理想的目標邁出了重要的一步。

Hbase RegionServer 負責將數據劃分到多個Region中。RegionServer 內部(垂直)的可伸縮性能對于最終用戶體驗以及整個系統的利用率至關重要。Accordion 算法通過更好地利用RAM來進一步提高RegionServer的可擴展性。Accordion 算法可以實現在內存中容納更多的數據,并且降低寫入磁盤的頻率。這正好是多個場景下我們所需要的。首先,HBase的磁盤占用和寫入放大因此減少;其次,更多數據的讀取和寫入將直接從RAM中獲得,更少的讀取和寫入基于磁盤I/O,換句話說,HBase的性能得到提高。在2.0版本之前,這些不同的指標是不能同時滿足的,并且相互制約。而通過Accordion 算法,它們都同時得到了改善。

HBase的內存壓縮算法怎么使用

Accordion 的靈感來自于HBase的LSM樹形設計模式。一個 HBase Region 被存儲為一系列可查找的鍵值對映射。最上面是一個可變內存存儲,稱為MemStore ,接收***Put進來的數據。其余的是不變的HDFS文件,稱為HFile 。一旦MemStore寫滿,它將被刷新到磁盤,從而創建一個新的HFile。HBase采用多版本并發控制,也就是說,MemStore將所有修改后的數據存儲為獨立版本。因此,一條數據的多個版本同時駐留在MemStore和HFile層中。當一個讀操作進來,Hbase會優先掃描BlockCache中的Hfile拿取***的版本數據。為了減少磁盤訪問次數,HFile在后臺異步進行壓縮合并,這個過程將真正清除已刪除的數據,合并小的HFile文件。

通過將隨機 application-level I/O轉換為順序磁盤I/O,LSM樹可提供出色的寫入性能。但是,傳統的設計并未嘗試壓縮內存數據。這源于歷史原因:LSM樹設計當時,RAM還是非常緊缺的資源,因此MemStore的容量很小。隨著硬件環境的不斷變化,由RegionServer管理的整個MemStore可能為數千兆字節,這就為Hbase優化留下了大量空間。

Accordion 算法重新將LSM原理應用于MemStore,以便當數據仍在RAM中時消除冗余和其他開銷。這樣做可以減少Flush到HDFS的頻率,從而減少寫入放大和整個磁盤占用空間。隨著刷新次數的減少,MemStore寫入磁盤的頻率會降低,因此寫入性能會提高。磁盤上的數據較少也意味著對塊緩存的壓力較小,***率較高,更佳的讀響應。***,減少磁盤寫入也意味著在后臺發生較少的壓縮,即讀取和寫入周期將縮短。總而言之,內存壓縮算法的效果可以被看作是一個催化劑,使整個系統的運行速度更快。

目前Accordion提供了兩個級別的內存壓縮:basic 級別和 eager 級別。前者適用于所有數據更新模式的通用優化,后者對于高數據流的應用程序非常有用,如生產-消費隊列,購物車,共享計數器等。所有這些使用案例都會對rowkey進行頻繁更新,生成多個冗余版本的數據,這些情況下Accordion算法將發揮其價值。但另一方面,eager 級壓縮優化可能會導致更大的計算開銷(更多內存副本和垃圾收集),這可能會影響數據寫入時的響應時間。如果MemStore開啟了 MemStore-本地分配緩沖區(MSLAB)配置則開銷會很高。所以建議不要將此配置與eager級壓縮結合使用。

如何使用

內存壓縮可以在全局和列族級別進行配置。支持三種級別配置:none (傳統實現), basic, and eager。

默認情況下,所有表都是basic內存壓縮。可以在hbase-site.xml中覆蓋寫這個全局配置,如下所示:

<property> <name> hbase.hregion.compacting.memstore.type </name> <value> <none|basic|eager> </value> </property>

還可以在HBase shell中為每個列族進行單獨配置,如下所示:

create '<tablename>', {NAME =>'<cfname>',IN_MEMORY_COMPACTION =>' <NONE|BASIC|EAGER>' }

性能增益

我們通過廣受歡迎的雅虎云服務基準測試YCSB對HBase進行了廣泛的測試。我們的實驗使用了100-200 GB數據集,并且執行了各種具有代表性的工作負載。結果表明Accordion算法所帶來的性能增益得到的顯著提升。

重尾 (Zipf) 分布:***個實驗會執行一個工作負載,其中rowkey遵循大多數現實生活場景中出現的Zipf分布。在這種情況下,當100%的操作是寫入操作時,Accordion實現寫入放大率降低30%,寫入吞吐量提高20%,GC降低22%。當50%的操作是讀取時,尾部讀取延遲減少12%。

均勻分布:第二個實驗的工作量是所有rowkey都均衡分布。在此情況下,在100%寫入的情況下,Accordion的寫入放大率降低25%,寫入吞吐量提高50%,GC降低36%。尾部讀取延遲不受影響(由于沒有本地化,這是預期的)。

Accordion如何工作

高級設計

Accordion推出了CompactingMemStore,一個內部使用壓縮策略的MemStore實現。與默認的MemStore相比,它將所有數據保存在一個單片數據結構中,Accordion將其作為一連串的segment來管理。***的segment,稱為active segment(段),是可變的,用來接收Put操作。一旦達到溢出條件(默認情況下,32MB-25%的MemStore大小),active segment 被移動到管道( in-memory pipeline)中,并置為不可變segment,我們稱之為內存刷新(in-memory flush)。Get 操作通過掃描這些 segment 和 HFiles 拿取數據(后者通過塊緩存進行訪問,與往常訪問HBase一樣)。

CompactingMemStore 可能會不時在后臺合并多個不可變段,從而創建更大更精簡的段。因此,管道是“會呼吸的”(擴張和收縮),類似于手風琴波紋管,所以我們也將Accordion 譯為手風琴。

當RegionServer決定刷新一個或多個MemStore到磁盤以釋放內存時,它會考慮刷新CompactingMemStore中已經移入管道中的segment到磁盤。基本原理是延長MemStore有效管理內存的生命周期,以減少整體I / O。當刷新發生時,管道中所有的segment 段將被移出合成一個快照, 合并并流式傳輸形成新的HFile。

圖1顯示了CompactingMemStore與傳統設計的結構。

HBase的內存壓縮算法怎么使用

分段結構:

與默認的MemStore類似,CompactingMemStore在單元存儲之上維護一個索引,以允許通過鍵快速搜索。不同的是,MemStore索引被實現為一個Java skiplist(ConcurrentSkipListMap ), 一種動態但奢侈的數據結構,用于管理大量小對象。CompactingMemStore 則在不可變的 segment 索引之上上實現了高效且節省空間的扁平化布局。這種通用優化可以幫助所有壓縮策略減少RAM開銷,使數據幾乎不存在冗余。一旦將一個段添加到管道中,CompactingMemStore 就將其索引序列化為一個名為CellArrayMap 的有序數組,該數組可以快速進行二進制搜索。

CellArrayMap既支持從Java堆內直接分配單元,也支持MSLAB的自定義分配(堆內或堆外),實現差異通過被索引引用的KeyValue對象抽象出來(圖2)。CellArrayMap本身始終分配在堆內。

HBase的內存壓縮算法怎么使用

壓縮算法

內存中壓縮算法在管道中的Segment上維護了一個單一的扁平化索引。這樣的設計節省了存儲空間,尤其是當數據項很小時,可以及時將數據flush至磁盤。單個索引可使搜索操作在單一空間進行,因此縮短了尾部讀取延遲。

當一個active segment被刷新到內存時,它將排隊到壓縮管道,并立即觸發一個異步合并調度任務。該調度任務將同時掃描管道中的所有段(類似于磁盤上的壓縮)并將它們的索引合并為一個。basic和eager 壓縮策略之間的差異體現在它們處理單元數據的方式上。basic壓縮不會消除冗余數據版本以避免物理復制; 它只是重新排列KeyValue對象的引用。eager壓縮則相反,會過濾出冗余數據。但這是以額外的計算和數據遷移為代價的。例如,在MSLAB存儲器中,幸存的單元被復制到新創建的MSLAB中。當數據高度冗余時,壓縮開銷的代價就變得有意義了。

未來的壓縮可能會在basic壓縮策略和eager壓縮策略之間實現自動選擇。例如,該算法可能會在一段時間內嘗試eager壓縮,并根據所傳遞的值(如:數據被刪除的比例)安排下一次壓縮。這種方法可以減輕系統管理員的先驗決定,并適應不斷變化的訪問模式。

到此,關于“HBase的內存壓縮算法怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柞水县| 太白县| 南岸区| 安多县| 阳曲县| 山东省| 通辽市| 沽源县| 北碚区| 若羌县| 开封县| 通海县| 龙江县| 巧家县| 都安| 天长市| 阳山县| 兰坪| 襄垣县| 商城县| 抚州市| 乐昌市| 隆德县| 嘉义市| 吴堡县| 泸西县| 凤凰县| 浦城县| 垣曲县| 昌都县| 卫辉市| 承德县| 威远县| 河南省| 边坝县| 明光市| 乡城县| 壶关县| 章丘市| 黄大仙区| 肇东市|