本文思路
- Hbase是什么
- Hbase的优劣
- Hbase架构
- Hbase容错
- Hbase使用总结
HBase是什么
- 基于HDFS的列式存储NoSql数据库
- 适合于非结构化数据存储的数据库
Hbase的特点
1.采用稀疏列式存储,节约存储空间
2.可以自动切分数据,能够水平拓展
3.可以提供高并发,低延迟的读写操作
缺点
不支持丰富的条件筛选,只能根据rowkey进行get或者scan读取
Hbase架构
![](https://img.haomeiwen.com/i3359971/ead21f9285da89dd.png)
Client
hbase的访问客户端,可以做一些本地缓存,来加快对hbase集群的访问,如 region的位置信息
HMaster
负责HRegionServer的负载均衡,给HRegionServier分配Region。client读取数据不经过HMaster。
HRegionServer
管理Region,负责Region的切分和合并
HRegion
Table在行的方向上分割为多个HRegion,HRegion是HBase中分布式存储和负载均衡的最小单元,即不同的HRegion可以分别在不同的HRegionServer上,但同一个HRegion是不会拆分到多个HRegionServer上的。HRegion按大小分割,每个表一般只有一个HRegion,随着数据不断插入表,HRegion不断增大,当HRegion的某个列簇达到一个阀值(默认256M)时就会分成两个新的HRegion。![](https://img.haomeiwen.com/i3359971/63e5fda0612448c8.png)
Store
![](https://img.haomeiwen.com/i3359971/15bb820958d4736f.png)
Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上(数据写入先写memStore,当memStore超过阀值(默认64MB),则会刷入以StoreFile磁盘)。
Zookeeper
zk的引入,第一防止HMaster单点故障。另外还作为存储,保存-Root- 的HRegionServer位置。
物理架构
![](https://img.haomeiwen.com/i3359971/f6056b77c5dfee7f.png)
HBase容错性
Master容错:Zookeeper重新选择一个新的Master
- 无Master过程中,数据读取仍照常进行;
- 无master过程中,region切分、负载均衡等无法进行;
RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer
Zookeeper容错:
Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例
HBase写入
![](https://img.haomeiwen.com/i3359971/56aa60356de3ced4.png)
每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复
HBase读取
读数据的关键是定位Region所在的RegionServer,数据的RegionServer如果被定位过,会缓存到client端。
HBase里有两个特殊表分别是 -ROOT-
和 .META.
-ROOT-
表包含.META.表所在的region列表,该Region永不拆分,只有一个。
.META.
表包含所有的用户表对应的region的位置信息。
定位RegionServer
ZooKeeper--> -ROOT-(单Region)--> .META.--> 用户表
ZK的结构如下
整个过程如下
![](https://img.haomeiwen.com/i3359971/8b9c72a5724c8ecc.png)
Hbase使用总结
1.rowKey 必须尽量的分散,避免数据倾斜到单个Region节点。
- 自增id开头的,一定要 reverse 反转一下
- 罗列出查询场景,看看rowkey是否能满足查询需要
- scan查询,默认一次只返回100条数据,如果需要返回的更多,需要设置cache参数
- mutliGet注意控制 rowkey数量,针对rt设置一个合理的查询上限
参考文章
https://cloud.tencent.com/developer/article/1018571
https://www.jianshu.com/p/3832ae37fac4
http://www.uml.org.cn/bigdata/201810181.asp
官方
http://blog.zahoor.in/2012/08/hbase-hmaster-architecture/
http://hbase.apache.org/book.html#regionserver_splitting_implementation
网友评论