HBase的详细架构图:
架构的组件:
(1)Master
所有Region Server的管理者(表级别的管理),其实现类为HMaster,主要作用如下:
对于表的操作:create, delete, alter;
对于RegionServer 的操作:分配regions 到每个RegionServer,监控每个RegionServer的状态,负载均衡和故障转移。
(2)zookeeper
HBase 通过Zookeeper来做Master 的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。
(3)Region Server
Region Server为Region的管理者(数据级别的管理),其实现类为HRegionServer,主要作用如下:
对于数据的操作:get, put, delete;
对于Region的操作:splitRegion、compactRegion。
(4)HDFS
HDFS为HBase提供最终的底层数据存储服务,同时为HBase 提供高可用的支持。HBase中的数据最终都要存储到HDFS上。
(5)StoreFile
保存实际数据的物理文件,StoreFile 以HFile 的形式存储在HDFS上。每个Store 会有一个或多个StoreFile(HFile),数据在每个StoreFile 中都是有序的。
(6)MemStore
写缓存,由于HFile 中的数据要求是有序的,所以数据是先存储在MemStore中,排好序后,等到达刷写时机才会刷写到HFile,每次刷写都会形成一个新的HFile。
(7)WAL
由于数据要经MemStore 排序后才能刷写到HFile,但把数据保存在内存中会有很高的概率导致数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile 的文件中,然后再写入MemStore 中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
Store其实就是代表的是表的列族,只不过在物理上叫Store,逻辑上成为列族。
Region就是类似于表的概念,在HBase中它是一张表进行横向切分的切片,横跨多个列族。
从HBase的结构图可以看出,用户Client并没有和Master直接相连,而是直接连接的zookeeper,zookeeper承担了一部分Master的功能,Client除了连接zookeeper还连接了RegionServer,所以即使Master挂掉了,用户客户端依旧可以完成对数据的读写操作。