分析&回答
HBase将整个切分过程包装成了一个事务,意图能够保证切分事务的原子性。整个分裂事务过程分为三个阶段:prepare – execute – (rollback)
整个region切分是一个比较复杂的过程,涉及到父region中HFile文件的切分、两个子region的生成、系统meta元数据的更改等很多子步骤,因此必须保证整个切分过程的事务性,即要么切分完全成功,要么切分完全未开始,在任何情况下也不能出现切分只完成一半的情况。
Region
Region相当于一个数据的分片。每一个Region都有起始rowkey和结束rowkey,这表示了Region存储的row范围。
一个RegionServer包含多个Region,一个表的一段键值在一个RegionServer上会产生一个Region。在一个RegionServer中有一个或多个Region。
RowKey在Region中的作用:在HBase 中,Region 相当于一个数据的分片,每个 Region 都有StartRowKey和StopRowKey,这是表示 Region 存储的 RowKey 的范围,HBase 表的数据是按照 RowKey 来分散到不同的 Region,要想将数据记录均衡的分散到不同的Region中去,因此需要 RowKey 满足这种散列的特点。
此外,在数据读写过程中也是与RowKey 密切相关,RowKey在读写过程中的作用:读写数据时通过 RowKey 找到对应的 Region;MemStore 中的数据是按照 RowKey 的字典序排序;HFile 中的数据是按照 RowKey 的字典序排序。
hbase中数据rowkey在region中表现形式如下图:
喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!