client写入=》存入MemStore,一直到MemStore存满=》Flush成一个StoreFile,直到增长到一定的阈值=>触发Compact合并操作=》多个StroeFile合并成一个StoreFile,同时进行版本合并和数据删除=》当StoreFile Compact后,逐步形成越来越大的StoreFile=》单个StoreFile大小超过一定阈值后,触发Split操作,把当前的Region Split成2个Region,父亲Region会下线,新Split出的2个孩子Region会被Master分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到两个Region上。由此过程可知,HBase只是增加数据,所有的更新和删除操作,都是在Compact阶段做的,所以,用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能。
HSore:是hbase的存储核心,由两部分组成,一部分是MemStore,一部分是StoreFile。
HLog:在分布式环境中,无法避免系统出错或者宕机,一但HRegionServer意外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况。
HLog的工作机制:每个HRegionServer中都会有一个HLog对象,HLog是一个实现Wite AheadLog类,每次用户操作写入Memstore的同时,也会写一份数据到HLog文件,HLog文件会自动滚动出新,并删除旧文件(已经持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过ZooKeeper感知,HMaster首先处理遗留下来的HLog文件,将不同的region的log数据拆分,分别放到相应的region目录下,然后再将失效的region(带有刚刚拆分的log)重新分配,领取到这些region的HRegionServer在load Region的过程中,会发现有历史HLog需要处理,因此会ReplayHLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。
Region:region就是StoreFile,StoreFile里由HFile构成,HFile里由hbase的data块构成,一个data块里面又有很多的key value对,每个key value里存了我们需要的数据。
http://my.oschina.net/u/1464779/blog/265137
HBase读流程:
client->zookeeper->.ROOT->.META-> 用户数据表zookeeper记录了.ROOT的路径信息(root只有一个region),.ROOT里记录了.META的region信息, (.META可能有多个region),.META里面记录了region的信息。