hbase—反向域名行键、自动拆分和负载平衡

ig9co6j1  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(402)

我正在设计一个hbase模式,它的行键以域名开头。例如。, com.example.www . 尽管有更多的领域以 .com 而不是说 .org 或者 .edu ,我假设我不必自己管理拆分,我可以依靠hbase的自动拆分来跨区域分布行。i、 例如,区域会随着它们变得太大而分裂。
我应该得到更多以 com. 而不是说 org. 但我想没关系 com. 区域“应该最终分布在我的区域服务器上,对吗?
这里的负载平衡有问题吗?在lars的2011 hbase模式设计视频(链接直接指向感兴趣的部分)中,他讨论了一个模式设计,该模式设计在键的开头也有反向域。视频中说,反向域的md5散列“出于负载平衡的原因”被使用。
我可能错过了什么。。。如果 some.website.com 在我的输入中出现的可能性和 another.website.org ,这难道不意味着每一行命中一个区域(甚至一个区域服务器)和另一个区域服务器的几率一样吗?

dphi5xsq

dphi5xsq1#

hbase通常会在到达hbase.hregion.max.filesize的中点将一个区域拆分为2个(取决于拆分策略)。您可以依靠自动拆分,但由于行键的性质(很多“com”域和很少的“org”域)的不同,您将以奇数和词汇上不均匀的拆分点结束。
这可能不是你的确切情况,但想想这个潜在的问题:
从一个只有1个区域的空表开始,从com开始依次插入145m个域。。以组织结尾。。
在8000万马克(一个虚构的com.nnnn.www)处,该区域在“com.f*”处自动分成2个区域,产生2.4亿个区域,并继续将行写入区域2中
在1.2亿马克(一个虚构的com.yyy.www)处,第二个区域达到最大文件大小,在“com.p*”处分成2.4亿个区域,并继续将行写入区域3。
作业以150m域结束,不再执行拆分。
在这种情况下,区域1和2将分别存储4000万行,而区域3将存储6500万行(在80m处拆分,但可能永远不会达到这个数量)。此外,由于您将始终写入最后一个区域(即使启用了批处理),因此该作业将比同时向多个区域发出批写入操作慢得多。
另一个问题是,假设您意识到还需要添加.us域(1000万个)。根据这种设计,它们将进入区域3,将托管行的数量增加到75m。
确保密钥在区域之间均匀分布的常见方法是在rowkey前面加上密钥md5的几个字符(在本例中是域名)。在hbase中,行键的第一个字节决定了将承载它的区域。
只需预先准备几个md5字符就足以尽可能地防止热插拔(一个区域的写操作过多)并获得良好的自动拆分,但通常建议预先拆分表以确保更好的拆分。
如果你在你的行键上加了2个md5字符,你可以用15个分割点来分割表格:“10”,“20”,“30”。。。直到“e0”。这将创建16个区域,如果其中任何一个区域需要自动拆分,则将在它们的中点进行拆分。i、 e:当从“a0”开始并以“af”结束的区域到达hbase.hregion.max.filesize时,它将被拆分为大约“a8”,每个区域将存储“a”桶的一半。
这是一个示例,说明如果您有16个预拆分区域,其中有2个字符前缀的行键,那么哪些区域将承载每一行:

- Region 1 ---------
0b|com.example4.www
- Region 2 ---------
1b|org.example.www
10|com.example.www
- Region 5 ---------
56|com.example3.www
- Region 10 ---------
96|org.example5.www
- Region 11 ---------
af|com.example5.www
- Region 14 ---------
d5|org.example3.www
db|com.example2.www
de|org.example2.www
- Region 16 ---------
fb|org.example4.www

如果有更多的域,它将变得更加均匀,几乎所有的区域都将存储相同数量的域。
在大多数情况下,有8-16个预分割区域就足够了,但如果没有,您可以选择32个甚至64个预分割区域,直到最多256个(即有“01”、“02”、“03”…)9f”,“a0”,“a1”。。。直至“fe”)

相关问题