HBase是一种Master/slaves架构,主要的组成由下图可以看出,分别为:Client、zookeeper、HMaster、HRegionServer、HDFS。
Client(客户端)可以是HBase shell,Java API或者是RestAPI。Client 就是用来访问 HBase 数据库的,它不仅提供了访问接口,还维护了对应的缓存(cache)来加速 HBase 的访问。Client 端的缓存主要是缓存 Region 的位置信息,减少获取元数据的时间。
当 Client 端没有缓存的时候(第一次请求),会加载 Region 的位置信息到Client 端,后面直接使用 cache 中的信息,如果出现重试,则会重新获取 Region 的位置信息,更新 Client 端的 cache。
HBase 通过 ZooKeeper 来做 HMaster 的高可用、HRegionServer 的监控、元数据的入口以及集群配置的维护等工作。它具体工作如下:
HMaster节点是集群中的主节点,可以配置多个,用来实现HA,它的主要职责如下:
HRegionServer直接负责用户的读写请求,它的功能如下:
HDFS为HBase提供最终的底层数据存储服务,为HBase提供高可用的支持,具体功能如下:
Write-Ahead Logs 也叫预写日志,在HBase中为HLog,HLogs存储在HDFS上。当HBase读写数据时,数据不是直接就写进磁盘的,也不是直接写入内存的,是首先写入到HLogs中,然后再写到内存中为了就是防止数据丢失。HLog是每一个HRegionServer对应一个。
HRegion可以看成是表的横向切分,HBase表的分片,HBase每个表都会根据RowKey值被切分成不同的HRegion分散存储在HRegionServer中。一个HRegionServer中可以有多个HRegion。
下图是HRegion、Table、HRegionServer的关系。
注:一个HRegion只能在一个HRegionServer上,不可以跨多个HRegionServer·
每一个Region内部,又分为多个Store,一个Store对应表中的一个列族。也就是说一个Store存储了对应表该列族下的部分数据。
内存存储,位于内存中,用来保存当前的数据操作。当数据保存在WAL中之后,HRegionServer会在内存中存储键值对。
这是磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以HFile的形式存储在HDFS的。
HBase的特点是列的灵活性。在列族中,可以指定任意多的列,在列数据为空的情况下也不会占用存储空间。HBase的底层存储的数据是KeyValue格式的数据。
RowKey是用来检索数据的主键,不仅如此,HBase表数据会按照RowKey进行排序,并在HBase达到一定大小后,会按照RowKey范围进行裂变。
Rowkey的值可以是任意字符串(最大长度为64KB)。在存储的时候,数据会按照RowKey进行字典排序,所以在设计RowKey的时候,要充分利用这个特性。
列族是HBase对表在纵向上的优化,列族是在纵向进行切分的,将一列分成一组进行管理。
列族是表的schema的一部分,所以在时候前需要进行定义。每一个列族对应一个Store,也对应HDFS上的一个目录,类似于HBase对表按列族进行分区一样。
HBase中通过RowKey和ColumnFamily:column来确定一个存储单元,也就是一个cell。每一个cell中都保存着同一个数据的多个版本。版本需要 根据时间戳来索引。时间戳一般是由HBase在写入数据时自动赋值的。每一个cell中,每一个版本的数据都是按照时间顺序倒序排列的,最新的数据在最前面。
HBase中有一个系统表meta用来存储HBase的元数据信息。该表记录了每一个表的Region地址,还有其他的一些信息。
在zookeeper中存储了meta的位置,客户端可以通过zookeeper查找到meta表的位置。meta表示HBase中的一张表,是由HRegionServer来管理的。
HBase的读数据流程如图所示
具体的工作流程如下:
HBase的写流程具体如下图所示
具体步骤为:
从上面写数据可以看出,HBase写数据是写入到内存中就返回给客户端了,并不是直接落盘,这也就是为什么HBase插入数据会比较快。那什么时候数据会落入磁盘中呢?当MemStore数据达到阈值时(默认是128M),RegionServer会将数据刷到HDFS上,生成HFile文件,然后再将内存中的数据删除,同时还删除HLog中的历史数据。
本文地址:https://blog.csdn.net/qq_38497133/article/details/107495605
如对本文有疑问, 点击进行留言回复!!
将音频文件转二进制分包存储到Redis的实现方法(奇淫技巧操作)
网友评论