文章目录
HBase的基本架构
一、HBASE架构及其基本组件图解
先上大图:后面说明
二、主要组件:
① RowKey:是一个字节数组(byte array),是表中每条记录的‘主键’,方便快熟查找
rowkey的设计原理:
1、长度原理:
- a. rowkey是一个二进制码流,可以是任意字符串,最大长度为64kb,一般为10-100byte的字节数组,一般设计为定长、建议越短越好:不要超过16个字节(1、占用存储空间,极大影响HFile的存储效率;
- b. memStore会缓存部分数据到内存中,若rowKey过长,内存的有效利用率就会降低,降低检索效率;
- c. 目前大多数系统是64为的,8字节的整数倍可以发挥系统的最佳特性)
2、唯一原则:若是同一rowkey,在插入相同的rowkey的数据时,原先存放的数据会被覆盖
3、排序原则:RowKey是按照ASCII有序排列的,设计时应该充分利用这一特性
4、散列原则:设计的rowKey应该均匀的分布在各个Hbase节点上
② Column Family:列族,一个拥有名称(string),包含一个或者多个相关列
③ Column(列):属于某一个列族,familyName:columnName,每条记录可动态添加
④ Version Number:类型为Long,默认值是系统时间戳,可由用户自定义
⑤ Value(Cell):Byte array
三、物理模型:
- 每个column family存储在HDFS上的一个单独文件中,空值不会被保存。
- key和version number在每个列族中均有一份;
- Hbse为每个值维护了多级索引,即:<key,column family,column name,timestamp>
如图:
四、物理存储:
① Table中所有行都按照rowkey的字典需排列;
② Table在行的方向上分割为多个Region;
③ Region按大小分割,每个表开始只有一个region,随着数据增多,region不断增大,达到某个阈值时,region就会等分为两个新的region,之后会有越来越多的region;
④ Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同的RegionServer上
⑤ Region虽然是分布式存储的最小单元,但不是存储的最小单元,Region由一个或者多个Store组成,每个store保存着一个列族(column family);每个Store又由一个memStore和0到多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上;
五、Hbase 读写原理
Hbase的读流程:
读流程图解
过程:
1、client访问zookeeper集群获取元数据信息meta表的region,再通过其region范访问所在regionServer获取元数据信息→
2、查找到相应的region信息后,找到对应的RegionServer,请求相应RegionServerdu读取数据(读取顺序:cache、memstore、Hfile)→
3、读取的数据第一时间写入blockCache中,再返回客户端
Hbase的写流程:
图解
过程
1、首先还是先找到meta的位置IP(通过zookeeper)→
2、 访问meta表,读取数据→
3、 根据namespace、tablename、rowkey在Meta表中确定需要写入的Rowkey该保存到那个region中→
4、找到该Region对应的HRegionServer,发送写数据请求→
5、HRegionServer先把数据写入到Hlog中,在将数据写入到MemStore中(大于128Mb时写入Hdfs中落盘HFile文件,落盘的同时删除对应的Hlog和memStore历史数据),反馈client写数据成功