跳到主要内容

简述HBase中Block的概念的机制 ?

参考答案:

在HBase中,Block是数据存储的基本单元,具有固定的大小,默认为64K。在建表时,可以通过参数BlockSize来指定Block的大小。HBase中的Block主要有四种类型:Data Block、Index Block、Bloom Block和Meta Block。其中,Data Block用于存储实际的数据,每个Data Block可以存放多条KeyValue数据对。

HBase的RegionServer的内存主要分为两个部分:Memstore和BlockCache。Memstore主要用于写操作,而BlockCache则主要用于读操作的缓存。当MemStore被触发flush操作时,当前的MemStore会被标记为SnapShot,同时HBase会创建新的MemStore继续处理修改操作。而被标记为SnapShot的MemStore中的数据会被刷写到StoreFile(HFile)中,StoreFile实际上是由多个Block组成的。

读请求的处理流程是这样的:首先会到Memstore中查找数据,如果找不到,则会到BlockCache中查找。如果BlockCache中也没有,那么就会从磁盘上的StoreFile中读取数据,并将读取的结果放入BlockCache中,以便后续的读请求能够快速地从缓存中获取数据。

BlockCache的实现基于On-heap ConcurrentHashMap,其中map的key是BlockCacheKey类型的对象,包括了offset、hfileName等成员变量,而map的value是LruCachedBlock类型的对象,表示缓存的实体。BlockCache的大小是固定的,由参数hfile.block.cache.size决定,默认是RegionServer的堆内存的40%。当BlockCache达到其上限时,会启动淘汰机制,基于LRU(Least Recently Used)策略淘汰掉最老的一批数据。

总的来说,HBase中的Block机制在数据存储、读取以及缓存管理等方面都发挥着重要的作用,是HBase实现高效、稳定的数据存储和访问的关键之一。