我们如何在所有区域服务器上均匀分配地址
How we distribute addresses evenly on all region servers
目前我们有一个行键是:MAC+REVERSED_TS
这里的问题是,所有正在进行的 mac DHCP 询问的地址都在一个区域服务器中,但是 hbase 有 3 个节点。
想知道我们如何将这些 mac 地址公平地分布在所有区域服务器上,并避免仅在一个区域服务器上进行处理
我看到 Salting 似乎是一种策略,有人对此有解决方案吗?
加盐的工作原理如下:每当您创建一个行键时,您手动在前面添加一个 0-9 之间的随机数(例如)2+MAC+REVERSED_TS
.
然后你确保你的 HBase table 在这些数字上被分割:
create 'mac-records','a', SPLITS=> ['1', '2', '3', '4', '5', '6', '7', '8', '9']
您需要根据集群的大小更改拆分(例如,如果您只有三个节点,那么您将进行三个拆分)。
不利之处在于,每当您想要检索 MAC 地址时,您都必须 运行 十次查询,因为您不知道它位于哪个存储桶中。这应该不会影响性能,如果你 运行 同时十个。例如,您 运行:
scan 'mac-records', { FILTER => "PrefixFilter('0+MAC')"}
scan 'mac-records', { FILTER => "PrefixFilter('1+MAC')"}
scan 'mac-records', { FILTER => "PrefixFilter('2+MAC')"}
...
scan 'mac-records', { FILTER => "PrefixFilter('9+MAC')"}
这可以防止 hotspotting 因为数据将写入您所有的区域服务器。
目前我们有一个行键是:MAC+REVERSED_TS
这里的问题是,所有正在进行的 mac DHCP 询问的地址都在一个区域服务器中,但是 hbase 有 3 个节点。
想知道我们如何将这些 mac 地址公平地分布在所有区域服务器上,并避免仅在一个区域服务器上进行处理
我看到 Salting 似乎是一种策略,有人对此有解决方案吗?
加盐的工作原理如下:每当您创建一个行键时,您手动在前面添加一个 0-9 之间的随机数(例如)2+MAC+REVERSED_TS
.
然后你确保你的 HBase table 在这些数字上被分割:
create 'mac-records','a', SPLITS=> ['1', '2', '3', '4', '5', '6', '7', '8', '9']
您需要根据集群的大小更改拆分(例如,如果您只有三个节点,那么您将进行三个拆分)。
不利之处在于,每当您想要检索 MAC 地址时,您都必须 运行 十次查询,因为您不知道它位于哪个存储桶中。这应该不会影响性能,如果你 运行 同时十个。例如,您 运行:
scan 'mac-records', { FILTER => "PrefixFilter('0+MAC')"}
scan 'mac-records', { FILTER => "PrefixFilter('1+MAC')"}
scan 'mac-records', { FILTER => "PrefixFilter('2+MAC')"}
...
scan 'mac-records', { FILTER => "PrefixFilter('9+MAC')"}
这可以防止 hotspotting 因为数据将写入您所有的区域服务器。