HBase(1)基础

最近由于工作原因,看了一遍官方网站,把里面的基础内容记录下:

体系架构:

1 client

包含访问HBase 的接口并维护cache 来加快对HBase的访问

2 Zookeeper

保证HBase集群只有一个master

存了所有region的寻址入口

实时监控region server 的信息, 通知Master

存贮HBase 的schema 和 table 元数据

3 Master

为Region server 分配regin

负责region server 的负载均衡

发现哪个 region server 挂了,重新分配其 regin

管理用户对table 的增删改操作

4 region Server

region server 维护region ,处理region 的IO请求

切分运行中变大的region

client 通过RPC 方式和Master RegionServer 通讯,一个RegionServer 可以存放1000个region ,hbase 是通过rowkey,将表水平分割成多个region,每个region中都有store,==》每个列族

读操作:

从ZooKeeper(/hbase/meta-region-server)中获取hbase:meta的位置(HRegionServer的位置),缓存该位置信息。

从HRegionServer中查询用户Table对应请求的RowKey所在的HRegionServer,缓存该位置信息。

从查询到HRegionServer中读取Row。

HRegionServer一般和DataNode在同一台机器上运行,实现数据的本地性。HRegionServer包含多个HRegion,由WAL(HLog)、BlockCache、MemStore、HFile组成。

WAL:所有写操作都会先保证将数据写入这个Log文件后,才会真正更新MemStore,最后写入HFile中。采用这种模式,可以保证HRegionServer宕机后,我们依然可以从该Log文件中读取数据,Replay所有的操作,而不至于数据丢失。WAL文件存储在/hbase/WALs/${HRegionServer_Name}的目录中

BlockCache:HBase中提供两种BlockCache的实现:默认on-heap LruBlockCache和BucketCache(通常是off-heap)。通常BucketCache的性能要差于LruBlockCache,然而由于GC的影响,LruBlockCache的延迟会变的不稳定,而BucketCache由于是自己管理BlockCache,而不需要GC,因而它的延迟通常比较稳定,这也是有些时候需要选用BucketCache的原因。

一个Table可以有一个或多个Region,他们可以在一个相同的HRegionServer上,也可以分布在不同的HRegionServer上,一个HRegionServer可以有多个HRegion,他们分别属于不同的Table。HRegion由多个Store(HStore)构成,每个HStore对应了一个Table在这个HRegion中的一个Column Family,即每个Column Family就是一个集中的存储单元,因而最好将具有相近IO特性的Column存储在一个Column Family,以实现高效读取(数据局部性原理,可以提高缓存的命中率)。HStore是HBase中存储的核心,它实现了读写HDFS功能,一个HStore由一个MemStore 和0个或多个StoreFile组成。

写数据流程:

客户端发起一个Put请求时,首先它从hbase:meta表中查出该Put数据最终需要去的HRegionServer。然后客户端将Put请求发送给相应的HRegionServer,在HRegionServer中它首先会将该Put操作写入WAL日志文件中(Flush到磁盘中)。

写完WAL日志文件后,HRegionServer根据Put中的TableName和RowKey找到对应的HRegion,并根据Column Family找到对应的HStore,并将Put写入到该HStore的MemStore中。此时写成功,并返回通知客户端。

MemStore是一个In Memory Sorted Buffer,在每个HStore中都有一个MemStore,即它是一个HRegion的一个Column Family对应一个实例。它的排列顺序以RowKey、Column Family、Column的顺序以及Timestamp的倒序


HFile格式

HBase的数据以KeyValue(Cell)的形式顺序的存储在HFile中,在MemStore的Flush过程中生成HFile,由于MemStore中存储的Cell遵循相同的排列顺序,因而Flush过程是顺序写,我们直到磁盘的顺序写性能很高,因为不需要不停的移动磁盘指针。


你可能感兴趣的:(HBase(1)基础)