Подтвердить что ты не робот

Ошибка таймаута операции Ошибка в консоли cclsh cassandra

У меня есть три узла Cassandra Cluster, и я создал одну таблицу с более чем 2 000 000 строк.

Когда я выполняю этот запрос (select count(*) from userdetails) в cqlsh, я получил эту ошибку:

OperationTimedOut: errors = {}, last_host = 192.168.1.2

Когда я запускаю функцию подсчета для меньшей строки или с ограничением 50 000, она работает нормально.

4b9b3361

Ответ 1

count (*) фактически просматривает все данные. Таким образом, ожидается, что select count(*) from userdetails без ограничения будет тайм-аут с таким количеством строк. Некоторые подробности здесь: http://planetcassandra.org/blog/counting-key-in-cassandra/

Возможно, вам захочется рассмотреть вопрос о сохранении счета, используя Spark, или если вы просто хотите номер шара, вы можете его захватить из JMX.

Чтобы захватить JMX, это может быть немного сложно в зависимости от вашей модели данных. Чтобы получить количество разделов, возьмите org.apache.cassandra.metrics:type=ColumnFamily,keyspace={{Keyspace}},scope={{Table​}},name=EstimatedColumnCountHistogram mbean и суммируйте все 90 значений (это то, что выдает nodetool cfstats). Это даст вам только число, которое существует в sstables, поэтому, чтобы сделать его более точным, вы можете сделать флеш или попытаться оценить число в memtables из MemtableColumnsCount mbean

Ответ 2

Вы также можете увеличить таймаут в команде cqlsh, например:

cqlsh --request-timeout 120 myhost

Ответ 3

Чтобы изменить лимит времени ожидания клиента в Apache Cassandra, существуют два метода:

Техника 1: Измените файл cqlshrc.

Техника 2: Откройте программу cqlsh и измените время, указанное с помощью переменной client_timeout.

Подробнее см. ссылку: https://playwithcassandra.wordpress.com/2015/11/05/cqlsh-increase-timeout-limit/

Ответ 4

если вы используете cqlsh: откройте script в редакторе и найдите все слова "timeout". Измените значение по умолчанию от 10 до 60 и сохраните script.

Ответ 5

Я использую Cassandra 3.4 и cqlsh, чтобы получить количество записей. Похоже, что в версии 3.4 произошел сбой кода. cqlsh просто вызывает cqlsh.py. Внутри cqlsh.py есть переменная DEFAULT_REQUEST_TIMEOUT_SECONDS, которая по умолчанию равна 10 секундам. Я изменил его на 3600 (1 час), и теперь мои запросы SELECT count(*) работают.

Ответ 6

с той же проблемой, что и вы выше, если я делаю подсчет в течение дня, но, как работа, я разделил счет на два запроса (12 часов + 12 часов), например ниже.

cqlsh:jw_schema1> select count(*) from flight_statistics where insert_time >= '2015-08-20 00:00:00' and insert_time <= '2015-08-20 11:59:59' ALLOW FILTERING;

 count
-------
 42528

(1 rows)
cqlsh:jw_schema1> select count(*) from flight_statistics where insert_time >= '2015-08-20 12:00:00' and insert_time <= '2015-08-20 23:59:59' ALLOW FILTERING;

 count
-------
 86580

(1 rows)
cqlsh:jw_schema1>