5

我们已经设置了 5 个节点的 Bigtable 集群,GCP 控制台声明它应该支持 50K QPS @ 6ms 的读写。

我们正在尝试加载一个包含约 50 个字段的大型数据集(约 8 亿条记录),其中主要包含数字数据和一些短字符串。键是 11 位数字字符串。

当通过 HBase API 从 GCE 中的单个客户端 VM 加载此数据集时,我们观察到在将每个字段放入单独的列时高达 4K QPS。我们使用单个 HBase 连接和多个线程 (5-30) 执行 10K 记录的批量放置。

将所有字段组合成单个列(Avro 编码,每条记录约 250 字节)时,使用批量 put 的写入性能提高到 10K QPS。并发线程数似乎不会影响 QPS。当每个线程使用单独的 HBase 连接时,写入性能提高到 5 个线程的 20K QPS。

客户端 VM 与 Bigtable 集群位于同一可用区,并且在负载期间几乎处于空闲状态,因此看起来瓶颈不在客户端。

问题:

  1. 从我们的测试来看,写入 QPS 似乎随着插入的列数而降低。这是预期的吗?如何量化这种关系?(顺便说一句,如果Bigtable 性能文档中提到了这一点,那就太好了)。
  2. 为了实现声明的写入 QPS,我们可能缺少什么?我的理解是每个集群节点都应该支持 10K 写入 QPS,但是似乎我们要针对具有单个 HBase 连接的单个节点,并且仅针对具有多个 HBase 连接的 2 个节点。
4

2 回答 2

1

BufferedMutator在带有 OpenSSL 和 Java8 的 0.2.3-SNAPSHOT 中,在 4 个 CPU 机器上为小 (1KB) 突变提供 22-23K QPS,在 32 CPU 机器上提供高达 90K 的 QPS。0.2.2 给出 10K-12K QPS。打开单个 HBase 连接以获得最佳性能。

注意 - 删除了关于 OpenSSL 的注释,因为它现在是默认设置

有关其他信息,请参阅https://github.com/GoogleCloudPlatform/cloud-bigtable-client

于 2016-01-22T01:04:10.093 回答
1

回答第二个问题:通过从批处理 HBase Put 切换到mutators,我们设法达到了超过 50K QPS 。我们仍在使用多个 HBase 连接,单个连接似乎仅限于单节点吞吐量。

于 2016-01-21T20:23:34.603 回答