HBase模型RegionServer架构及Region/Store/StoreFile/Hfile之间的关系

数据模型


1.Name Space


命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表。HBase两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default表是用户默认使用的命名空间


2.Table


Table类似于关系型数据库的表概念。不同的是,HBase定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往HBase写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase能够轻松应对字段变更的场景


3.Row


HBase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照RowKey的字典顺序存储的,并且查询数据时只能根据RowKey进行检索,所以RowKey的设计十分重要


4.Column


HBase中的每个列都由Column Family(列族)和Column Qualifier(列限定符)进行限定,例如info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义


5.Time Stamp


用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,其值为写入HBase的时间


6.Cell


由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮

HBase基本架构

HBase模型RegionServer架构及Region/Store/StoreFile/Hfile之间的关系_第1张图片


架构角色


1.Region Server


Region Server为 Region的管理者,其实现类为HRegionServer,主要作用如下:
对于数据的操作:get, put, delete;
对于Region的操作:splitRegion、compactRegion


2.Master


Master是所有Region Server的管理者,其实现类为HMaster,主要作用如下:
对于表的操作:create, delete, alter
对于RegionServer的操作:分配regions到每个RegionServer,监控每个RegionServer的状态,负载均衡和故障转移


3.Zookeeper


HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作


4.HDFS


HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用的支持

RegionServer架构

HBase模型RegionServer架构及Region/Store/StoreFile/Hfile之间的关系_第2张图片


1.StoreFile


memStore内存中的数据写到文件后就是StoreFile(即memstore的每次flush操作都会生成一个新的StoreFile),
Store底层是以HFile的格式保存。每个Store会有一个或多个StoreFile(HFile),数据在每个StoreFile中都是有序的


2.MemStore


memStore是放在内存里的。保存修改的数据即keyValues。当memStore的大小到一个阈值(默认64M)时,memStore会被flush到文件,即生成一个快照。目前hbase会有一个线程来负责memStore的flush操作
也就是写缓存,由于HFile中的数据要求是有序的,所以数据是先存储在MemStore中,排好序后,等到达刷写时机才会刷写到HFile,每次刷写都会形成一个新的HFile。


3.WAL


由于数据要经MemStore排序后才能刷写到HFile,但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入MemStore中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。


4.BlockCache


读缓存,每次查询出的数据会缓存在BlockCache中,方便下次查询


Region/Store/StoreFile/Hfile之间的关系


1.Region


rable在行的方向上分隔为多个Region。Region是Hbase中分布式存储和负载均衡的最小单元。即不同的region可以分在不同的Region Server上,但同一个Region是不会拆分到多个Server上。
Region按大小分隔,表中每一行只能属于一个region。随着数据不断插入表,region不断增大,当region的某个列族到一个阈值(默认256M)时就会分成两个新的region


2.Store


每一个region有一个或多个store组成,至少是一个store,hbase会把一起访问的数据放在一个store里面,即为每个ColumnFamily建一个store(即有几个ColumnFamily,也就有几个Stroe),一个Stroe由一个memStore和0或多个StoreFile组成
Hbase以store的大小来判断是否需要切分region


3.MemStore


memStore是放在内存里的。保存修改的数据即keyValues。当memStore的大小到一个阈值(默认64M)时,memStore会被flush到文件,即生成一个快照。目前hbase会有一个线程来负责memStore的flush操作
也就是写缓存,由于HFile中的数据要求是有序的,所以数据是先存储在MemStore中,排好序后,等到达刷写时机才会刷写到HFile,每次刷写都会形成一个新的HFile。


4.StoreFile


memStore内存中的数据写到文件后就是StoreFile(即memstore的每次flush操作都会生成一个新的StoreFile),
Store底层是以HFile的格式保存。每个Store会有一个或多个StoreFile(HFile),数据在每个StoreFile中都是有序的


5.HFile


HFile是HBasezhongKeyValue数据的存储格式,是hadoop的二进制格式文件。一个StoreFile对应着一个HFile。而HFile是存储在HDFS之上的。HFile文件格式是基于Google Bigtable中的SSTable。首先HFile文件是不定长的,长度固定的只有其中的两块:Trailer和Fileinfo。Trailer中指针指向其他数据块的起始点,Fileinfo记录了文件的一些meta信息

你可能感兴趣的:(基本架构,hbase,分布式)