Как настроить соединитель Spark-Cassandra для подключения к кластеру Cassandra в Kubernetes

Мы получаем довольно низкую производительность записи при использовании разъема Spark-Cassandra, когда Cassandra находится на k8s. Для ясности — мы пытаемся написать DF с 1,3 млрд уникальных ключей (около 30 ГБ) с 16 исполнителями, каждый с 4 ядрами и 16 ГБ памяти. у нас есть кластер Cassandra из 5 узлов (коэффициент репликации = 2), где таблица Cassandra выглядит так:

      CREATE TABLE <tablename> (hashed_id text PRIMARY KEY, timestamp1 bigint, timestamp2 bigint)

Написание заняло около 8 часов....

Пример кода того, как мы пишем DataFrame в Cassandra:

      df
.write
.format("org.apache.spark.sql.cassandra")
.mode("overwrite")
.option("confirm.truncate", "true")
.options(table=tablename, keyspace=cassandra_keyspace)
.save()

Недавно мы начали использовать Cassandra и решили, что она будет развернута в Kubernetes. Мы запускаем несколько ETL в Spark, которые нужно писать напрямую в Cassandra.

Наша установка:

  • Cassandra (4.0) развернута на k8 с использованием оператора K8ssandra (1.6), за входом трафика (без TLS)

  • Spark (3.2) развернут на «голом железе» ETL в Pyspark с использованием spark-cassandra-connector_2.12-3.2.0 .

Я ищу любую ссылку о том, как настроить разъем зажигания для использования всех узлов в таком случае. Я предполагаю, что происходит то, что соединитель может «видеть» только входной адрес и получать внутренние IP-адреса для других узлов. мы хотим следовать приведенным здесь примерам, но не уверены, как можно настроить разъем зажигания для использования таких конфигураций...

1 ответ

Есть два вопроса,

  1. Почему запись занимает больше времени?
  2. Мне не очень понятно, какую роль SCC играет в проникновении K8.

Чтобы ответить на вопрос №1,

  • spark.cassandra.connection.resolveContactPointsкогда установленоtrue(По умолчанию) Определяет, нужно ли нам разрешать точки контакта при запуске (истина) или при повторном подключении (ложь). Полезно для использования с Kubernetes или другими системами с динамическими конечными точками, которые могут меняться во время работы приложения. Убедитесь, что вы не установили его вfalse.
  • spark.cassandra.coonection.host- Указанные здесь хосты будут использоваться в качестве начальной точки контакта с кластером C*. Получив первоначальное соединение, он обнаружит всю топологию кластера.

Параметры конфигурации SCC доступны здесь. Вы можете настроиться наWrite Tuning Parametersто есть те, которые начинаются сspark.cassandra.output.*. Кроме того, убедитесь, что ваш кластер C* имеет правильный размер (например, характеристики оборудования, модель данных и т. д.) для эффективной работы.

Другие вопросы по тегам