Тайм-аут Кассандра Гектор

Я начал работать с Кассандрой. Поэтому я загрузил cassandra (1.1.1) на свой компьютер с Windows и запустил его. Все работает нормально. Таким образом, я начал переопределять старое приложение (в java с использованием hector 1.1), которое импортирует около 200 000 000 для 4 таблиц, которые должны быть вставлены в 4 семейства столбцов. После импорта около 2 000 000 записей я получаю исключение тайм-аута, и кассандра не отвечает на запросы:

2012-07-03 15:35:43,299 WARN  - Could not fullfill request on this host CassandraClient<localhost:9160-16>
2012-07-03 15:35:43,300 WARN  - Exception: me.prettyprint.hector.api.exceptions.HTimedOutException: TimedOutException()
....
Caused by: TimedOutException()
at org.apache.cassandra.thrift.Cassandra$batch_mutate_result.read(Cassandra.java:20269)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_batch_mutate(Cassandra.java:922)
at org.apache.cassandra.thrift.Cassandra$Client.batch_mutate(Cassandra.java:908)
at me.prettyprint.cassandra.model.MutatorImpl$3.execute(MutatorImpl.java:246)
at me.prettyprint.cassandra.model.MutatorImpl$3.execute(MutatorImpl.java:243)
at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:103)
at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:258)

Последние записи в файле журнала:

INFO 15:35:31,678 Writing Memtable-cf2@678837311(7447722/53551072 serialized/live bytes, 262236 ops)
INFO 15:35:32,810 Completed flushing \var\lib\cassandra\data\keySpaceName\cf2\keySpaceName-cf2-hd-205-Data.db (3292685 bytes) for commitlog position ReplayPosition(segmentId=109596147695328, position=131717208)
INFO 15:35:33,282 Compacted to [\var\lib\cassandra\data\keySpaceName\cf3\keySpaceName-cf3-hd-29-Data.db,].  33.992.615 to 30.224.481 (~88% of original) bytes for 282.032 keys at 1,378099MB/s.  Time: 20.916ms.
INFO 15:35:33,286 Compacting [SSTableReader(path='\var\lib\cassandra\data\keySpaceName\cf4\keySpaceName-cf4-hd-8-Data.db'), SSTableReader(path='\var\lib\cassandra\data\keySpaceName\cf4\keySpaceName-cf4-hd-6-Data.db'), SSTableReader(path='\var\lib\cassandra\data\keySpaceName\cf4\keySpaceName-cf4-hd-7-Data.db'), SSTableReader(path='\var\lib\cassandra\data\keySpaceName\cf4\keySpaceName-cf4-hd-5-Data.db')]
INFO 15:35:34,871 Compacted to [\var\lib\cassandra\data\keySpaceName\cf4\keySpaceName-cf4-hd-9-Data.db,].  4.249.270 to 2.471.543 (~58% of original) bytes for 30.270 keys at 1,489916MB/s.  Time: 1.582ms.
INFO 15:35:41,858 Compacted to [\var\lib\cassandra\data\keySpaceName\cf2\keySpaceName-cf2-hd-204-Data.db,].  48.868.818 to 24.033.164 (~49% of original) bytes for 135.367 keys at 2,019011MB/s.  Time: 11.352ms.

Я создал 4 семейства столбцов, например:

ColumnFamilyDefinition cf1 = HFactory.createColumnFamilyDefinition(
“keyspacename”,
“cf1”,
ComparatorType.ASCIITYPE);

Семейства столбцов имеют следующее количество столбцов:

  1. 16 столбцов
  2. 14 столбцов
  3. 7 столбцов
  4. 5 столбцов

Пространство ключей создается с коэффициентом репликации 1 и стратегией по умолчанию (простой). Я вставляю записи (строки) с помощью «Mutator#AddInsertion».

Любые советы, чтобы избежать этого исключения?

С уважением ВМ


person Wolf-Dieter    schedule 03.07.2012    source источник
comment
Это много данных, которые нужно вставить в один узел на вашем рабочем столе. Похоже, вы страдаете от процесса уплотнения. Если вы запустите это в реальном кластере (т.е. 3+ машины с RF=2), я сомневаюсь, что вы увидите эту проблему.   -  person rs_atl    schedule 03.07.2012
comment
Я создал новую среду, как описано ниже. Та же проблема   -  person Wolf-Dieter    schedule 04.07.2012
comment
Можете ли вы опубликовать код, который делает вставки?   -  person rs_atl    schedule 04.07.2012
comment
Я также столкнулся с исключением тайм-аута при извлечении данных из базы данных Cassandra.   -  person Rahul Patel    schedule 03.06.2016


Ответы (1)


Это исключение, по сути, Кассандра, говорящая, что она достаточно сильно отстает от мутаций, поэтому она не будет выполнять ваши запросы до истечения времени их ожидания. Предполагая, что ваш компьютер не зверь, вам, вероятно, следует ограничить свои запросы. Я предлагаю немного поспать после перехвата этого исключения, а затем повторить попытку; нет ничего плохого в том, чтобы случайно написать одну и ту же строку дважды, и Cassandra должна довольно быстро наверстать упущенное.

Если бы вы работали в производственной среде, я бы более внимательно рассмотрел другие причины низкой производительности узла.

person Tyler Hobbs    schedule 03.07.2012
comment
Мой компьютер A имеет 4 ядра, 8 ГБ оперативной памяти. Я добавил 2 ПК B и C (каждый 2 ядра, 4 ГБ оперативной памяти) в кластер и изменил коэффициент репликации на 2. Повторный импорт имеет тот же результат. После возникновения исключения я подождал 10 минут и открыл командную строку cassandra. Выполнение описания кластера приводит к тому, что машина A недоступна. - person Wolf-Dieter; 04.07.2012
comment
Я создал новую среду. 3 ПК по 4 ядра и 8 Гб оперативной памяти. Моя программа работает на другом ПК. Внутри программы я ловлю исключение и добавляю задержку и повторяю попытку вставки. - person Wolf-Dieter; 04.07.2012
comment
Похоже, процессу Cassandra либо не хватает места в куче, либо ОС убивает его, чтобы освободить память. Я не специалист по Windows, поэтому не знаю, как проверить второй случай, но вы должны увидеть что-то в журналах, если ему не хватает места в куче. - person Tyler Hobbs; 05.07.2012
comment
Я понял. Я изменил уровень журнала сервера на DEBUG и получил исключение org.apache.thrift.transport.TTransportException: Cannot read. Remote side has closed. Tried to read 4 bytes, but only got 0 bytes.. После запуска cassandra в linux все работает (кроме исключения нехватки памяти) работает нормально. - person Wolf-Dieter; 05.07.2012