WAL(Write Ahead LOG)..."/>
溫馨提示×

溫馨提示×

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

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

HBase之MemStore+Flush詳解

發(fā)布時間:2020-07-26 20:14:25 來源:網(wǎng)絡(luò) 閱讀:2535 作者:KIKI王 欄目:關(guān)系型數(shù)據(jù)庫
  1. MemStore簡介:

              HBase之MemStore+Flush詳解

    上圖為HBase的讀寫過程的大概描述;


    寫請求過程:client---------->WAL(Write Ahead LOG)----------->MemStore-------------> HFile--------->END

    讀請求過程:client---------->MemStore-------->BlockCache------->HFile------------>END


    MemStore在HBase中的位置:

       HBase是由Master和HRegionServer組成,而實際在讀寫的過程中,我們與Master打交道的機會不是很多,主要是HRegionServer,從上圖可以看出每一個HRegionServer由一個HLog和多個Region構(gòu)成,一個Region中存在多個Store,每一個Strore由一個MemStore和多個StoreFile構(gòu)成,MemStore為HBase在內(nèi)存中的一塊區(qū)域,StoreFile的底層為HFile,其為HDFS中的文件。

    MemStore在何時起作用:

       寫:當(dāng)client端發(fā)起一個寫操作時,寫操作首先被寫入到WAL中,然后寫入到MemStore中,當(dāng)達(dá)到一定的預(yù)設(shè)條件之后,MemStore中內(nèi)容會刷寫到StoreFile中,寫操作完成。

       (那么問題來了

         1.為什么要先寫入到WAL中呢?

           WAL為HDFS中的文件,MemStore為內(nèi)存中的一塊區(qū)域,一提到內(nèi)存我們就能想到,不安全,上面看到只有在MemStore中數(shù)據(jù)刷寫到StoreFile中時,數(shù)據(jù)才會落盤,寫入到磁盤中,所以當(dāng)我們在由于系統(tǒng)宕機等情況下,MemStore中數(shù)據(jù)丟失,還未來得及刷寫落盤,HBase會根據(jù)存儲在HDFS中的WAL文件恢復(fù)數(shù)據(jù)。

         2.Flush(刷寫)的策略?

           下文會進行詳細(xì)講解。

       讀:當(dāng)client端發(fā)起一個讀操作時,HBase會首先在對應(yīng)Region的MemStore中查找,如果找不到,則會到BlockCache中查找(BlockCache為HBase的一個優(yōu)化讀的策略,下文會詳解),如果還沒有,則會到StoreFile(HFile)中查找,讀操作完成。


2.Flush簡介

  

  Flush為HBase中的一個重要的操作,我們必須配置一個很好的flush的策略,從而保證HBase集群的穩(wěn)定。

  Flush為HBase數(shù)據(jù)落盤的一個操作,F(xiàn)lush后數(shù)據(jù)才會持久起來,每一次Flush會在Region中產(chǎn)生一個StoreFile并刪除在WAL中的edits。

  Flush為Region級,當(dāng)一個Region中的一個Store中的MemStore達(dá)到預(yù)設(shè)條件后,一個Region中的所有的Sotre.

  下面為在Flush一個表時的日志:

   

2014-10-18 16:58:28,801 INFO  [Priority.RpcServer.handler=1,port=60020] regionserver.HRegionServer: Flushing t1,,1413622522846.58fd75078b4a47b8c6a20705f23209b7.

2014-10-18 16:58:28,816 DEBUG [Priority.RpcServer.handler=1,port=60020] regionserver.HRegion: Started memstore flush for t1,,1413622522846.58fd75078b4a47b8c6a20705f23209b7., current region memstore size 168

2014-10-18 16:58:29,457 INFO  [Priority.RpcServer.handler=1,port=60020] regionserver.DefaultStoreFlusher: Flushed, sequenceid=3, memsize=168, hasBloomFilter=true, into tmp file hdfs://beh/hbase/data/default/t1/58fd75078b4a47b8c6a20705f23209b7/.tmp/6ad49d65c8b94b678bab3c892bdb0d03

2014-10-18 16:58:29,733 DEBUG [Priority.RpcServer.handler=1,port=60020] regionserver.HRegionFileSystem: Committing store file hdfs://beh/hbase/data/default/t1/58fd75078b4a47b8c6a20705f23209b7/.tmp/6ad49d65c8b94b678bab3c892bdb0d03 as hdfs://beh/hbase/data/default/t1/58fd75078b4a47b8c6a20705f23209b7/cf/6ad49d65c8b94b678bab3c892bdb0d03

2014-10-18 16:58:29,838 INFO  [Priority.RpcServer.handler=1,port=60020] regionserver.HStore: Added hdfs://beh/hbase/data/default/t1/58fd75078b4a47b8c6a20705f23209b7/cf/6ad49d65c8b94b678bab3c892bdb0d03, entries=1, sequenceid=3, filesize=1021

2014-10-18 16:58:29,879 INFO  [Priority.RpcServer.handler=1,port=60020] regionserver.HRegion: Finished memstore flush of ~168/168, currentsize=0/0 for region t1,,1413622522846.58fd75078b4a47b8c6a20705f23209b7. in 1063ms, sequenceid=3, compaction requested=false


可以看出,先將MemStore flush到.tmp下,然后移動到region目錄下對應(yīng)的columnFamily下。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI