加速HBase读取响应

加速HBase读取响应,hbase,benchmarking,database-performance,latency,ycsb,Hbase,Benchmarking,Database Performance,Latency,Ycsb,我在Amazon XLarge实例(16Gb RAM,4核CPU)上部署了4个节点的HBase v0.90.4-cdh3u3群集,其中8Gb堆-Xmx分配给区域服务器,2Gb分配给数据节点。HMaster\ZK\Namenode位于单独的XLarge实例上。目标数据集是1亿条记录(每条记录是10个字段乘以100字节)。从并行的100个线程同时执行基准测试 与YCSB团队在他们的中取得的成就和表现相比,我对自己得到的读取延迟感到困惑。他们实现了高达7000次/秒的吞吐量,延迟为15毫秒(第10页,

我在Amazon XLarge实例(16Gb RAM,4核CPU)上部署了4个节点的HBase v0.90.4-cdh3u3群集,其中8Gb堆-Xmx分配给区域服务器,2Gb分配给数据节点。HMaster\ZK\Namenode位于单独的XLarge实例上。目标数据集是1亿条记录(每条记录是10个字段乘以100字节)。从并行的100个线程同时执行基准测试 与YCSB团队在他们的中取得的成就和表现相比,我对自己得到的读取延迟感到困惑。他们实现了高达7000次/秒的吞吐量,延迟为15毫秒(第10页,读取延迟图)。在90%的读取/10%的写入工作负载下,我无法获得高于2000 ops/sec的吞吐量。在禁用自动提交的情况下,写入速度非常快(几毫秒内响应),而读取延迟平均不低于70毫秒 以下是我使用的一些HBase设置:

  • hbase.regionserver.handler.count=50
  • hfile.block.cache.size=0.4
  • hbase.hregion.max.filesize=1073741824
  • hbase.regionserver.codecs=lzo
  • hbase.hregion.memstore.mslab.enabled=true
  • hfile.min.blocksize.size=16384
  • hbase.hregion.memstore.block.multiplier=4
  • hbase.regionserver.global.memstore.upperLimit=0.35
  • hbase.zookeeper.property.maxClientCnxns=100

您建议查看哪些设置\tune以加快HBase的读取速度?

升级到较新的稳定版本会有所帮助。任何0.92+版本都会有更新的HFile v2,这非常有用

  • 0.94已经发布,并且有一些点版本
  • 如果您更喜欢CDH构建,请使用基于0.92.1的HBase
在启用bloom过滤器的情况下创建表预拆分确实有帮助。 我会尽量减少一点处理程序的数量


70毫秒的读取延迟与我的预期相差甚远。查看gc调优,确保您的所有RegionServer都在运行,并且您尝试对表进行基准测试的区域都在运行。

这不是一个直接的答案。我建议您设置
Ganglia
来监控HBase的性能。您可以按照说明进行操作


一旦有了这些指标,您就可以确定系统的瓶颈并针对它执行一些调整。

要正确地对HBase进行基准测试是非常困难的。您还应该提供一些有关您正在使用的查询的信息

例如,在HBase中,即使仅重新修改一行(在RowFilter中指定),带有RowFilter和限定符PrefierPrefixFilter的扫描查询也可能非常慢

但是,使用get而不是扫描和限定符PrefierXFilter完成相同的查询要快得多