温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hbase中对数据如何实现增删改查

发布时间:2021-12-09 10:12:51 来源:亿速云 阅读:826 作者:小新 栏目:大数据

小编给大家分享一下Hbase中对数据如何实现增删改查,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

Hbase写插入数据流程:

Hbase中对数据如何实现增删改查

1、大体部分

如果将一张表看成是一个区域(region)的话,即每张表一开始只有一个region。往数据表中不断的插入数据,随着数据不断插入表,region不断增大,当增大到某个阀值的时候(百万千万级别),hbase会自动对表进行水平分成多个区域(区域大小一定但是行数不一定相同),每个区域都称为一个region,每个region会保存一个表里面的某段连续的数据。当表中的行数不断增多,就会有越来越多的region。即一个regionserver中的region过多,这时候master就会将一部分region分配到其他的regionserver中,实现master负载均衡的功能。

2、缩小到每一个region

一个region由多个store组成,一个store对应一个CF(列族);一个store包含了memstore和storefile(HFlie)。数据先写入内存中的memetore,memstore是内存中的缓存区,同时还会将 数据顺序写入到位于硬盘中的Hlog文件中,该文件不仅仅是一个日志文件,同时还记录了操作的数据信息,当机器从宕机状态下恢复到正常运行状态,Hlog文件就会被读进内存实现数据恢复。当memstore中的数据达到某个阀值的时候,regionserver会启动一个flashcache的进程将数据从memestore刷入storeflie,每次写入形成单独的一个storefile(Hfile)。

Hbase读取数据流程:

Hbase中对数据如何实现增删改查

1、存储分布

表中的数据被切分到集群中,若要查询数据需要知道该数据在第几行以及被分到哪一台regionserver中。然而master只负责负载均衡以及故障转移,这时候需要构建一个类似记录存储路径的信息,这部分就由zookeeper来完成。

当表中的数据多达上千万甚至上亿行时,被切分的数据会被保存到一张叫META的表中,它也是hbase结构中的一张表。该张表可简单的认为为两列,行数不确定。META表中的每一行的行键保存描述某个region的存储的行数,对应的第二列保存  该region被分配到的regionserver的ip地址。由此META表中的行数远比一张完整表的行数要少的多,但是依然保存了全部的数据信息。

虽然META表的行数已经大大减少,但是可能随着数据的不断插入,行数可能会依然很大。这时候需要将META表中的数据需要再进行一次类似的操作。因为META表同样是hbase结构中的一张表,同样会被切分。META表被切分的“region”就会保存到一张与META表结构类似的名为-ROOT-的表中,该张表只有一个region,永远不会被切分成多个region,zookeeper记录了-ROOT-表的位置。-ROOT-表中的行键描述了META表被切分的多个region的存储信息,即-ROOT-表中的一行对应META表中的一个region,对应的列同样是记录保存该信息的节点ip。这样一来-ROOT-表中的一条数据就可能对应着真实的上万或上百万的数据。

2、读取定位

通过zookeeper里的文件得到-ROOT-表的位置。通过-ROOT-表查找META表的第一个表中相应的region的位置。META表中的每一个region在-ROOT-表中都是一行记录。通过META表找到所要的用户表region的位置。用户表中的每个region在META表中都是一行记录。由于-ROOT-表永远不会被分隔为多个region,保证了最多需要三次跳转,就能定位到任意的region。

3、数据交互

定位到region,开始先从Memstore查数据,若找不到再和与Memstore处于同一内存空间的BlockCache中查数据若Memstore和BlockCache这两块内存都没有要查找的数据,则需要从硬盘的HFile中获取。把读到的结果放入BlockCache。由于BlockCache采用的是LRU策略,因此BlockCache达到上限后,会启动淘汰机制,淘汰掉最老的一批数据。因此BlockCache中存储的是一些频繁被查询的数据。

Hbase修改数据的流程:

1、时间戳

HBase 中通过 Row 和 Columns 确定的一个存储单元称为 Cell。每个 Cell 都保存着同一份数据的多个版本。 版本通过时间戳来索引,时间戳的类型是 64 位整型。时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。

2、修改数据

当对数据进行修改,修改的数据会将当前的数据覆盖,由hbase在写入数据时自动赋予修改数据后的时间戳,每个 Cell 中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。保证每次获取的数据时最新修改后的数据。

Hbase删除数据的流程:

1、执行delete操作并不是把数据真的删除了,而是添加了一个标记,代表此数据被删除掉,直到hbase执行大合并,才会真的从hfile中删除数据

2、大合并和小合并

这里需要回到写入数据到stofile说起,当storefile的文件数量增长到一定阀值后,系统会进行合并,在合并过程中会进行版本合并和删除工作,形成更大的stofile,这就是小合并。大合并则是指将一个列族的所有stoefile合并成一个文件。

看完了这篇文章,相信你对“Hbase中对数据如何实现增删改查”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI