加速 HBase 读取响应



我在 Amazon XLarge 实例(16Gb RAM,4 核 CPU)上部署了 4 个节点 HBase v0.90.4-cdh3u3 集群,其中 8Gb 堆 -Xmx 分配给 HRegion 服务器,2Gb 分配给数据节点。HMaster\ZK\Namenode 位于单独的 XLarge 实例上。目标数据集为 1 亿条记录(每条记录为 10 个字段 x 100 字节)。从并行 100 个线程同时执行基准测试。

我对我得到的读取延迟感到困惑,与 YCSB 团队在他们的 YCSB 论文中取得的成就和展示相比。他们实现了高达 7000 次操作/秒的吞吐量,延迟为 15 毫秒(第 10 页,读取延迟图表)。在 90% 的读取/10% 写入工作负载上,我无法获得高于 2000 操作/秒的吞吐量。禁用自动提交(几毫秒内响应)时写入速度非常快,而读取延迟平均不会低于 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 构建,CDH 4.1 具有基于 0.92.1 的 HBase。

在启用布隆过滤器的情况下创建预拆分表确实会有所帮助。我会尝试稍微减少处理程序的数量。http://archive.cloudera.com/cdh4/cdh/4/hbase/book.html#perf.handlers

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

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

获得指标后,您可能能够识别系统的瓶颈并对其执行一些调整。

很难对

HBase进行基准测试。您还应该提供有关您正在使用的查询的一些信息。

例如,在 HBase 中,即使只重新修订一行(在 RowFilter 中指定),使用 RowFilter 和限定符前缀筛选器的扫描查询也可能非常慢。

但是,使用 get 而不是扫描和限定符前缀筛选器完成的相同查询要快得多。

最新更新