我在 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 而不是扫描和限定符前缀筛选器完成的相同查询要快得多。