hbase—时间序列数据如何在集群中均匀分布?

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

我将hbase表的行键设计如下:

<clustering-prefix><yyyyMMdd><type><uid>

其中,集群前缀是一个两位数的字符串,允许我通过将事件分组到集群中,将一天的负载分散到整个集群中。
我还使用splits\u file子句创建了表,其拆分顺序如下:

002015010
012015010
022015010
032015010
042015010
...
992015010
012015011
022015011
...

考虑到数据是时间序列的,这允许并行地将负载发送到100个区域,具有相当好的性能。
不幸的是,我注意到许多将被并行填充的区域(日部分是相同的)由同一个区域服务器托管。例如:

002015010 -> region_server_01 *
012015010 -> region_server_02
022015010 -> region_server_01 *
032015010 -> region_server_06**
042015010 -> region_server_03
052015010 -> region_server_01 *
062015010 -> region_server_06**

理想情况下,如果我有100个区域服务器,我希望以这样一种方式分配区域,即具有不同集群前缀(前两位数字)的区域尽可能由不同的区域服务器托管。
我尝试在splits\u文件中更改区域拆分的顺序,但行为没有改变。
此类行的原因与读写要求有关:
write:一天中具有不同集群前缀的事件在到达时将被并发地写入
阅读:经过一段时间后,spark作业应该批量处理在某个日期范围内接收到的具有相同集群前缀的事件
问题
有没有办法配置hbase(assignmentmanager?)为不同的区域服务器分配不同的集群前缀?
似乎赋值过程的行为在默认情况下是随机的。

q3qa4bjr

q3qa4bjr1#

仅在设置分割时使用盐:

create 't1', 'f1', {SPLITS => ['01', '02', '03', '04' ... '99']}

以00开头的行键。。。。将被分配到区域1
以01开头的行键。。。。将被分配到区域2
从02开始的行键。。。。将被分配到区域3
等等。。。hbase负载均衡器将根据负载(分配给每台服务器的区域数)负责跨区域服务器的区域分布
顺便说一句,你的例子有9个字符,根据你说的,他们应该是10(2盐+8日期)。

相关问题