HBase场景优化之regions过多、region过⼤
# Regions过多优化
通过OGG接⼊⼤量⼩表或者某些场景下,会出现HBase集regions“过多”的情况,在某集上有看到不到10个节点的集
,regions将近1万,其中⼀张不到1TB的表,有将近4000个region。
meta大裁员
⼀般情况下,单个region的⼤⼩建议控制在5GB以内,可以通过参数hbase.hregion.max.filesize来设置,单个regionserver下的regions个数控制在200个以内。regions过多会导致集不堪重负、regionserver 频繁FullGC的情况,进⽽影响集的稳定性甚⾄上层的应⽤服务。
对于数据体量⽐较⼤,regions确实⽐较多的情况,建议对集进⾏扩容;对于因使⽤不当导致regions“过多”的情况,建议对regions进⾏合并操作,具体如下:
hbase> splitormerge_switch 'MERGE',true
hbase>splitormerge_switch 'SPLIT',true
hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME'
需要注意的是,该⽅式为相邻region进⾏两两合并,对于regions⽐较⼤的表,需要反复操作多次,两次merge时间间隔建议在10分钟,同时merge后可能会出现Region-In-Transition(hole,region之间有间隙的问题)出现的话,修复下即可。
# 单个Region过⼤
在预分region的同时rowkey设计不合理,往往会将数据写⼊到某个region或者某⼏个region的情况,导致单个region有⼏⼗GB+以上的情况,对集的稳定性和性能会有影响,此时有两种优化⽅案:其⼀是重新设计下rowkey,重⼊数据,当然代价会⽐较⼤;另外⼀种⽅案是对现存的⽐较⼤的region进⾏split,可以通过60010管理页⾯将选中的region name放⼊split框中,点击split即可;对于预分时考虑不周,未有数据写⼊的region,可以进⾏merge操作;
# RIT问题处理
Regions In Transition问题在集运维过程中⽐较常见,处理起来⼀般会⽐较累。出现问题后⼀般是先执⾏ hbase hbck分析下是什么问题,⼤多时候可以通过 hbase hbck -repair 进⾏修复。通过管理页⾯也可以看到有哪些表出现了RIT问题,针对这些表逐个进⾏修复。常⽤的修复命令如下
1.hbase hbck 检查输出所以ERROR信息,每个ERROR都会说明错误信息。
2.hbase hbck -fixTableOrphans 先修复tableinfo缺失问题,根据内存cache或者hdfs table ⽬录结构,重新⽣成tableinfo⽂件。
3.hbase hbck -fixHdfsOrphans 修复regioninfo缺失问题,根据region⽬录下的hfile重新⽣成regioninfo⽂件。
4.hbase hbck -fixHdfsOverlaps 修复region重叠问题,merge重叠的region为⼀个region⽬录,并从新⽣成⼀个regioninfo。
5.hbase hbck -fixHdfsHoles 修复region缺失,利⽤缺失的rowkey范围边界,⽣成新的region⽬录以及regioninfo填补这个空洞。
6.hbase hbck -fixMeta 修复meta表信息,利⽤regioninfo信息,重新⽣成对应meta row填写到meta表中,并为其填写默认的分配regionserver。
7.hbase hbck -fixAssignments 把这些offline的region触发上线,当region开始重新open 上线的时候,会被重新分配到真实的RegionServer上 , 并更新meta表上对应的⾏信息。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。