【问题标题】:Optimizing write performance of a 3 Node 8 Core/16G Cassandra cluster优化 3 Node 8 Core/16G Cassandra 集群的写入性能
【发布时间】:2016-04-08 20:03:33
【问题描述】:
我们设置了一个 3 节点性能集群,每个集群具有 16G RAM 和 8 个内核。我们的用例是将 100 万行写入具有 101 列的单个表中,当前写入操作需要 57-58 分钟。优化集群写入性能的第一步应该是什么?
【问题讨论】:
标签:
optimization
cassandra
spark-cassandra-connector
【解决方案1】:
我要做的第一件事是查看正在执行写入的应用程序:
- 应用程序是用什么语言编写的,它使用什么驱动程序?一些驱动程序可以提供比其他驱动程序更好的固有性能。即 Python、Ruby 和 Node.js 驱动程序可能只使用一个线程,因此可能需要考虑运行应用程序的多个实例(每个内核 1 个)。您的问题被标记为“spark-cassandra-connector”,这可能表明您正在使用它,它使用 datastax java 驱动程序,它应该作为单个实例运行良好。
- 您的写入是异步的还是一次写入一个数据?它同时执行多少次写入?过多的并发写入可能会给 Cassandra 带来压力,但不会有太多的并发写入会降低吞吐量。如果您使用的是 spark 连接器,您是在使用
saveToCassandra/saveAsCassandraTable 还是其他?
- 您是否使用批处理?如果是,您每批插入/更新多少行?太多的行可能会给 cassandra 带来很大的压力。此外,您的所有插入/更新是否都在一个批次中进入同一个分区?如果它们不在同一个分区中,您应该考虑将它们批量处理。
- 特定于 Spark 连接器:您可以调整写入设置,例如批量大小、批量级别(即按分区或按副本集)、每个内核的写入吞吐量(以 mb 为单位)等。您可以查看所有这些设置here。
我要看的第二件事是查看每个单独节点上 cassandra 端的指标。
- 垃圾收集指标是什么样的?您可以通过取消注释 conf/cassandra-env.sh (As shown here) 中的行来启用 GC 日志。 Are Your Garbage Collection Logs Speaking to You?。您可能需要调整您的 GC 设置,如果您使用 8GB 堆,默认值通常非常好。
- 您的 CPU 和磁盘利用率是否表明您的系统负载过重?您的硬件或配置可能会限制您的能力Selecting hardware for enterprise implementations
-
nodetool cfhistograms 和 nodetool proxyhistograms 等命令将帮助您了解您的请求需要多长时间(代理直方图),而 cfhistograms(尤其是延迟)可以让您深入了解处理请求所需时间之间的任何其他可能差异与执行变异操作。