Hbase原理解读(三)

编程入门 行业动态 更新时间:2024-10-10 15:22:36

Hbase<a href=https://www.elefans.com/category/jswz/34/1770123.html style=原理解读(三)"/>

Hbase原理解读(三)

HBase的写数据流程

当客户端联系HBase要写入一条数据时,根据表名和行键确定要操作的是哪个HRegion,找到存储着该HRegion的HRegionServer,对该HRegion进行操作,根据要操作的列族确定要操作的store,向该sotre中的memStore中写入当前数据,并在HLog中记录操作日志,之后返回表示写入成功。

内存满了怎么办

当不停的写入数据,将store中的memStore填满时,重新生成一个新的memStore继续工作,而不再对旧的memStore写入数据,此时HBase会启动一个独立的线程,将旧的memStore中的数据写入到HDFS中的一个新的HFile中,最终将数据持久化保存在了HDFS中。(当一个HRegion中的所有MemStore的大小总和超过了hbase.hregion.memstore.flush.size的大小,默认128MB。此时当前的HRegion中所有的MemStore会Flush到HDFS中。)

在不停的产生HFile过程中,同一个Store的先后产生的多个HFile中可能存在对同一个数据的多个不同的版本,其中旧的版本的数据很可能已经是失效的垃圾数据了,但是由于HDFS只能一次写入多次读取不支持行级别的增删改,这些垃圾数据无法及时清理。最终造成浪费存储空间,降低查询性能。

因此当HFile的数量达到一定的量,或达到一定的时间间隔,HBase将会触发HFile的合并操作,将同一个Store的先后产生的多个HFile合并成一个HFile,在合并的过程中,会将垃圾数据清理掉。而当不停的合并产生了达到一定大小的HFile后,HFile还会被拆分为若干个小的HFile,防止HFile过大。

这个过程中看似 先合并 又拆分,小到大 大到 小,其实 在这个过程集中,垃圾数据就被 清理掉了 。

内存断电丢数据怎么办

在HBase的HRegionServer中存在名为HLog的日志文件,在向memStore写入数据时,数据需要同时写入HLog中记录操作日志。
这个HLog文件本质上是存在于HDFS中的一个文件,通过对HDFS中的这个文件不停的追加数据记录操作日志。
而在memStore满了溢写到HFile中完成后,HBase会将最后一条持久化到HFile中的日志的编号记录到Zookeeper中redo point。
这样一旦断电丢失内存数据,只需要到Zookeeper中找到最后一条持久化的日志的编号,再从HLog中将这个编号之后的数据恢复到内存中即可以找回所有的数据。
为了防止HLog文件过多,分摊写入性能,HBase中一个HRegionServer一个HLog,这个HRegionServer中的所有的HRegion的日志都会记在这同一个HLog文件中。

HBase的写可以认为是基于内存来实现的,速度非常的块,最终通过溢写到HFile中数据持久化高可靠的保存在HDFS中,保证了数据可靠。

HBase的读据流程

当客户端联系HBase标识要读取某一张表时,根据表和行键确定出HRegion,找到存有该HRegion的HRegionServer,找到HRegion,根据要 查找的列族,确定出要查询的Store,首先在memStore中寻找要查询的数据,如果能查到,直接返回查询到的数据,查询结束。如果在memStore中找不到要查询的数据,要查询该store对应的所有的storeFile,在这个过程中,解析storeFile,先读取storeFile中的Trailer块,找到DataBlockIndex,根据判断要找到数据在当前storeFile中是否存在,如果不存在直接返回空 ,如果存在则找到对应的DataBlocks中的DataBlock返回。这样多个storeFile可能返回了多个DataBlock,其中包含着多个版本的查询的数据结果,之后在内存中将这些DataBlock信息合并,得到最新的数据返回,完成查询。
在理想的情况下 ,HBase的查询可以基于内存完成,效率很高,在最不理想的情况下,需要大量的查询底层的HDFS文件,性能会有所下降,但是,由于这些storeFile都增加了索引,所以查询的速度仍然是由保证的,但是仍然会比最理想的情况慢大概一个数量级。

更多推荐

Hbase原理解读(三)

本文发布于:2024-02-10 22:31:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1677674.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:原理   Hbase

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!