Как настроить соединитель 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 ответ
Есть два вопроса,
- Почему запись занимает больше времени?
- Мне не очень понятно, какую роль SCC играет в проникновении K8.
Чтобы ответить на вопрос №1,
-
spark.cassandra.connection.resolveContactPoints
когда установленоtrue
(По умолчанию) Определяет, нужно ли нам разрешать точки контакта при запуске (истина) или при повторном подключении (ложь). Полезно для использования с Kubernetes или другими системами с динамическими конечными точками, которые могут меняться во время работы приложения. Убедитесь, что вы не установили его вfalse
. -
spark.cassandra.coonection.host
- Указанные здесь хосты будут использоваться в качестве начальной точки контакта с кластером C*. Получив первоначальное соединение, он обнаружит всю топологию кластера.
Параметры конфигурации SCC доступны здесь. Вы можете настроиться наWrite Tuning Parameters
то есть те, которые начинаются сspark.cassandra.output.*
. Кроме того, убедитесь, что ваш кластер C* имеет правильный размер (например, характеристики оборудования, модель данных и т. д.) для эффективной работы.