Cassandra CQLSH OperationTimedOut error= Тайм-аут запроса клиента. См. Session.execute[_async](время ожидания)

Я хочу перенести данные из одного кластера кассандры (достигнут через 192.168.0.200) в другой кластер кассандры (достиг через 127.0.0.1). Данные имеют 523 строки, но каждая строка составляет около 1 МБ. Я использую команду COPY FROM и COPY TO. Я получаю следующую ошибку при выполнении команды COPY TO:

Error for (8948428671687021382, 9075041744804640605):
OperationTimedOut - errors={
'192.168.0.200': 'Client request timeout. See Session.execute[_async](timeout)'},
last_host=192.168.0.200 (will try again later attempt 1 of 5).

Я устал менять ~/.cassandra/cqlshrc подать в:

[connection]
client_timeout = 5000

Но это не помогло. Спасибо за вашу помощь

5 ответов

Решение

Не ясно, какую версию Cassandra вы используете здесь, поэтому я собираюсь принять 3.0.x

COPY Функция хороша, но не всегда лучший выбор (например, если у вас много данных), однако для этого вы можете проверить некоторые настройки тайм-аута в Кассандре

Документы здесь также показывают настройку времени ожидания страницы, которая может вам помочь.

Перемещение данных между двумя кластерами может быть выполнено рядом других способов. Вы можете использовать любое из следующего:

  1. Sstableloader
  2. Один из драйверов, таких как драйвер Java
  3. Использование spark для копирования данных из одного кластера в другой, как в этом примере
  4. Использование OpsCenter для клонирования кластера
  5. Кассандровый загрузчик (я знал, что многие люди использовали это)

Конечно, № 3 и № 4 нуждаются в Кассандре DSE, но это просто, чтобы дать вам представление. Я не был уверен, используете ли вы Apache Cassandra или Datastax Enterprise Cassandra.

В любом случае, надеюсь, это поможет!

Вы можете увеличить время ожидания запроса (по умолчанию: 10 секунд), а не время ожидания подключения.

Пытаться:

cqlsh --request-timeout=6000

или добавить:

[connection]
request_timeout = 6000

на ваш ~/.cassandra/cqlshrc файл.

Что касается времени ожидания копирования, правильным способом является использование параметра PAGETIMEOUT, как уже указывалось.

скопировать keyspace.table в '/dev/null' WITH PAGETIMEOUT=10000;

Попытка установить --request-timeout=6000 с помощью cqlsh не помогает в этой ситуации.

Привет кроме следующего,

1. Проверьте надгробия
В надгробных плитах кассандры снижается производительность операций чтения, и возникает следующая проблема. OperationTimedOut: errors={'127.0.0.1': 'Тайм-аут запроса клиента. Смотрите Session.execute_async'}, last_host=127.0.0.1
Заметка
Когда мы вставляем данные в таблицу с нулевыми значениями в столбцах, это создает надгробия. нам нужно избегать нулевых вставок внутри таблицы.
Доступно несколько вариантов, таких как unset ( https://docs.datastax.com/en/latest-csharp-driver-api/html/T_Cassandra_Unset.htm) и ignoreNulls ( https://github.com/datastax/spark-cassandra-connector/blob/master/doc/5_saving.md) свойство в искре.
Вы можете проверить состояние таблицы с помощью следующей команды
таблица таблиц nodetool keyspace1.tablename

2. Удалить надгробия
Если вы работаете на одном узле, вы можете удалить надгробия, изменив свою таблицу ALTER table keyspace1.tablename WITH gc_grace_seconds = '0';

3.read_request_timeout_in_ms: настройте значение в файле cassandra.yaml, чтобы увеличить время ожидания для запроса на чтение.

Если кому-то нужно увеличить время ожидания по умолчанию в клиенте Python Cassandra :

      cas_cluster = Cluster(..)
cas_session = cas_cluster.connect(cas_keyspace)

cas_session.default_timeout = 60 # default is 10 sec.

cas_query_resultset = cas_session.execute("..")
Другие вопросы по тегам