Hbase相关模块及工作原理

Hbase相关模块及工作原理

这里记录、表述一下关于Hbase的相关模块和工作原理,便于理解和加深印象。不对的还望指出。

相关模块

首先,集群版的Hbase构于hadoop的文件系统(HDFS)上的,以HDFS作为数据存储的基础。上层提供访问数据Java API,供应用访问及操作数据。Hbase集群,主要由Master和Region Server组成,以及Zookeeper提供节点管理。

Hbase相关模块

  • Master
    Hbase Master用于协调多个Region Server,侦测每个Region Server之间的状态变化,并且平衡他们的之间的负载。同时还负责分配Region给 Region Server。Hbase允许多个Master同时存在,但只有一个Master是提供服务的,其它的Master都处于待命的状态。当提供服务的Master宕机时,由Zookeeper检测到,并从它的Master中选举出新的提供服务点,对Region进行管理。
    对一个Region Server而言,包含一个或多个Region。
  • Region Server
    Region Server,顾名思义是Region的服务,拥有着多个Region,它管理表格实现读写操作。客户端(Client)直接连接Region Server,与其通信,获得Hbase中的数据。从Region的角度来看,它是真实存放Hbse数据的地方,是Hbase分布存储和负载均衡的单元。如果表格很大,由多个列族(Column Family)组成,那数据将存放在多个Region之间,每个Region关联 着多个存储单元(Store)。

  • Zookeeper
    Zookeeper作为Hbase Master的高可用群集(High Available)解决方案,它保证至少有一个Hbase Master处于运行状态。(这里我想到Zookeeper保证能够切换solrcloud中活跃的节点【active】对外提供全文检索服务)而且,Zookeeper还负责Region及Region server的注册。

工作原理

Hbase的工作原理

从集群整体上来看,Zookeeper起协调作用,维护着Master与Region Servver之间的关系。当(一个)客户端Client访问Hbase集群时,先与Zookeeper通信,到达对应的Region Server。Region是Hbase并行化的基本单元。数据存储在Region当中,每一个Region都只存储一个列族(Column Family)的数据,并且是该列族中的一段。 列族下的Row按一定的记录存储在Region,达到一定的数量,就拥有多个Region。或者,应该这么说,Region所能存储的数据大小是有上限的,达到上限的时候(Threshold),Region便分裂,数据也会分裂到多个Region中。这个有点像细胞的分裂。据说,这样子可以提高数据的并行化及数据的容量。

Region还可以往细里看,它包着多个Store对象,而每个Store包含着一个MemStore 和 一个或多个HFile。MenStore是数据在内存中的实体,并且都有序的。当数据向Region写入的时候,会先写入MemStore。当MemStore中的数据需要要向底层文件系统倾倒(Dump) 时,例如MemStore中的数据体积达到配置的最大值时,Store使用创建StoreFile,而StoreFile是HFile的一层封装。也就是说MemStore中的数据最终会写到HFile中,即磁盘IO。HBase底层是依靠HDFS,所以HFile是存储在HDFS中。

solrcloud与Hbase不太一样,solrcloud全文检索服务,可以通过请Zookeeper获取其中一个active的节点请求服务,也可以直接指定solr节点请求服务,集群入口方式有2种。不过通过zookeeper方式,可以承受更大的并发量。

HLog可靠性保证

HBase的可靠性是通过HLog实现的,HLog机制是WAL(Write-Ahead Logging)的一种实现,预写日志。WAL是事务机制中常见的一致性实现方式。每个Region Server中都会有一个HLog实现,Region Server进行更新操作时,先把记录到写到WAL(也就是HLog)中,然后再写入到Store的MemStore,最终MemStore会将数据写入到持久化的HFile中,当MemStore到达配置的内存阀值时。通过先写WAL(HLog),再写MemStore,这样的方式保证写的可靠性。
如果没有WAL,当Region Server宕掉的时候,MemStore还没写入到HFile,或者StoreFile还没保存,那么数据就会丢失。而HFile的数据由HDFS保证的,默认HDFS中会有3份。

HFile结构

HFile结构图

HFile由多个数据块(Block)组成,并且有一个固定的结尾块。其中的数据块是由一个Header和多个Key-Value的键值对能成。结尾的数据块包含了数据相关的索引信息。数据块(Block)大小默认为64KB,可调整。当数据的场景多为有序的时候,数据块的大小调大上点;当年数据的场景多为随机的时间,数据块的大小调小一点。这样子可以提高Hbase的性能。

数据映射关系

Hbase数据映射关系图
可以认为Hbase是一个有序的多维Map,每个RowKey映放了多个数据。这样打个比方,一个key对应用多个List< byte[]>的value的Map,一个List大致看作是列族(Column Family)。

来源:IBM developerWors

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值