Optimization 优化3节点8核/16G Cassandra群集的写入性能

Optimization 优化3节点8核/16G Cassandra群集的写入性能,optimization,cassandra,spark-cassandra-connector,Optimization,Cassandra,Spark Cassandra Connector,我们已经建立了一个3节点的性能集群,每个集群有16G RAM和8个内核。我们的用例是将100万行写入到一个包含101列的表中,目前写操作需要57-58分钟。优化集群写入性能的第一步应该是什么?我要做的第一件事是查看执行写入的应用程序: 应用程序是用什么语言编写的,它使用什么驱动程序?一些驱动程序可以提供比其他驱动程序更好的固有性能。即Python、Ruby和NoDE.js驱动程序只能使用一个线程,因此运行应用程序的多个实例(每个内核1个)可能是一个需要考虑的问题。您的问题被标记为“spark c

我们已经建立了一个3节点的性能集群,每个集群有16G RAM和8个内核。我们的用例是将100万行写入到一个包含101列的表中,目前写操作需要57-58分钟。优化集群写入性能的第一步应该是什么?

我要做的第一件事是查看执行写入的应用程序:

  • 应用程序是用什么语言编写的,它使用什么驱动程序?一些驱动程序可以提供比其他驱动程序更好的固有性能。即Python、Ruby和NoDE.js驱动程序只能使用一个线程,因此运行应用程序的多个实例(每个内核1个)可能是一个需要考虑的问题。您的问题被标记为“spark cassandra connector”,这可能表明您正在使用它,它使用datastax java驱动程序,该驱动程序应该与单个实例一样运行良好
  • 您的写入是异步的还是一次只写入一个数据?它并发执行多少次写操作?过多的并发写入可能会给Cassandra带来压力,但并发写入不会降低吞吐量。如果您使用的是火花连接器,您使用的是
    saveToCassandra
    /
    saveascandratable
    还是其他什么
  • 你在使用批处理吗?如果是,则每批插入/更新多少行?太多的争吵会给卡桑德拉带来很大的压力。此外,您的所有插入/更新是否都将在一个批处理中转到同一分区?如果它们不在同一个分区中,则应该考虑对它们进行分批处理。
  • 特定于Spark Connector:您可以调整写入设置,如批大小、批级别(即按分区或副本集)、以mb为单位的每个核心的写入吞吐量等。您可以查看所有这些设置
  • 我要看的第二件事是每个节点上cassandra端的度量

  • 垃圾收集指标是什么样子的?您可以通过取消conf/cassandra-env.sh()中的行注释来启用GC日志。您可能需要调整GC设置,如果您使用的是8GB堆,那么默认值通常相当不错
  • 您的cpu和磁盘利用率是否表明您的系统负载过重?您的硬件或配置可能会限制您的功能
  • nodetool cfhistograms
    nodetool proxyhistograms
    这样的命令将帮助您了解请求所用的时间(proxyhistograms)和cfhistograms(特别是延迟时间)可以让您深入了解处理请求与执行变异操作所需时间之间的任何其他可能差异