hbase的实现原理和运行机制

hbase的实现原理

Hbase的功能组件

hbase的实现原理和运行机制

库函数:

一般用于连接每个客户端,客户端能够利用库函数访问Hbase的数据

HMaster:

对于元数据进行维护和变更
监控并维护Region服务器列表
检索集群中那些Region服务器在工作,并处理Region服务器故障转移
处理Region的分配与移除
负责调整分裂、合并后的Region的分布
进行数据的负载均衡
通过ZK发布自己的位置给客户端

HRegionServer

负责存储Hbase的实际数据
处理分配给Region服务器的数据
刷新缓存到HDFS
维护HLog(预写入日志)
执行压缩
对Region进行分片

HRegion

一个Hbase表被划分为多个Region,当Region增大到一定地步的时候,就会进行查分,拆分成多个Region。拆分操作并非是物理拆分,而是逻辑上拆分为两个Region,数据的实际存储位置并未发生变化,所以这个拆分过程非常的迅速。同一个Region不会拆分到不同的Region服务器上的,每一个Region服务器大概可以存储10到1000个Region。当文件拆分到一定地步的时候,就会进行合并,合并后的数据才会移动到新的物理存储位置。单个Region的大小推荐为1GB到2GB(根据单台服务器的有效处理能力来决定)

定位Region

hbase的实现原理和运行机制
Hbase中有着两张特殊的Table,-ROOT-(高版本已经移除)和**.META.**
1.通过Zookeeper中记录的**-ROOT-表的位置信息来查找-ROOT-
2.
-ROOT-表中记录了.META.表的Region信息,通过-ROOT-表可以访问.META.表总的信息,-ROOT-表只有一个Region**
3.**.META.表内部是以key/value的形式来记录了所有用户数据表的Region信息,.META.**表可以有多个Region
4.为了加快寻址速度,客户端会缓存数据所在的位置信息。但是,这样就需要解决缓存失效问题。Hbase采用的是惰性解决机制,不会管当前缓存是否失效,只有当依照当前缓存的位置信息去寻找数据寻找不到的时候,才会重新通过三层寻址方法再次寻找数据地址,然后再把最新的位置信息缓存下来

Hbase的运行机制

Hbase的架构

hbase的实现原理和运行机制
1.客户端:
客户端在最开始的时候通过ZK实现的三级寻址方法来访问数据,在之后会通过缓存的位置信息直接获取数据。
2.ZK:
Zookeeper中存储着HMaster的信息,客户端通过ZK中的信息来到达HMaster
3.HMaster:
HMaster中存储着每个Region服务器的信息和服务器中的HRegion的信息,通过确定要Region在哪个Region服务器上,然后访问对应的服务器。
4.HRegionServer:
存储着HRegion,当要对HRegion进行操作的时候,会先与写入日志到HLog中,然后再操作对应的HRegion。RegionServer运行于DataNode上,数量可以与DatNode数量一致。
5.HLog:
预写入日志(Write-Ahead logs),Hbase的修改记录,当对Hbase读写数据的时候,数据并不是直接写入到磁盘当中,而是会在尺寸中保留一段时间(时间以及数据量的阈值可以设定)。丹巴数据保存到内存中会有很高几率引起数据丢失,为了解决这个问题,数据会先写入到HLog中,然后再写入内存中。当系统发生过账的时候,数据可以通过这个日志文件重建。
每个Region服务器都只有一个HLog。
当其中一个Region服务器出现故障的时候,当HMaster检测到的这个Region服务器出现故障之后,就会获取这个故障Region服务器的HLog文件,然后将HLog中的数据进行拆解,根据拆解后的HLog到其他的Region服务器上将数据进行恢复。
6.HRegion:
Hbase表的分片,Hbase表会根据RowKey支被切分在不同的Region存储在Region服务器中。
7.Store:
一个Store对应HBase表中的一个列簇。
8.MemStore:
顾明思议,就是内存存储,位于内存中,用来保存当前的数据操作。当数据日志保存在HLog中之后,Region服务器会在内存中存储键值对。
9.StoreFile:
当MemStore中数据存储达到一定时间或者数据大小达到一定的阈值之后,就会存储为一个个的StoreFile。StoreFile的数量达到一定地步的时候,会进行合并操作。当合并后的StoreFile大小达到一定的阈值的时候,会执行分割操作,分割为一块块的数据。
10.HFile:
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。

缓存刷新机制

系统会周期性地将MemStore缓存中的内容刷写入到磁盘的StoreFile文件中,清空缓存,并在HLog中写入一个标记。
每次刷新都会产生一个新的StoreFile文件,因此每个Store包含多个StoreFile文件。
每个Region服务器都有一个自己的HLog文件,每次启动都会检查该文件,确定最近一次执行缓存刷新操作之后是否发生新的写入操作,如果发现有更新,则会先写入到MemStore中,再刷写到StoreFile文件,最后删除旧的HLog文件,开始为客户端提供服务。

StoreFile合并与分割

hbase的实现原理和运行机制
每次的刷写都会产生一个StoreFile文件,当StoreFile文件过多的时候,会影响查找的速度,于是就合并为一个新的大的StoreFile文件。
但是当StoreFile一直进行合并操作,就会造成合并之后的StoreFile文件过大,于是又分割为多个大小适中的StoreFile文件。

写入数据

首先,客户端访问ZK,访问到HMaster,通过HMaster来确定写入的数据存储在那个Region服务器的HRegion中。
接着,在HRegion中先进行进行预写入日志操作,将数据操作写入到HLog中。然后再讲数据写入到MemStore中,当MemStore中的数据存在一定的时间,或者数据量达到一定的阈值之后,就会写入到磁盘当中。只有HLog中的数据完整写入到磁盘当中之后,客户端写入的数据才允许被客户端调用获取。

读取数据

第一次读取,客户端先访问ZK,然后访问到HMaster,通过HMaster来确定HRegion位于哪个Region服务器上。访问对应的Region服务器,在HRegion中先访问MemStore,如果缓存中找到数据,就直接读取,如果缓存中没有数据就对StoreFile进行查找。在客户端中缓存当前数据的Region信息。
第二次读取,直接通过缓存来寻找对应的Region服务器上的HRegion中的信息。如果通过客户端的缓存查找不到,在按照第一次读取的步骤来进行操作。

国家开放大学(原名沈阳电大)

hbase的实现原理和运行机制
春季班,开始报名国家开放大学(原名沈阳电大),无需考试,全程托管,国家承认学历,学信网可查 ,学制2.5年。专科,本科,报名的各位学员可以交材料喽!