Hbase并发使它变慢

时间:2014-05-30 05:11:56

标签: hadoop hbase

我有1个主服务器和5个区域服务器,每个服务器有200 GB的磁盘空间和16 GB的RAM。我在HBase中创建了一个包含1000万条记录的表。我在hadoop 2上使用hbase-0.96版本。

表名 - sh_self_profiles

列系列 - 个人资料

在此表中,每行有30列。 当我从HBase获得单个列值时,大约需要10毫秒。我的问题是,当我达到100个或更多并发请求时,时间慢慢累积并增加到超过400毫秒而不是仅在10毫秒内完成。当线性命中100个请求时,每个请求仅需10毫秒。

2 个答案:

答案 0 :(得分:1)

您应该检查的一件事是桌子的分布情况。

您可以通过转到HBase主Web控制台http://:60010来执行此操作,您将能够看到您的表有多少个区域。如果您没有对表创建做任何特殊操作,则可以轻松地只有一个或两个区域,这意味着所有请求都将定向到单个区域服务器。

如果是这种情况,您可以使用预分割区域重新创建表格(我建议使用5的倍数,例如15或20),并确保您正在进行的并发获取的内容均匀分布行键空间。

另外,请检查您为区域服务器分配了多少RAM - 您可能需要将其从默认值中增加。如果你没有在这些机器上运行HBase Region Sever以外的任何其他设备,你可能会增加到8GB内存。

除此之外,您还可以调整hbase.regionserver.handler.count的默认值。

我希望这会有所帮助。

答案 1 :(得分:0)

您使用的是哪个客户?您使用的是标准Java客户端,Thrift客户端,HTTP REST客户端还是其他什么?如果您的用例是单列值的大量随机读取,我强烈建议您尝试asynchbase,因为它比标准的同步Java客户端快得多。