Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过拆分区域实现HBase负载平衡_Java_Hadoop_Hbase - Fatal编程技术网

Java 通过拆分区域实现HBase负载平衡

Java 通过拆分区域实现HBase负载平衡,java,hadoop,hbase,Java,Hadoop,Hbase,我有一个由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

我有一个由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,

也就是说,在拆分之后,没有连续的区域转到同一台服务器来控制同一台服务器上的负载。

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

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


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

您为什么认为这会导致问题?默认情况下,loadbalancer每5分钟运行一次,并围绕区域移动/拆分区域以均衡集群负载。这应该足够了。然后由HDFS负责集群之间的分布。感谢Raze2dust的回复。!在同一个区域服务器上拥有连续区域的唯一问题是-在请求顺序数据时,由于超过base.regionserver.handler.count的限制,需要花费更多的时间&一些请求进入等待状态。例如:在默认负载平衡后,我注意到区域的分布类似于S4上的-r-1,S1上的r-2,S1上的r-3,S2上的r-4,S2上的r-5,S2上的r-6,S3上的r-7,s5上的r-8,…&现在,每个区域的请求/秒数几乎相同。但是,位于区域r-4到r-6之间的获取数据的新请求完全依赖于单个服务器S-2。我如何控制区域分布,使连续的区域不会进入同一服务器。谢谢汉克斯,我会试试的。是的,我在运行协处理器时看到了单个区域服务器上的负载&我还增加了堆大小和区域服务器处理程序计数,但仍有一些请求进入等待状态。如果某些连续区域位于不同的区域服务器上,则等待时间将缩短。当同一个请求触发如此多次(约100次)时,就会发生这种情况。