自己总结提示:
要理解Metastore是什么,需要了解下HBASE写入数据的过程。
1. 当RegionServer收到写请求,他会把数据丢到相应的Region里。
2. 每个Region里面的结构是这样的,Region中 每个Column Family对应一个HStore。
Hstore里面又分为MemStore和HFile,MemStore的作用就是先把数据写到这里,这是一个内存级的缓存,
在这里你可以对数据按照Row Key进行排序(因为写入hdfs的过程中是顺序读写 无法排序的),排序之后这些数据才能写入
hdfs。
3. MemStore满了,flush到HFile中,每一个Column Family的数据都会创建一个新的HFile。
4.HFile是最终写入hdfs的格式
除了解决“无序”问题外,Memstore还有一些其他的好处,例如:
- 作为一个内存级缓存,缓存最近增加数据。一种显而易见的场合是,新插入数据总是比老数据频繁使用。
- 在持久化写入之前,在内存中对Rows/Cells可以做某些优化。比如,当数据的version被设为1的时候,对于某些CF的一些数据,Memstore缓存了数个对该Cell的更新,在写入HFile的时候,仅需要保存一个最新的版本就好了,其他的都可以直接抛弃。
有一点需要特别注意:每一次Memstore的flush,会为每一个CF创建一个新的HFile。 在读方面相对来说就会简单一些:HBase首先检查请求的数据是否在Memstore,不在的话就到HFile中查找,最终返回merged的一个结果给用户。
以下为参考资料
————————————————————————————
关于MemStore的刷新方式
2017年05月09日 21:13:24 追寻北极 阅读数:1337更多
个人分类: architecture
MemStore是HBase非常重要的组成部分,深入理解MemStore的运行机制、工作原理、相关配置,对HBase集群管理以及性能调优有非常重要的帮助。
HBase Memstore
首先通过简单介绍HBase的读写过程来理解一下MemStore到底是什么,在何处发挥作用,如何使用到以及为什么要用MemStore。
图一:Memstore Usage in HBase Read/Write Paths
当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),不允许修改。这样的话,HBa