我有一个 Hbase(v 0.94.19,带有 Hadoop 1.2.1),它由一台主机和两台区域服务器组成。每台区域服务器有 16 GB 的堆(6.4 GB 的缓存、4.0 GB 的内存存储)和 1.6 TB(2 X 800 GB)的 SSD 磁盘空间。只有一个表,它只有一个列系列,预先分割成 128 个区域(00 - ff)。键是一个 32 字节的十六进制字符串,值平均长度为 800 - 900 字节。更新率约为每秒 3k - 5k 个项目,其中约 20% 是新条目。Hadoop 复制因子设置为 2。其余的 Hadoop 和 Hbase 配置都是默认的。
我在此设置上运行了一个读取基准测试(它实际上不是基准测试,而是我自己的代码),它通过 Java Hbase 接口读取随机(但有效)条目。每次读取平均需要 30 - 40 毫秒,在我看来,这很不寻常。此外,随着每个区域中存储文件数量的增加,此读取时间会增加,并且在我进行主要压缩后再次下降。即使在主要压缩之后,两个区域服务器也始终将 Hbase 块局部性索引报告为 0。
我的问题是 - 有人看到我在这里犯了什么明显的错误吗?增加每个区域服务器中的磁盘数量(例如,如果我切换到 4 X 400 GB)是否有助于减少读取延迟?是否有任何 SSD 优化(例如过度配置)可能会有所帮助?最后,什么可能导致块局部性索引始终为 0?
如果您需要更多信息,请询问我。谢谢。