Пакетная запись Spark в Cassandra: Spark-Cassandra-Connector против SSTableLoader (массовый загрузчик Cassandra) - PullRequest
1 голос
/ 18 июня 2020

Мы используем Datastax Spark-Cassandra-Connector для записи в кластер Cassandra, развернутый в кластере, отличном от Spark.

Мы наблюдали массовую загрузку, т.е. ~ 500M записей, наши записи выполняются в течение (~ 1 часа), и производительность чтения снижается во время записи. Хотя производительность записи довольно хороша, это неприемлемо в нашей среде, так как некоторые запросы чтения являются критическими и всегда должны отвечать в определенные c временные рамки.

Я прочитал статью о SSL Table Пример использования загрузчика , который, похоже, решает ту же проблему с помощью SSLTableLoader ( CassandraBulkLoader ).

Я также прочитал несколько вопросов SO, например этот , в котором упоминается запись может быть очень медленной с SSLTableLoader по сравнению с spark-cassandra-connector.

Теперь, какова основная причина, которая делает spark-cassandra-connector быстрее, но вызывает низкую задержку чтения при массовой загрузке? Кроме того, есть ли у SSLTableLoader другие недостатки, кроме медленной?

1 Ответ

0 голосов
/ 18 июня 2020

Это нормально - если вы пишете данные с максимально возможной скоростью, это создает нагрузку на дисковую систему, и ваши чтения становятся медленнее. Помимо простой записи данных на диск, вам необходимо учитывать дополнительную нагрузку на систему ввода-вывода из-за таких вещей, как уплотнение. Также возможно, что ваша пропускная способность уплотнения не очень хороша, и из-за этого у вас может быть запаздывание уплотнения, и это может привести к дополнительной задержке чтения из-за слишком большого количества стабильных файлов.

В этом нет необходимости использовать sstableloader для загрузки данных. Вы можете просто настроить параметры записи, чтобы Spark не перегружал ваши узлы. Это может включать, например, следующие параметры :

  • spark.cassandra.output.concurrent.writes - уменьшить до 2 или 3 вместо 5 по умолчанию - это увеличит время загрузки, но должно уменьшить нагрузку к серверам
  • возможно настроить spark.cassandra.output.throughputMBPerSec, но я бы предложил начать с предыдущего варианта.

Другим вариантом массовой загрузки данных может быть DataStax DSBulk, который может загружать данные из CSV и JSON файлов . По умолчанию он также пытается загрузить данные как можно быстрее, но имеет параметры для управления пропускной способностью .

...