Hbase练习3

1、简述一下region的寻址流程

以 get 'tablename' 为例
1. 访问zookeeper获取meta表的位置
2. 访问meta表,在其中找到需要查询的表对应的region名称和位置信息
3. 通过获取的region名称和位置信息,直接访问region
-- 客户端连接zookeeper,查询/hbase/meta-region-server节点,获取hbase:meta表的region的位置(regionserver的ip地址)
-- 紧接着,客户端请求该位置,查询hbase:meta表的数据,获取要操作的表的具体region及其地址。
-- 然后,客户端就会访问该region的regionserver,然后处理(存取)数据。

2、简述一下region的存储机制

1. hbase的存储机制是以region这个逻辑存储单元为存储模型的,region是一张表或者是一张表的一部分。region的名字是有行范围标识的。
2. region中,表的数据被划分为不同的store进行细分存储,每一个store对应一个列族。每一个列族的本质就是hdfs上的一个目录。
3. 写入的数据会进入store里的memstore内存中,在内存中排序(rowkey,column,timestamp排序)。达到阈值时,会进行flush,形成storefile文件(阈值:128M,1小时,内存的40%)
4. storefile可能有多个,当数量达到阈值时,会进行合并。合并时,会真正过滤掉删除的单元格,以及过多的版本号。
5. 当storefile文件越来越大时,达到阈值的10G时,会进行该文件的切分,从而造成了整个region的切分(新生成两个新的region来管理不同范围的rowkey数据1,旧的region下线)


region、store都是内存中的逻辑对象。

-- 1. Flush
	客户端的数据写入内存中,一直到MemStore满了或者达到其他flush条件时,会将MemStore中的数据Flush成一个StoreFile
	
-- 2. Compact
	当storefile的数量越来越多,达到数量的阈值时,会触发Compact合并操作。多个StoreFile合并成一个StoreFile,同是进行版本合并和数据删除
	
-- 3. Split
	由于合并操作,当单个StoreFile大小超过一定的阈值后,会触发region的Split操作。实际上就是新生成两个region来管理和维护旧的region中的数据,旧的region会下线,新的两个region会被HMaster重新分配到相对应的HRegionServer上,这样使得原先的一个region的压力分流到两个region上
1. region是hbase中的表或者是表的一部分,region有自己的rowkey范围。也就是基本的存储结构(存储模型,是内存中的java对象)
2. region管理的数据有两部分,
	- 一部分在内存中,内存中的数据是先按照rowkey字典排序,然后再key字典排序,之后再时间戳降序排序
	- 另一部分是以文件(storefile)的形式存储在hdfs上。文件中的数据从memstore中flush而来,因此也有序,不过文件之间不一定有序
3. region所要管理的数据可能由于单元格过多,或者是意义不同,分为列族进行管理,一个列族对应一个store(也是内存中的对象)
4. 一个store就管理着相同意义的单元格,这些单元格在对应的memstore中存储,但是由于阈值,最终会flush成storefile。
5. storefile的个数越来越多,store(对象)管理着这些文件的索引信息。
6. storefile的个数太多的话,也不好管理,因此会合并机制,合并成一个文件
7. 如果一个storefile过大,region和regionserver的负载不均衡,因此会有切分机制,细节上是切分文件(从某一个rowkey开始切分,文件大小尽可能均分,也可能造成其他的文件的切分),宏观上是region的切分。

3、简述一下Region的读和写流程

读流程
1. client在发送读操作的时候,会通过寻址流程找到对应的region
2. 首先RegionServer先扫描自己的MemStore,如果没有找到数据再扫描BlockCache,如果还没有找到的话,就去StoreFile里面查找数据,最后将这条数据返回给Client
3. 如果从storefile中查询到数据,就会与从写内存中查询到的数据,一起返回给客户端,同时将该文件中的查询到的数据保存读内存中。以便下次访问。

hbase在region里维护了两块内存:
一个是store里的memstore(写内存,主要存储写时的数据)
另一个是blockCache(读内存,用于存储上一次读取到的数据,以便下次更方便读取该数据)

写流程
1. client通过zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据。
2. 数据被写入Region的Memstore,直到MemStore达到预设阈值。
3. MemStore中的数据被Flush成一个StoreFile。
4. 随着StoreFile文件数量的增多,会达到数量的阈值,然后触发Compact进行合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本的合并和数据删除。
5. StoreFiles在不断的Compact合并操作下会达到文件大小的阈值,会触发Split操作,把当前Region Split成2个新的Region。父Region会下线。Split出来的两个新的Region会被HMAster分配到相应的RegionServer上,这样使得原先的一个region的压力分流到两个region上。
-- 写流程
(1) Client通过Zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据。
(2) 数据被写入Region的MemStore,直到MemStore达到预设阈值。
(3) MemStore中的数据被Flush成一个StoreFile。
(4) 随着StoreFile文件的不断增多&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值