hbase region memstore
Hbase    2016-11-18 15:14:42    3    0    0
leome   Hbase

 

http://www.cnblogs.com/shitouer/archive/2013/02/05/configuring-hbase-memstore-what-you-should-know.html

 


 

数据流程: RS->Region->CFs->HStore

 

包含结构:HStore.Memstore.HFile.HDFS


RegionServer(RS)收到写请求的时候(write request),RS会将请求转至相应的Region。每一个Region都存储着一些列(a set of rows)。

根据其列族的不同,将这些列数据存储在相应的列族中(Column Family,简写CF)。

不同的CFs中的数据存储在各自的HStore中,HStore由一个Memstore及一系列HFile组成。

Memstore位于RS的主内存中,而HFiles被写入到HDFS中。

当RS处理写请求的时候,数据首先写入到Memstore,然后当到达一定的阀值的时候,Memstore中的数据会被刷到HFile中。


用到Memstore最主要的原因是:存储在HDFS上的数据需要按照row key 排序。而HDFS本身被设计为顺序读写(sequential reads/writes),不允许修改。这样的话,HBase就不能够高效的写数据,因为要写入到HBase的数据不会被排序,这也就意味着没有为将来的检索优化。为了解决这个问题,HBase将最近接收到的数据缓存在内存中(in Memstore),在持久化到HDFS之前完成排序,然后再快速的顺序写入HDFS。需要注意的一点是实际的HFile中,不仅仅只是简单地排序的列数据的列表,详见Apache HBase I/O – HFile。

除了解决“无序”问题外,Memstore还有一些其他的好处,例如:

作为一个内存级缓存,缓存最近增加数据。一种显而易见的场合是,新插入数据总是比老数据频繁使用。
在持久化写入之前,在内存中对Rows/Cells可以做某些优化。比如,当数据的version被设为1的时候,对于某些CF的一些数据,Memstore缓存了数个对该Cell的更新,在写入HFile的时候,仅需要保存一个最新的版本就好了,其他的都可以直接抛弃。
有一点需要特别注意:每一次Memstore的flush,会为每一个CF创建一个新的HFile。 在读方面相对来说就会简单一些:HBase首先检查请求的数据是否在Memstore,不在的话就到HFile中查找,最终返回merged的一个结果给用户。

Pre: 聊聊监控

Next: Hbase&Phoenix rowkey热点问题解决方案

3
Sign in to leave a comment.
No Leanote account? Sign up now.
0 comments
Table of content