基本组件
1.Hmaster
主要功能:
- 管理用户对Table的增、删、改、查的操作
- 管理regionserver的负载均衡,调整region的分布
- 在regionsplit后,负责将region分布到其他的regionserver上去
在regionserver宕机后,该regionserver上管理的region由Hmaster进行重新分配
2.HRegionserver
主要功能:
- regionserver是Hbase集群上运行在每个工作节点上的服务组建
- regionserver管理Hmaster分配给它的region,负责region的IO请求
- regionserver负责切分在运行过程中变大的region
3.HRegion
- Table在行方向上分隔成多个region,region是Hbase中分布式存储和负载均衡的最小单元,即不同的region可以分布在不同的regionserver上,但同一个region是不会拆分到多个regionserver上。
- region按大小分隔,每个表中一般是只有一个region。随着数据不断插入表中,region不断增大,当region的某个列族达到一个阈值时,就会分为两个新的region.
表的基本概念
- 列族(c0lumn family):hbase表中的每个列,都归属与某个列族。列族是表的chema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。一个列族可以包含多个列。例如:info:name,info:age中name和age是列,它们都属于info这个列族。列族中可以随意添加多个列
- 行键(RowKey):可以是任意字符串,在hbase内部,rowkey保存为自己数组,是hbase的key-value存储中的key。
特性:rowkey按字典顺序从小到达排序,例如整形int存储:1 10 100 11 13 2 .....7 81......
设计要求:rowkey散列原则,分布到不同的region中
RowKey | 列族 | 列族 |
row1 | name:zhangsan,age:23 | addr:beijing |
row2 | name :lisi,sex:nan |
数据存储
Hbase是以表的形式存储数据,表在hdfs上是以文件夹的形式存在。一张表就是一个文件夹,默认存储在default命名空间下,表文件夹中存储某个region编号命名的文件夹,region文件夹下面存储在事先创建的列族名称命名的文件夹。
HStore存储是HBase存储的核心,由两部分组成,一部分是MemStore,一 部分是StoreFile。MemStore是 Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile
数据读取过程
数据查询过程
1、定位region
1、client访问zookeeper,查找'meta'表的存储地址,获取存储'meta'表的regionserver
2、从mate表里面查询哪个Region包含这条数据,并获取regionserver地址
3、连接这个RegionServer, 查到这条数据
2、定位region后
client与region server查询交互过程。
1、查询memstore(memstore是一个按key排序的树形结构的缓冲区),即写内存是否存储rowkey数据,如果有就返回,没有进行第二步查询;
2、查询region server的读缓存BlockCache 是否存在rowkey对应数据,如果有就返回,没有的话就行进行第三步查询。
3、在HFile里面根据rowkey查询数据,不管有没有都返回到client。