1、 HBase逻辑结构
2 、HBase物理存储结构
行键(RowKey):
是Byte array,行键是字节数组,任何字符串都可以作为行键;
在表中必须是唯一的而且必须存在的。Row Key是 按照字典序有序排列的
例如:row_key11 排列在row_key1和row_ley2之间。
所有对表的访问都要通过行键 (单个RowKey访问,或RowKey范围访问,或全表扫描)
HBase表中的每行数据都由一个RowKey和多个Column(列)组成,所以RowKey的设计十分重要。
列(Column):
HBase中的每个列都由Column Family(列族)和Column Qualifier(列限定符)进行限定,
例如info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。每条记录可动态添加
列族(ColumnFamily)简称CF:
CF必须在表定义时给出
每个CF可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入
数据按CF分开存储,HBase所谓的列式存储就是根据CF分开存储(每个CF对应一个Store),这种设计非常适合于数据分析的情形
区域(Region):
HBase自动把表水平(按Row)划分成多个区域(region),每个region会保存一个表里面某段连续的数据
每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region
当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Region 上。
Region是HBase中分布式存储和负载均衡的最小单元。
最小单元表示不同的Region可以分布在不同的HRegionServer上。但一个Region不会拆分到多个server上。
Region虽然是分布式存储的最小单元,但并不是存储的最小单元。
Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成
StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上。
Store:
Store为HBase真正存储的文件,store最终存储到hdfs中
单元格(Cell):
由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell中的数据全部是字节码形式存贮。
时间戳(TimeStamp):
用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,其值为写入HBase的时间。
Name Space:
命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表。
HBase两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default表是用户默认使用的命名空间。
Table:
类似于关系型数据库的表概念。不同的是,HBase定义表时只需要声明列族即可,不需要声明具体的列。
这意味着,往HBase写入数据时,字段可以动态、按需指定。
因此,和关系型数据库相比,HBase能够轻松应对字段变更的场景。