hbase-indexer solr numFound与hbase表行大小不同

时间:2016-05-17 05:34:26

标签: hadoop solr hbase phoenix

最近我的团队在CDH上使用hbase-indexer将hbase表列索引到solr。当我们部署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 Web UI来计算solr索引大小:

numFound : 4060479

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

2 个答案:

答案 0 :(得分:4)

我的理解:

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中(我们在其中一个实现中做了什么)

答案 1 :(得分:0)

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

由于hbase-indexer导致solr numfound与hbase表行数不同的原因是错误的 删除某些行而不是插入它们。我们根据hbase-indexer指标发现了这种情况: https://github.com/NGDATA/hbase-indexer/wiki/Metrics

我们使用jconsole来观看jmx指标数据并找到:

indexer删除count = hbase表行数 - solr numfound

最后我们调试了hbase-indexer源代码并发现一些代码会导致这个问题,也许是关于hbase-indexer的问题,请参阅:https://github.com/NGDATA/hbase-indexer/issues/78