起源

HBase的原型是Google Allo的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储。

什么是HBase

HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase的目标是存储并处理大型的数据,更具体来说是仅需要使用普通的硬件配值,就能够处理成千上万的行和列所组成的大型数据。

HBase是Google Big大

与传统数据库对比

  • 传统数据库遇到的问题
  • 数据量很大的时候无法存储
  • 没有很好的备份机制
  • 数据达到一定数量开始缓慢,很大的话基本无法支撑
  • HBase优势
  • 线性扩展,随着数据量增多可以通过节点扩展进行支撑
  • 数据存储在HDFS上,备份机制健全
  • 通过Zookeeper协调查找数据,访问速度快

HBase集群中的角色(进程)

  • 一个或多个主节点,HMaster
  • 监控RegionServer
  • 处理RegionServer故障转移
  • 处理元数据的变更
  • 处理region的分配或移除
  • 在空闲时间进行数据的负载均衡
  • 通过Zookeeper发布自己的位置给客户端
  • 多个从节点,HregionServer
  • 负责存储HBase的实际数据
  • 处理分配给它的Region
  • 刷新缓存到HDFS
  • 维护HLog
  • 执行压缩
  • 负责处理Region分片

基本原理

HBase是一种作为存储的分布式文件系统,另一种是作为数据处理模型的MR框架。因为日常开发人员比较熟练的是结构化的数据处理,但是在HDFS直接存储的文件往往不具有结构化,所以催生出了HBase在HDFS上的操作。如果需要查询数据,只需要通过键值便可以成功访问。

HBase内置有Zookeeper,但我们一般会有其他的Zookeeper集群来监管master和RegionServer,Zookeeper通过选举,保证任何时候集群中只有一个活跃的HMaster,HMaster与HRegionServer启动时会向Zookeeper注册,存储所有HRegion的寻址入口,实时监控HRegionServer的上线和下线信息。并实时通知给HMaster,存储HBase的schema和table元数据,默认情况下,HBase管理Zookeeper实例,Zookeeper的引入使得HMaster不再是单点故障。一般情况下会启动两个Hmaster,非Active和HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。

一个RegionServer可以包含多个HRegion,每个RegionServer维护一个HLog,和多个HFiles以及其对应的Memstore。RegionServer运行于DataNode上,数量可以与DataNode数量一致。




hbase未来规划 简述hbase的设计目标_数据


  • Write-Ahead logs

HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,再写到内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

  • HFile

这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。

  • Store

HFile存储在Store中,一个Store对应HBase表中的一个列族。

  • MemStore

内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegionServer会在内存中存储键值对。

  • Region

HBase表的分片,HBase表会根据RowKey值被切分成不同的Region存储在RegionServer中,在一个RegionServer中可以有多个不同的Region。

HBase的shell操作

[root@master apps]# hbase-daemon.sh start master[root@master apps]# hbase shell

HBase读写流程


hbase未来规划 简述hbase的设计目标_hbase未来规划_02


hbase未来规划 简述hbase的设计目标_hbase rowkey实例_03


  • 读数据流程
  • RegionServer保存着Meta表以及数据,要想访问数据,客户端必须先通过Zookeeper获取-ROOT-的位置
  • 通过-ROOT-来获取Meta中的region的位置
  • 客户端通过Meta获取数据的region位置
  • 通过region的位置获取数据


hbase未来规划 简述hbase的设计目标_HDFS_04


  • 写数据流程
  • 客户端先访问Zookeeper,找到元数据信息
  • 确定要写入的数据是在哪一个Region上
  • 然后客户端向该RegionServer发送写数据的请求
  • 客户端先把数据写入到HLog中,以及所需要的操作,防止数据的丢失
  • 然后写如Memstore
  • 如果HLog和Memstore均写入成功,则表示该数据写入成功,如果在这个过程中,Memstore的数据达到了阈值,就会将Memstore中数据刷新到storeflie
  • storefile过多的时候,region就会越来越大,如果达到阈值,那么Region会被RegionServer一分为二
  • storefile最后会不断溢出成Hfile
  • 在RegionServer会再空闲的时候讲Hfile进行合并


hbase未来规划 简述hbase的设计目标_数据_05


若有收获,欢迎关注转发。