正文
hbase中flush,Hbase结构
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
深入理解HBASE(3.4)RegionServer-Memstore
1、理想情况下,在不超过hbase.regionserver.global.memstore.upperLimit的情况下,Memstore应该尽可能多的使用内存(配置给Memstore部分的,而不是真个Heap的)。
2、MemStore 是 HBase 非常重要的组成部分,MemStore 作为 HBase 的写缓存,保存着数据的最近一次更新,同时是HBase能够实现高性能随机读写的重要组成。
3、regionServer 其实是hbase的服务,部署在一台物理服务器上,region有一点像关系型数据的分区,数据存放在region中,当然region下面还有很多结构,确切来说数据存放在memstore和hfile中。
4、一个MemStore大小通常在128~256MB,见参数: hbase.hregion.memstore.flush.size 。
六、HBase写入流程
1、整个写入顺序图流程如下:1 客户端查找对应region 客户端根据要操作rowkey,查找rowkey对应的region。查找region的过程为通过zk获取到hbase:meta表所在region。
2、(1)当一个Region中的某个Store下的StoreFile的总大小查过某个值,由参数hbase.hregion.max.filesize设定(默认10g),该Region就会按照RowKey进行拆分。
3、和读相比,HBase写数据流程倒是显得很简单:数据先顺序写入HLog,再写入对应的缓存Memstore,当Memstore中数据大小达到一定阈值(128M)之后,系统会异步将Memstore中数据flush到HDFS形成小文件。
Hbase读写原理
1、hbase客户端通过rpc调用将put、delete数据请求提交到对应的regionserver,regionserver对请求进行处理,并将数据最终写入hfile中,进行持久化保存。hbase为了保证随机读取的性能,所以hfile里面的rowkey是有序的。
2、HBase采用了类似Google Bigtable的数据模型,即一个稀疏的、分布式的、持久化的多维映射表,每个表都由行键、列族、列限定符和时间戳组成。
3、为了减少flush过程对读写的影响,HBase采用了类似于两阶段提交的方式,将整个flush过程分为三个阶段:要避免“写阻塞”,貌似让Flush操作尽量的早于达到触发“写操作”的阈值为宜。
4、Hbase是Hadoop的一个存储组件可以提供低延迟的读写操作,它一般构建在HDFS之上,可以处理海量的数据。Hbase有个很好的特性是可以自动分片,也就是意味着当表的数据量变得很大的时候,系统可以自动的分配这些数据。
5、hbase的核心数据结构为LSM树。LSM树分为内存部分和磁盘部分。内存部分是一个维护有序数据集合的数据结构。RowKey与nosql数据库们一样,RowKey是用来检索记录的主键。
hbase如何确定一条新数据写入到哪个regionserver
HBase 中,表会被划分为..n 个 Region,被托管在 RegionServer 中。
HBase中,表会被划分为1…n个Region,被托管在RegionServer中。
HBase中表的数据是存储在RegionServer上的一个个Region中的,表的一个列族对应于一个Region。Region是按照数据行键Rowkey的字典序来存储数据的。
从.META.表里面查询哪个Region包含这条数据。 获取管理这个Region的RegionServer地址。 连接这个RegionServer, 查到这条数据。好,我们先来第一步。
在HBase中,Region的一个列族对应一个MemStore,通常一个MemStore的默认大小为128MB(我们设置的为256MB),见参数 hbase.hregion.memstore.flush.size 。当可用内存足够时,每个MemStore可以分配128MB的空间。
所有为了保证数据不丢失,hbase将更新操作在写入metastore之前会写入到一个write ahead log(WAL)中。WAL文件是追加、顺序写入的,WAL每个regionserver只有一个,同一个regionserver上所有region写入同一个的WAL文件。
hbase中flush的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Hbase结构、hbase中flush的信息别忘了在本站进行查找喔。