hbase-indexer solr numFound отличается от размера строк таблицы hbase

Недавно моя команда использует hbase-indexer на CDH для индексации столбца таблицы hbase для решения. Когда мы развернем сервер hbase-indexer (который называется индексатором хранилища ключей) и начнем тестирование. Мы обнаружили ситуацию, когда размер строк между таблицей hbase и индексом solr отличается:

Мы использовали Phoenix для подсчета строк таблицы hbase:

0: jdbc:phoenix:slave1,slave2,slave3:2181> SELECT /*+ NO_INDEX */  COUNT(1) FROM C_PICRECORD;

+------------------------------------------+
|                 COUNT(1)                 |
+------------------------------------------+
| 4084355                                  |
+------------------------------------------+

И мы используем веб-интерфейс Solr для подсчета размера индекса Solr:

numFound : 4060479

Мы не смогли найти ни одного журнала ошибок из журналов hbase-indexer и solr. Но размер строк между таблицей hbase и индексом solr действительно отличается! Кто-нибудь встречался с такой ситуацией? Я не знаю как это сделать

2 ответа

Решение

Мое понимание:

Hbase rowcount - Solr rowcount (numfound) = пропущенные записи

4084355 - 4060479 = 23876 (которые есть в Hbase и отсутствуют в Solr)

Служба индексатора хранилища ключей-значений использует индексатор Lily HBase NRT для индексации потока записей, добавляемых в таблицы HBase.

NRT работает с инкрементными данными, а не с целыми данными.

Из моего опыта это возможные причины:

1) НЗТ работал изначально, и если внезапно НЗТ не работает (из-за некоторых проблем со здоровьем), то существует вероятность расхождения в цифрах.

2) NRT работает на WAL(запись в журнал записи), если WAL отключен во время вставки записей в HBASE (возможно... по соображениям производительности), NRT не будет работать.

Возможное решение: 1) Удалите документы Solr и заново загрузите данные в Solr из Hbase. Hbase пакетный индексатор, который вы можете запускать для целых данных (пакетный индексатор не будет работать с инкрементными данными, он работает для всего набора данных)

2) Как часть конвейера потока данных, напишите программу уменьшения карты для вставки данных в решение (что мы сделали в одной из наших реализаций)

Хорошо, мы недавно решили проблему.

Причина, по которой solr numfound отличается от количества строк в таблице hbase из-за того, что hbase-indexer делает ошибку, удаляет некоторые строки вместо их вставки. Мы нашли эту ситуацию в соответствии с метриками hbase-indexer: https://github.com/NGDATA/hbase-indexer/wiki/Metrics

Мы используем jconsole для просмотра данных метрик jmx и нашли:

индексатор удаляет счетчик = количество строк в таблице hbase - solr numfound

Наконец, мы отлаживаем исходный код hbase-indexer и обнаруживаем, что какой-то код вызовет эту проблему, возможно, это проблема hbase-indexer, см. https://github.com/NGDATA/hbase-indexer/issues/78

Другие вопросы по тегам