HBase基本介绍
HBase(Hadoop Database),是Google Bigtable的开源实现,是一个基于Hadoop文件系统设计的面向海量数据的高可靠、高性能、面向列、可伸缩的分布式存储系统。
HBase采用的Key/Value的存储方式,这意味着,及时随着数据量增大,也几乎不会导致查询的性能下降。HBase适合高并发,且大数据量。但是不适合数据分析或是实时。
在廉价的PC服务器上搭建大规模的存储化集群,使用HBase可以对数十亿级别的大数据进行实时性的高性能读写。
与大部分分布式NoSQL数据库不同的是,HBase针对数据写入具有强一致性的特性,甚至包括索引列也都实现了强一致性。
Hbase集群架构:有一个Master服务器,多个RegionServer服务器。Master服务器负责维护表结构信息,实际的数据都存储在RegionServer服务器上。而RegionServer包含一个或多个Region。
架构图
ZooKeeper在HBase的应用场景:系统冗错、RootRegion管理、Region状态管理、分布式SplitLog任务管理和Replication管理。
系统冗错
HBase启动的时候,每个RegionService服务器都会到ZooKeeper的/hbase/rs节点下创建一个信息节点。同时,HMaster会对这个节点注册监听。
当某个RegionServer挂掉的时候,ZooKeeper会因在一段时间内无法接收其心跳信息(即Session失效),而删除掉该RegionServer服务器器对应的信息节点。
与此同时,HMaster则会接收到ZooKeeper的NodeDelete通知,从而感知到某个节点断开,并立即开始冗错工作----在HBase的实现中,HMaster会将该RegionServer所处理的数据分片(Region)重新路由到其他节点上,并记录到Meta信息中供客户端查询。
RootRegion管理
HBase集群中数据存储的位置信息是记录在元数据分片,也就是RootRegion上的。每次客户端发起新的请求,需要知道数据的位置,就会去查询RootRegion,而RootRegion自身的位置则是记录在ZooKeeper上的。
当RootRegion发生变化,比如Region的手工移动、Balance或是RootRegion所在服务器发生故障等,就能通过ZooKeeper来感知到这一变化并做出一系列相应容灾措施,从而保障客户端总是能够拿到正确的RootRegion信息。
Region状态管理
Region是HBase中数据的物理分片,每个Region中记录了全局数据中的一小部分,并且不同的Region之间的数据是相互不重复的。
因系统故障、负载均衡、配置修改、Region分裂与合并等。一旦Region发送移动,它必然会经历Offline(下线)和重新Online(上线)的过程。
在Offline(下线)期间数据是不能被访问的,并且Region的这个状态变化必须让全局知晓,否则可能出现某些事物性的异常。而对于HBase集群来说,Region的数量会很多,而大量规模的Region状态管理也只有依靠ZooKeeper这样的系统才能完成。
分布式SplitLog任务管理
当某台RegionServer服务器挂掉时,由于总有一部分新写入的数据还没有持久化到HFile中,因此在迁移RegionServer的服务是,一个重要的工作就是从HLong中恢复这部分还在内存中的数据,而这部分工作最关键的一步就是SplitLog,即HMaster需要遍历该RegionServer服务器的HLog,并按Region切分成小块移动到新的地址下,并进行数据Replay(重放)。
由于单个RegionServer的日志量相对庞大(一个RegionServer会包含多个Region),而用户又往往希望系统能够快速完成日志的恢复工作。
因此一个可行的方案是将这个处理HLog的任务分配给多台RegionServer服务器来共同处理,而这就又需要一个持久化组件来辅助HMaster完成任务的分配。
当前的做法是,HMaster会在ZooKeeper上创一个一个splitlog的节点,将”哪个RegionServer处理哪个Region“这样的信息以列表的形式存放到该节点上,然后由各个RegionServer服务器自行到该节点上去领取任务并在任务执行成功或失败后再更新该节点的信息,以通知HMaster继续进行后面的步骤,ZooKeeper在这里担负起了分布式集群中相互通信和信息持久化的角色。
Replication管理
是实现HBase中主备集群间实时同步的重要模块。使其拥有了容灾和分流等关系型数据库才有功能,从而大大加强了HBase的可用性。
HBase借助ZooKeeper来完成Replication功能。做法是ZooKeeper上记录一个replication节点,然后把不同的RegionServer服务器对应的HLog文件名称记录到相应的节点上,HMaster集群会将新增的数据推送给Slave集群,并同时将推送信息记录到ZooKeeper上,然后在重复上述过程。
当服务器挂掉时,由于ZooKeeper上已经保存了断点信息,因此HMaster能够根据这些断点信息来协调推送HLog数据的主节点服务器,就可以继续复制了。