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
Функция хороша, но не всегда лучший выбор (например, если у вас много данных), однако для этого вы можете проверить некоторые настройки тайм-аута в Кассандре
Документы здесь также показывают настройку времени ожидания страницы, которая может вам помочь.
Перемещение данных между двумя кластерами может быть выполнено рядом других способов. Вы можете использовать любое из следующего:
- Sstableloader
- Один из драйверов, таких как драйвер Java
- Использование spark для копирования данных из одного кластера в другой, как в этом примере
- Использование OpsCenter для клонирования кластера
- Кассандровый загрузчик (я знал, что многие люди использовали это)
Конечно, № 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("..")