HBase架构简析

一、HBase架构简介

HBase架构图

1、StoreFile

HBase数据的存储单元,底层使用HDFS存储。数据按照Cell(RowKey、Column Family、Column)排列,相同Cell按照timestamp倒序排列

2、HStore

对应一个Table在一个HRegion中的一个Column Family

3、HRegion

对应一个Table的一个Region在一个HRegionServer中的表达
HBase使用RowKey将表水平切割为多个Region

4、HRegionServer

用于存放和管理本地HRegion;
HBase在启动时由HMaster将HRegion分配给HRegionServer管理;
Client直接连接HRegionServer读写数据;

5、WAL

Write Ahead Log。它是HDFS上的文件,所有写操作都会先保证将数据写入WAL文件,防止HRegionServer宕机时MemStore中的数据丢失;
WAL以table + rowkey的方式记录一条条数据操作记录;

6、HMaster

管理HRegionServer,管理和分配HRegion给HRegionServer以实现负载均衡功能;
admin功能:table的DDL操作;

7、Zookeeper

协调系统,存放整个HBase集群的元数据和集群状态信息;
存放了hbase:meta文件所在位置,Client通过该文件定位table:rowkey所属Region及Region所在的RegionServer;

二、数据切分

HBase将Table按照RowKey的范围切分为多个Region,对应RowKey的数据被划分到对应的Region存储;
Region底层使用HDFS存储,在HBase启动时被分配给某一个HRegionServer管理;
总结:

  • 一个Table对应多个Region
  • 一条RowKey数据只存在于一个Region中
  • 一个Region同时只被一个HRegionServer管理
  • 一个HRegionServer管理多个Region,这些Region可以属于不同的Table

三、集群容灾

1、HFile存储容灾

  • HFile底层基于HDFS存储,HDFS的3个DataNode备份数据的方式保证数据分布式存储不丢失;
  • 当HDFS某个DataNode挂掉时,由HStore内置的HDFS客户端自动感知并切换到备份DataNode读写,切换过程对上层透明;

2、HRegionServer服务容灾

  • HBase启动时,HMaster分配HRegion给HRegionServer管理;
  • 某台HRegionServer服务不可用时,HMaster通过zk感知,并将对应收到影响的* HRegion列表分配给其他HRegionServer管理;
  • 其他HRegionServer通过读取WAL重建HRegion中table:rowkey的对应数据,重建完成后对外提供HRegion的读写服务;
  • 重建过程中,对应HRegion所属的数据服务不可用;

3、HMaster服务容灾

  • HMaster一般部署2台服务,通过zk完成热备;
  • 同时只有一台HMaster提供服务,当主HMaster服务宕机时,备HMaster立即通过zk感知并提供服务;

四、数据读写过程

1、数据的写入

  • client发起某table:rowkey数据的Put操作
  • client从Zookeeper获取hbase:meta文件所在的HRegionServer节点
  • client查询hbase:meta获取table:rowkey对应的HRegion,以及HRegion所在的HRegionServer,并缓存信息到本地
  • client直接发送put()请求给HRegionServer
  • HRegionServer将对应table:rowkey的put请求记录在WAL中
  • HRegionServer将对应table:rowkey的put请求数据写入HRegion对应的MemStore中
  • HRegionServer返回响应给client,put()操作完成
  • MemStore中的数据会在特定条件下持久化到HFile中,WAL文件也会定期roller精简

2、数据的读取

寻找Region的过程类似,略

五、HBase特性

1、CP系统(强一致性+分区容错性)

  • 每个RowKey的值只出现在一个Region
  • 同一时间一个Region只分配给一个HRegionServer
  • 行内的mutation操作都是原子的
  • 单个RowKey的put操作要么成功,要么完全失败

当某台RegionServer fail的时候,它管理的Region failover到其他RegionServer时,需要根据WAL来redo(redolog,有一种日志文件叫做重做日志文件),这时候进行redo的Region是unavailable的;所以hbase降低了可用性,提高了一致性。
设想一下,如果redo的region能够响应请求,那么可用性提高了,则必然返回不一致的数据(因为redo可能还没完成),那么hbase就是降低一致性来提高可用性了。

2、顺序磁盘IO

MemStore中的数据Cell是按照RowKey + Column Family + Column排序的,所以持久化到HFile的过程是顺序磁盘IO。数据一旦刷入HFile中就是持久化不可变的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HBase Architectural Components(HBase架构组件) HBase架构也是主从架构,由...
    陌上疏影凉阅读 7,184评论 0 7
  • 最近在逐步跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hb...
    飞鸿无痕阅读 50,460评论 19 272
  • HBase那些事 @(大数据工程学院)[HBase, Hadoop, 优化, HadoopChen, hbase]...
    分痴阅读 9,418评论 3 17
  • HBase存储架构图 HBase Master 为Region server分配region 负责Region s...
    kimibob阅读 10,940评论 0 52
  • 一、HBase简介 Hbase是什么 HBase是一种构建在HDFS之上的分布式、面向列、多版本、非关系型的数据库...
    便利蜂数据平台阅读 4,525评论 0 4

友情链接更多精彩内容