3

我有一个 5 节点的 HBase 集群,并且主要有获取顺序数据的输入请求。

为了优化存储,我在高负载区域上运行了手动区域分割,但它并没有优化太多,因为它分割了区域,但主要是在同一个区域服务器上。

如何以这种方式控制区域分割

r-1(k1 to k2) on server s1,
r-2(k2 to k3) on server s2,
r-3(k3 to k4) on server s3,
r-4(k4 to k5) on server s4,
r-5(k5 to k6) on server s5,
r-6(k6 to k7) on server s1,

即拆分后,没有连续的区域进入同一台服务器来控制同一台服务器上的负载。

4

1 回答 1

0

我假设服务器是指 RegionServer。区域是随机分配的区域服务器,所以如果你的集群足够大,这种情况不应该发生(或者应该很少发生)。这个想法是你不应该为此烦恼。另外,请了解 regionserver 只是数据的网关。它依赖 HDFS 来获取实际数据,而数据的来源由 HDFS 决定。

此外,即使连续区域最终由同一个 RS 提供服务,您也应该能够使用多线程来更快地获取数据。HBase 已经在内部为每个区域 AFAIK 运行了一个单独的线程。通常,它不会导致过多的负载。您是否看到实际上因此导致负载过大?您是否进行了任何分析以查看导致负载的原因?

所以,确实应该没有必要这样做,但在特殊情况下,你可以使用HBaseAdmin.move方法来实现这一点。您可以使用 编写一些代码来遍历表的所有区域HTable.getRegionLocations(),根据开始键对区域进行排序,并手动 ( using HBaseAdmin.move()) 确保所有连续区域位于单独的区域服务器上。但我强烈怀疑这实际上是一个问题,我建议您在采用这种方法之前确认这一点。

于 2012-06-19T10:29:52.253 回答