跳至主要內容

一百零二、HBase手动拆分区域

安图新大约 2 分钟HBase

手动拆分区域

你可以手动拆分表,无论是在创建表(预拆分)还是稍后作为管理操作。出于以下一种或多种原因,您可能会选择拆分您的区域。可能还有其他有效的原因,但手动拆分表的需求也可能指出您的模式设计存在问题。

手动拆分表格的原因:

  • 您的数据按时间序列或其他类似的算法进行排序,这些算法会在表格末尾对新数据进行排序。这意味着持有最后一个区域的区域服务器始终处于负载状态,而其他区域服务器处于空闲状态,或者大部分空闲状态。
  • 你在表的一个区域开发了一个意想不到的热点。例如,一旦有关于该名人的消息,跟踪网络搜索的应用程序可能会被大量搜索名人所淹没。
  • 在群集中的RegionServers数量大幅增加之后,可以快速扩展负载。
  • 在大批量装载之前,这可能会导致跨区域异常和不均匀的载荷。

DisabledRegionSplitPolicy策略阻止手动区域拆分。

确定分拆分点

手动拆分表格的目标是在单独使用良好的rowkey设计无法达到的情况下,提高跨集群平衡负载的可能性。牢记这一点,你拆分区域的方式非常依赖于数据的特征。这可能是你已经知道拆分你的表的最好方法。如果不是这样,你拆分表的方式取决于你的键是什么样的。

字母数字行键(Alphanumeric Rowkeys)

如果您的行键以字母或数字开头,则可以在字母或数字边界处拆分表格。例如,下面的命令创建一个表,其区域在每个元音处都有拆分,所以第一个区域有AD,第二个区域有EH,第三个区域有IN,第四个区域有OV,第五个区域有UZ。

使用自定义算法

RegionSplitter工具提供了HBase,并使用SplitAlgorithm为您确定拆分点。作为参数,您可以给出算法,所需的区域数量和列族。它包括三个分割算法。首先是 HexStringSplit 算法,它假定行键是十六进制字符串。第二种 DecimalStringSplit 算法是假定行键是00000000到99999999范围内的十进制字符串。第三种 UniformSplit假设行键是随机字节数组。您可能需要开发自己的 SplitAlgorithm,使用提供的模型。

上次编辑于:
贡献者: Andy