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