Hbase运行机制

本文思路

  • Hbase是什么
  • Hbase的优劣
  • Hbase架构
  • Hbase容错
  • Hbase使用总结

HBase是什么

  1. 基于HDFS的列式存储NoSql数据库
  2. 适合于非结构化数据存储的数据库

Hbase的特点

1.采用稀疏列式存储,节约存储空间
2.可以自动切分数据,能够水平拓展
3.可以提供高并发,低延迟的读写操作

缺点
不支持丰富的条件筛选,只能根据rowkey进行get或者scan读取

Hbase架构

《Hbase运行机制》

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。
《Hbase运行机制》

Store

《Hbase运行机制》

Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上(数据写入先写memStore,当memStore超过阀值(默认64MB),则会刷入以StoreFile磁盘)。

Zookeeper

zk的引入,第一防止HMaster单点故障。另外还作为存储,保存-Root- 的HRegionServer位置。

物理架构

《Hbase运行机制》

HBase容错性

Master容错:Zookeeper重新选择一个新的Master

  • 无Master过程中,数据读取仍照常进行;
  • 无master过程中,region切分、负载均衡等无法进行;

RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer

Zookeeper容错:
Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例

HBase写入

《Hbase运行机制》

每个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的结构如下

整个过程如下

《Hbase运行机制》

Hbase使用总结

1.rowKey 必须尽量的分散,避免数据倾斜到单个Region节点。

  1. 自增id开头的,一定要 reverse 反转一下
  2. 罗列出查询场景,看看rowkey是否能满足查询需要
  3. scan查询,默认一次只返回100条数据,如果需要返回的更多,需要设置cache参数
  4. 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

    原文作者:青芒v5
    原文地址: https://www.jianshu.com/p/3069bf13f384
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞