hbase-indexer solr numFound 不同于 hbase table 行大小

hbase-indexer solr numFound different from hbase table rows size

最近我的团队在 CDH 上使用 hbase-indexer 将 hbase table 列索引到 solr 。当我们部署 hbase-indexer 服务器(称为 Key-Value Store Indexer)并开始测试时。我们发现一种情况,hbase table 和 solr 索引之间的行大小不同:

我们使用 Phoenix 来统计 hbase table 行:

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

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

并且我们使用 Solr Web UI 来计算 solr 索引大小:

numFound : 4060479

我们无法从 hbase-indexer 日志和 solr 日志中找到任何错误日志。但是 hbase table 和 solr 索引之间的行大小真的不同!有没有人遇到这种情况?我不知道该怎么做

我的理解:

Hbase rowcount - Solr rowcount(numfound) = 缺失记录

4084355 - 4060479 = 23876(在 Hbase 中存在,在 Solr 中缺失)

Key-Value Store Indexer 服务使用 Lily HBase NRT Indexer 为添加到 HBase 表中的记录流编制索引。

NRT 适用于增量数据而不是整个数据。

根据我的经验,这些是可能的原因:

1) NRT 最初有效,如果突然 NRT 无效(由于某些健康问题),则可能存在数字差异。

2) 如果在将记录插入 HBASE 时关闭 WAL(可能...出于性能原因),NRT 在 WAL(预写日志)上工作,NRT 将无法工作。

可能的解决方案: 1)删除Solr文件,从Hbase中重新加载数据到Solr。 Hbase 批量索引器,您可以 运行 整个数据(批量索引器不​​适用于增量数据,它适用于整个数据集)

2) 作为数据流管道的一部分,编写一个 map-reduce 程序将数据插入到 solr 中。(我们在我们的一个实现中所做的)

好的,我们最近解决了这个问题。

solr numfound与hbase不一样的原因table行数是hbase-indexer出错造成的 删除某些行而不是插入它们。我们根据 hbase-indexer 指标发现了这种情况: https://github.com/NGDATA/hbase-indexer/wiki/Metrics

我们使用 jconsole 查看 jmx 指标数据并发现:

indexer deletes count = hbase table row count - solr numfound

最后调试到hbase-indexer的源码,发现部分代码会导致这个问题,可能是hbase-indexer的问题,请看:https://github.com/NGDATA/hbase-indexer/issues/78