HBase 多列族性能

ps0*_*618 10 apache hadoop hbase nosql

我有 2 个 HBase 表 - 一个有一个列族,另一个有 4 个列族。两个表都由相同的 rowkey 键控,并且列族每个都有一个列限定符,以一个 json 字符串作为值(每个 json 负载大小约为 10-20K)。所有列族都使用 fast-diff 编码和 gzip 压缩。

在向每个表加载大约 60MM 行后,对第二个表中的任何单个列族进行扫描测试所需的时间是从第一个表中扫描单个列族的时间的 4 倍。请注意,对第二个表的扫描使用 addFamily 将扫描限制为仅 1 个列族,并且两个测试都精确地扫描 1MM 行 - 因此两种情况下的净工作负载(以及性能预期)应该相同。但是,测试显示第二个表与第一个表中的任何列族的时间为 4 倍。即使在两个表上运行一次主要压缩后,性能也没有太大变化。

尽管 HBase 文档和其他技术论坛建议每个表使用的列族不超过 1 个,但到目前为止我没有读过任何内容表明扫描性能会根据列族的数量线性下降。有没有其他人经历过这种情况,对此是否有简单的解释?

需要注意的是,第二个表有 4 个列族的原因是,即使我现在一次只扫描一个列族,也有要求在给定一组行键的情况下从该表中扫描多个列族。

感谢您对性能问题的任何见解。

int*_*oid 2

如果我的情况正确的话,这是正常行为。由于每个列族代表 RegionServer 上的一个单独的 Store,因此访问多个 Store 需要更多时间。

您可以将扫描限制为特定列族,并 addFamily在扫描对象上使用。