我有一个由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,
即拆分后,没有连续的地域去同一台服务器上控制同一台服务器上的负载。
发布于 2012-06-19 18:29:52
我假设你说的服务器是指RegionServer。区域是随机分配给regions的,所以如果集群足够大,这种情况应该不会发生(或者应该很少发生)。这个想法是,你不应该为此而烦恼。另外,要知道regionserver只是数据的网关。它依赖HDFS来获取实际数据,而数据来自何处是由HDFS决定的。
此外,即使连续的区域最终由相同的RS提供服务,您也应该能够使用多线程来更快地获取数据。HBase已经在内部为每个region AFAIK运行了单独的线程。通常,它不会导致太多的负载。你有没有注意到,由于这个原因,实际上存在过多的负载?你有没有做过分析,看看是什么导致了负载?
因此,实际上不需要这样做,但在特殊情况下,您可以使用HBaseAdmin.move
方法来实现这一点。您可以编写一些代码来使用HTable.getRegionLocations()
遍历表的所有区域,根据起始键对区域进行排序,并手动(using HBaseAdmin.move()
)确保所有连续的区域都位于不同的区域服务器上。但我强烈怀疑这是否真的是一个问题,我建议您在使用此方法之前确认这一点。
https://stackoverflow.com/questions/11077228
复制相似问题