手动拆分区域
你可以手动拆分表,无论是在创建表(预拆分)还是稍后作为管理操作。出于以下一种或多种原因,您可能会选择拆分您的区域。可能还有其他有效的原因,但手动拆分表的需求也可能指出您的模式设计存在问题。
手动拆分表格的原因:
- 您的数据按时间序列或其他类似的算法进行排序,这些算法会在表格末尾对新数据进行排序。这意味着持有最后一个区域的区域服务器始终处于负载状态,而其他区域服务器处于空闲状态,或者大部分空闲状态。
- 你在表的一个区域开发了一个意想不到的热点。例如,一旦有关于该名人的消息,跟踪网络搜索的应用程序可能会被大量搜索名人所淹没。
- 在群集中的RegionServers数量大幅增加之后,可以快速扩展负载。
- 在大批量装载之前,这可能会导致跨区域异常和不均匀的载荷。
该DisabledRegionSplitPolicy
策略阻止手动区域拆分。
确定分拆分点
手动拆分表格的目标是在单独使用良好的rowkey设计无法达到的情况下,提高跨集群平衡负载的可能性。牢记这一点,你拆分区域的方式非常依赖于数据的特征。这可能是你已经知道拆分你的表的最好方法。如果不是这样,你拆分表的方式取决于你的键是什么样的。
字母数字行键(Alphanumeric Rowkeys)
如果您的行键以字母或数字开头,则可以在字母或数字边界处拆分表格。例如,下面的命令创建一个表,其区域在每个元音处都有拆分,所以第一个区域有AD,第二个区域有EH,第三个区域有IN,第四个区域有OV,第五个区域有UZ。
使用自定义算法
RegionSplitter工具提供了HBase,并使用SplitAlgorithm为您确定拆分点。作为参数,您可以给出算法,所需的区域数量和列族。它包括三个分割算法。首先是 HexStringSplit
算法,它假定行键是十六进制字符串。第二种 DecimalStringSplit
算法是假定行键是00000000到99999999范围内的十进制字符串。第三种 UniformSplit
假设行键是随机字节数组。您可能需要开发自己的 SplitAlgorithm
,使用提供的模型。