Hbase-Region-split-policy
hbase-1.0简介
在 HBase 中,Table 被横向划分为 Region,它是一段数据的管理者,Region 被分发到
RegionServer 上进行管理,一个 Region 只被一个 RegionServer
管理,它的数据存储在 HDFS 上,是可以有多个副本的。
也就是说:管理者 (Region) 只有一个,数据有多个副本。
HBase 的以前实现中,当一台 RegionServer
不可用时,需要数十秒甚至数分钟才可以完成发现和恢复工作,在这段时间内,这台
RegionServer 上的 Region 是不可用的。当一个 Region
不可用时,它需要一段时间才可以被其他 RegionServer 接管。
在最新的实现中,一个 Region 可以有多个副本(Region
是数据的管理者,是实际数据的抽象),分布在多个 RegionServer 上。
特点:
- 1.有一个主 Region,多个从 Region。
- 2.只有主 Region 接收写请求,并把数据持久化到 HDFS 上。
- 3.从 Region 从 HDFS 中读取数据并服务读请求。
- 4.从 Region 可能会读到脏数据(主 Region 内存中的数据)。
- 5.读操作可以只读主,或者既可以读主又可读从(可配置)。
这样在主 Region 不可用时,用户仍可以读从 Region
的数据。目前社区在进行的开发:主 Region 异步同步数据到从 Region,从而减少从
Region 缺少的数据量。
Family 粒度的 Flush(减少小文件,优化磁盘 IO,提高读性能 HBASE-10201)
split-compact
1 | hbase.hregion.max.filesize :配置region大小,0.94.12版本默认是10G,region的大小 |
####hbase region####
Compact,Split
- hbase.hregion.memstore.flush.size default:128M
- hbase.hregion.max.filesize (table_att==>MAX_FILESIZE) default:10G
- hbase.hstore.compactionThreshold default:3
- hbase.hregion.majorcompaction default:7day
Merge
- 多个region合并,需要top cluster
1
hbase org.apache.hadoop.hbase.util.Merge <table_name> <region1> <region2>
- 多个region合并,需要top cluster
Scan cache
- block cache default:hfile.block.cache.size=0.4
- bloom filter
Hbase访问数据时Compact,Split带来的问题
- region offline,mapper访问region识别
调整参数控制Compact,Split
- hbase.hregion.majorcompaction
- 真的设置为0就行了?
- hbase.hstore.compactionThreshold
- Region中文件个数多于此值,开始compact
- 可能进入minor,合并较小StoreFile
- hbase.hregion.memstore.flush.size
- memstore何时写入HStore
- hbase.hregion.max.filesize (table_att==>MAX_FILESIZE)
- Region何时开始split
hbase.hstore.blockingStoreFiles
- max.filesize < flush.size*blockingStoreFiles以保证region不会被block
有两种类型的紧缩:次紧缩和主紧缩。minor紧缩通常会将数个小的相邻的文件合并成一个大的。Minor不会删除打上删除标记的数据,也不会删除过期的数据,Major紧缩会删除过期的数据。有些时候minor紧缩就会将一个store中的全部文件紧缩,实际上这个时候他本身就是一个major压缩。对于一个minor紧缩是如何紧缩的,可以参见ascii diagram in the Store source code.
在执行一个major紧缩之后,一个store只会有一个sotrefile,通常情况下这样可以提供性能。注意:major紧缩将会将store中的数据全部重写,在一个负载很大的系统中,这个操作是很伤的。所以在大型系统中,通常会自己Section 2.8.2.8, “管理 Splitting”。
紧缩 不会 进行分区合并。参考 Section 14.2.2, “Merge” 获取更多合并的信息。
offpeak hour
规定在集群不繁忙的时候hbase做自动split,Compact,比如凌晨1
2
3
4
5
6
7配置项 默认值 含义
hbase.hstore.compaction.ratio 1.2F
hbase.hstore.compaction.ratio.offpeak 5.0F 与下面两个参数联用
hbase.offpeak.start.hour -1 设置hbase offpeak开始时间[0,23]
hbase.offpeak.end.hour -1 设置hbase offpeak结束时间 [0,23]
http://www.binospace.com/index.php/in-depth-understanding-of-the-hbase-compaction/merge
1
hbase org.apache.hadoop.hbase.util.Merge <tablename> <region1> <region2>
- hbase.hregion.majorcompaction
案例
1 | hbase.hregion.majorcompaction default:7 ==> |
获取region详细信息
1 | scan 'hbase:meta', {COLUMNS => 'info:regioninfo'} |
hbase snappy
1 | snappy hbase 结果>> |