北京网站技术开发公司,怎样连接服务器,网站优化的意义,营销型 网站开发1. region split机制
HRegionServer拆分region的步骤是#xff0c;先将该region下线#xff0c;然后拆分#xff0c;将其子region加入到hbase:meta表中#xff0c;再将他们加入到原本的HRegionServer中#xff0c;最后汇报Master。
split前#xff1a;hbase:meta表有…1. region split机制
HRegionServer拆分region的步骤是先将该region下线然后拆分将其子region加入到hbase:meta表中再将他们加入到原本的HRegionServer中最后汇报Master。
split前hbase:meta表有: region_p 在region_p对应的hdfs目录下生成.splits目录用于保存分割后的region信息如tablename/region_p/.splits 关闭region_p数据写入并触发flush操作将写入region的数据全部持久化到磁盘。 在region_p对应的.splits目录下创建两个子目录并在里面创建两个子region的引用文件。
.split引用文件目录tablename/region_p/.splits/region1/region1引用文件 splitkey, truetablename/region_p/.splits/region2/region2引用文件 splitkey, false
引用文件用于记录从哪分割splitkey和是上半部分true还是下半部分false region_p 分裂为两个子region后将.split目录下的region1、region2 的目录 copy 到region_p的同级目录下形成两个新的region。
tablename目录结构tablename/region_p/.splitstablename/region1/cf/region1引用文件splitkey, truetablename/region2/cf/region2引用文件splitkey, false
把region_p在hbase:meta表标记下线和split把两个子region添加到hbase:mate表。
locationsplitofflinesplitregion_p/xxxx/xxxx/xxxx/truetrueregion1,region2region1/xxxx/xxxx/xxxx/falsefalseregion2/xxxx/xxxx/xxxx/falsefalse 开启两个子region可以接收请求了。此时还没有拉取region_p split的数据。 当region发生major compact时会把父region的split数据拉取到子region并和当前的子region进行合并,子region拉取完数据后把引用文件删除。 hbase会启动线程检查父region是否达到删除的条件如果达到就删除父region。
删除条件父region的元数据是split状态and所有子region下的引用文件已删除。
2. region split策略
可以通过设置RegionSplitPolicy的实现类来指定拆分策略RegionSplitPolicy类的实现类有
ConstantSizeRegionSplitPolicyIncreasingToUpperBoundRegionSplitPolicyDelimitedKeyPrefixRegionSplitPolicyKeyPrefixRegionSplitPolicy
DisabledRegionSplitPolicy // 不拆分
其中
ConstantSizeRegionSplitPolicy(一刀切)【0.94前】
当一个region中最大store大小大于设置阈值hbase.hregion.max.filesize 默认10G就会触发切分每10s检查一次region大小,hbase.server.thread.wakefrequency10000。
设置阈值大些对大表友好但对小表并不友好可能小表不会分裂如果阈值小些对小表友好但对大表并不友好可能会大量分裂
IncreasingToUpperBoundRegionSplitPolicy【0.94-2.0】
默认使用的拆分策略Region的前几次拆分的阈值不是固定的数值是需要进行计算得到当同一table在同一regionserver上的region数量在[0,100)之间时按照如下的计算公式算否则按照ConstantSizeRegionSplitPolicy策略计算
Min (R^3 hbase.hregion.memstore.flush.size2, hbase.hregion.max.filesize) R为同一个table中在同一个regionserver中region的个数 hbase.hregion.memstore.flush.size默认为128M hbase.hregion.max.filesize默认为10G
第一次分裂 1*1*1*128*2256M
第二次分裂8*128*2 2G
第三次分裂 27*128*2 6.75G
SteppingSplitPolicy【2.x版本】
这种策略和IncreasingToUpperBoundRegionSplitPolicy策略很相似但更简单第一个Region容量的上限为256M之后都是10G这个策略考虑到IncreasingToUpperBoundRegionSplitPolicy会多拆分几个Region(256M - 2G - 6.75G - 10G)所以进行了简化。