温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

HBase之MemStore+Flush详解

发布时间:2020-07-26 20:14:25 来源:网络 阅读:2514 作者:KIKI王 栏目:关系型数据库
  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构成,一个Region中存在多个Store,每一个Strore由一个MemStore和多个StoreFile构成,MemStore为HBase在内存中的一块区域,StoreFile的底层为HFile,其为HDFS中的文件。

    MemStore在何时起作用:

       写:当client端发起一个写操作时,写操作首先被写入到WAL中,然后写入到MemStore中,当达到一定的预设条件之后,MemStore中内容会刷写到StoreFile中,写操作完成。

       (那么问题来了

         1.为什么要先写入到WAL中呢?

           WAL为HDFS中的文件,MemStore为内存中的一块区域,一提到内存我们就能想到,不安全,上面看到只有在MemStore中数据刷写到StoreFile中时,数据才会落盘,写入到磁盘中,所以当我们在由于系统宕机等情况下,MemStore中数据丢失,还未来得及刷写落盘,HBase会根据存储在HDFS中的WAL文件恢复数据。

         2.Flush(刷写)的策略?

           下文会进行详细讲解。

       读:当client端发起一个读操作时,HBase会首先在对应Region的MemStore中查找,如果找不到,则会到BlockCache中查找(BlockCache为HBase的一个优化读的策略,下文会详解),如果还没有,则会到StoreFile(HFile)中查找,读操作完成。


2.Flush简介

  

  Flush为HBase中的一个重要的操作,我们必须配置一个很好的flush的策略,从而保证HBase集群的稳定。

  Flush为HBase数据落盘的一个操作,Flush后数据才会持久起来,每一次Flush会在Region中产生一个StoreFile并删除在WAL中的edits。

  Flush为Region级,当一个Region中的一个Store中的MemStore达到预设条件后,一个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目录下对应的columnFamily下。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI