架构原理
1、 每个region由一个RegionServer负责,一个RegionServer负责多个region
2、 StandbyHMaster 是HMaster的一个备份,如果HMaster宕掉,Standby HMaster会变成HMaster
3、 主节点服务管理RegionServer HMaster功能:
协调数据库元数据(例如:表)变化
监控RegionServer的负载均衡
失败RegionServer重启
分配region到RegionServer
存储和管理regions
处理读取/写入请求
当region过多时,自动分割regions
表操作直接和客户端连接
4、 Region:
HBase表被分割为多个region
每个region包含多行数据
Region包含region名字,开始rowkey和结束(按rowkey排序)
5、 HBase数据模型
(1)行健(rowkey):
行键是字节数组, 任何字符串都可以作为行键;
表中的行根据行键进行排序,数据按照Row key的字节序(byte order)排序存储;
所有对表的访问都要通过行键 (单个RowKey访问,或RowKey范围访问,或全表扫描)
每一个列簇存储在一个或对个文件
(2)列簇(Column key string=family:qualifier)
CF必须在表定义时给出
每个CF可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入
数据按ColumnFamily分开存储.,HBase所谓的列式存储就是根据ColumnFamily分开存储(每一个ColumnFamily对应一个Store),这种设计非常适合于数据分析情形.
(3)时间戳(TimeStame)
每个Cell有多个版本,它们用时间戳区分.
(4)单元格(Cell)
Cell由行键,列族,时间戳唯一确定
Cell中的数据是没有类型的全部以字节码的形式贮存.
(5)区域(region)
HBase自动把表水平(按RowKey)分成若干个区域(Region),每个Region会保存表里一段连续的数据.
刚开始表里只有一个Region,随着数据的不断插入表,随着Region的不断增大,当到了每个阀值的时候,Region自动等分成两个新的Region.
当table中的行不断增多,就会有越来越多的region,这样一张表就被保存在多个Region上.
HRegion是HBase中分布式存储和负载均衡的最小单位,最小单元表示不同的HRegion可以分布在不同的HRegionServer上,但是一个Region不会拆分到多个Server上.
6、 定位一个cell的数据
表名——>列簇名——>行健——>列标识符——>时间戳
7、 HBase读取数据
Meta原始数据——>表名——>行健——>列标识符——>时间戳
8、 HBase写入数据
9、 HBase RowKey设计
HBase是根据Rowkey来进行检索的,系统通过找到某个Rowkey所在的Region,然后将查询数据的请求路由到该Region获取数据
10、 HBase的检索支持3种方式
(1) 通过单个Rowkey访问,即按照某个Rowkey键值进行get操作,这样获取唯一一条记录
(2) 即通过设置startRowKey和endRowKey,在这个范围内进行扫描。这样可以按指定的条件获取一批记录;
(3) 全表扫描,即直接扫描整张表中所有行记录
11、 Rowkey设计原则
Rowkey长度设计原则:16字节内
Rowkey散列原则:
Rowkey唯一原则
12、 HBase模式设计(表设计)
HBase没有join概念
HBase Rowkey设计非常重要
HBase列簇在1~2个
13、 HBase模式设计实例
Student
Rowkey | Column family | |
info | course | |
Student_id(反转) | info:name info:gender info:age | course:c1 course:c2 ….. |
course
Rowkey | 列簇(column family) | |||
| info:nane | info:introduction | info:teacher | student |
Course_id(反转) |
|
|
| Cell |