白色咖啡通过本文主要向大家介绍了架构,读书笔记,hbase等相关知识,希望本文的分享对您有所帮助
region拆分的条件满足以下任何一条时做split拆分操作:
- 当region储存文件大于配置项
hbase.hregion.max.filesize
- 当region储存文件大于列族层面配置的大小
拆分过程非常迅速。其大致过程为:HBase创建两个引用文件,然后在后台执行compaction操作替换掉被引用的文件。假设要拆分的region文件路径为/hbase/testtable/b095f2f8eaaf945bcfdd453eeaf83447/colfam1/6630747383202842155
,以下是拆分的详细过程:
- 创建文件夹:
/hbase/testtable/b095f2f8eaaf945bcfdd453eeaf83447/splits
- 关闭region
b095f2f8eaaf945bcfdd453eeaf83447
,不再接受新的请求 - 在
splits
目录中创建子region的文件,此文件包含的信息仅有:拆分的key、上半部分还是下半部分,被称为reference文件。包括:splits/新的regionA/新的随机数A.b095f2f8eaaf945bcfdd453eeaf83447
和splits/新的regionB/新的随机数B.b095f2f8eaaf945bcfdd453eeaf83447
。可以看到文件名是父region作为后缀。 - 上一步如果成功完成,则将上面两个文件夹
splits/新的regionA
和splits/新的regionB
移动到/hbase/testtable
中 - 将父region标记为正在拆分
- 启动两个子region,更新meta表,添加两个子region
- 两个子region启动compaction操作,从父region读取数据重新构建子region的文件。
- 当compaction操作做完之后,父region相关数据全部被删除
参考资料: http://blog.csdn.net/javaman_chen/article/details/48048315
http://blog.csdn.net/weihongrao/article/details/17297303
http://blog.csdn.net/weihongrao/article/details/17281991