您的位置:首页 > 其它

HBase分享系列(2)--写入细节

2015-08-04 16:10 281 查看

写入细节



写入过程

flush: MemStore->StoreFile

compaction:合并StroreFile->更大的StroreFile

split:一个region->两个region

用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。

一、flush

1.启动

后台线程检测,间隔时间=hbase.server.thread.wakefrequency

size>设定值 ( hbase.hregion.memstore.flush.size)

2.其他影响因素

(1)单regionserver的memstore最大值

hbase.regionserver.global.memstore.upperLimit

(2)超过最大值,则强制flush

单regionserver的memstore最小值

hbase.regionserver.global.memstore.lowerLimit

强制flush,<时停止

Hlog数量大于默认值

hbase.regionserver.maxlogs

Hlog大小大于大于默认值

hbase.regionserver.hlog.blocksize*

hbase.regionserver.logroll.multiplier

(3).META.先flush

用户表先检查再flush

二、compaction

1.minor

(1)局部

(2)达到条件就压缩

(3)不会删除数据

2.major

Major操作是对Region下的HStore下的所有StoreFile执行合并操作,最终的结果是整理合并出一个文件。

(1)全局

(2)有间隔时间,默认一天

(3)会删除数据

(4)可以禁用

(5)1 Store -> 1StroeFile

3.启动

(1)达到检查周期

局部检查周期=hbase.regionserver.thread.splitcompactcheckfrequency

全局周期=hbase.hregion.majorcompaction

(2)Store里StoreFile数量达到设定值,设定值=hbase.hstore.compactionThreshold

三、split

1.启动

(1)达到检查周期

检查周期=hbase.regionserver.thread.splitcompactcheckfrequency

(2)Store里StoreFile大小超过设定值

设定值=hbase.hregion.max.filesize

2.过程

(1)设置状态

(2)关闭compaction&&flush

(3)来一次flush

(4)关闭列族

(5)关闭表

(6)新建两个daughter region

(7)offline parent

(8)online daughters

(9)minor compaction

3.例外

超过限定值,但是与上次写入数据是同一行

4.建议

关闭自动split,手动split
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: