HBase寫和讀的機制

2021-07-23 03:36:17 字數 1148 閱讀 4661

預設情況下,執行寫入時會寫到兩個地方:預寫式日誌(write-ahead log,也稱hlog)和menstore。hbase預設方式是把寫入動作記錄在這兩個地方,以保證資料持久化。只有當這兩個地方的變化資訊都寫入並確認後,才認為寫動作完成。

memstore是記憶體裡的寫入緩衝區,hbase中資料在永久寫入磁碟之前在這裡累積。當memstore填滿後,其中的資料會刷寫到硬碟,生成乙個hfile。hfile是hbase使用的底層儲存格式。hfile對應於列族,乙個列族可以有多個hfile,但乙個hfile不能儲存多個列族的資料。在集群的每個節點上,每個列族有乙個memstore。

大型分布式系統中硬體故障很常見,hbase也不例外。如果memstore還沒有刷寫,伺服器就崩潰了,記憶體中沒有寫入硬碟的資料就會丟失。應對盤髮是在寫動作完成之前先寫入wal。hbase集群中每台伺服器都維護乙個wal來記錄發生的變化。wal是底層檔案系統上的乙個檔案。直到wal新記錄成功寫入後,寫動作才被認為成功完成。

如果hbase伺服器宕機,沒有從memstore中刷寫到hfile的資料可以通過回訪wal來恢復。不需要手動執行。

如果想快速訪問資料,通用的原則是資料保持有序且盡可能儲存在記憶體裡。hbase實現了這兩個目標。hbase讀動作必須重新銜接持久化到硬碟上的hfile和記憶體中memstore裡的資料。hbase在讀操作上使用了lru(最近最少使用演算法)快取技術。這種快取也叫作blockcache,和memstore在乙個jvm堆裡。blockcache設計用來儲存從hfile裡讀入記憶體的頻繁訪問的資料,避免硬碟讀。每個列族都有自己的blockcache。

掌握blockcache是優化hbase效能的乙個重要部分。blockcache中的block是hbase從硬碟完成一次讀取的資料單位。hfile物理存放形式是乙個block的序列外加這些block的索引。這意味著,從hbase中讀取乙個block需要先查詢一次該block然後從硬碟獨處。block是建立索引的最小資料單位,也是從硬碟讀取的最小資料單位。block大小預設為64kb,如果主要用於隨機查詢,細粒度的block更好。block變小會導致索引變大,消耗更多記憶體。如果主要用於順序掃瞄,一次讀取多個block,那個大一點的block較好。

從hbase中讀出一行,首先檢查memstore,然後檢查blockcache,最後訪問hfile。

HBase的寫流程和讀流程

1.獲取meta表的rootregion位置資訊 在客戶端寫程序時,第一次寫時,client先通過zookeeper獲取到meta表對應的region位置資訊,然後加入到程序快取中,後續再讀寫時,直接讀取快取的meta資訊對應的region資訊就行.2.找到資料要寫在哪個region上 根據獲取到的...

HBase之寫流程與讀流程

hfile檔案 儲存在磁碟的hbase表資料檔案,格式為hfile。資料塊為儲存單元,預設認大小64kb。memstore 寫快取,由於hfile中的資料要求是有序的,資料是先在memstore中,排好序後,再刷寫到hfile.每次刷寫都會形成乙個新的hfile。wal 資料會先寫wal write...

sram的讀和寫

sram的型號 issi is61lv25616 10tl 以上是資料手冊上的。對sram的認識 sram不需要重新整理電路即能儲存它內部儲存的資料。而dram dynamic random access memory 每隔一段時間,要重新整理充電一次,否則內部的資料即會消失,因此sram具有較高的...