Hadoop hbase索引器solr numFound与hbase表行大小不同
最近,我的团队正在CDH上使用hbase indexer将hbase表列索引到solr。当我们部署hbase indexer服务器(称为键值存储索引器)并开始测试时。我们发现hbase表和solr索引之间的行大小不同: 我们使用Phoenix对hbase表行进行计数:Hadoop hbase索引器solr numFound与hbase表行大小不同,hadoop,solr,hbase,phoenix,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; +----------------
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索引器日志和solr日志中找到任何错误日志。但是hbase表和solr索引之间的行大小确实不同!有人遇到这种情况吗?我不知道怎么做我的理解是:
Hbase rowcount-Solr rowcountnumfound=缺少记录
4084355-4060479=在Hbase中存在且在Solr中缺失的23876
键值存储索引器服务使用Lily HBase NRT索引器对添加到HBase表中的记录流进行索引
NRT处理的是增量数据,而不是整个数据
根据我的经验,以下是可能的原因:
1 NRT最初工作,如果由于某些健康问题,NRT突然不工作,则可能存在数量差异
如果WAL在尽可能将记录插入HBASE时关闭,则2 NRT在WAL提前写入日志上工作。。出于性能原因,NRT不起作用
可能的解决办法:
1删除Solr文档,并将数据从Hbase新加载到Solr中。
Hbase批处理索引器您可以在整个数据上运行批处理索引器不会处理增量数据,它可以处理整个数据集
2作为数据流管线的一部分,编写map reduce程序将数据插入solr。我们在其中一个实现中所做的工作我的理解:
Hbase rowcount-Solr rowcountnumfound=缺少记录
4084355-4060479=在Hbase中存在且在Solr中缺失的23876
键值存储索引器服务使用Lily HBase NRT索引器对添加到HBase表中的记录流进行索引
NRT处理的是增量数据,而不是整个数据
根据我的经验,以下是可能的原因:
1 NRT最初工作,如果由于某些健康问题,NRT突然不工作,则可能存在数量差异
如果WAL在尽可能将记录插入HBASE时关闭,则2 NRT在WAL提前写入日志上工作。。出于性能原因,NRT不起作用
可能的解决办法:
1删除Solr文档,并将数据从Hbase新加载到Solr中。
Hbase批处理索引器您可以在整个数据上运行批处理索引器不会处理增量数据,它可以处理整个数据集
2作为数据流管线的一部分,编写一个map reduce程序将数据插入到solr中。我们在其中一个实现中所做的是好的,我们最近解决了这个问题 solr numfound与hbase表行计数不同的原因是hbase索引器出错 删除某些行而不是插入它们。我们根据hbase indexer指标发现了这种情况: 我们使用jconsole查看jmx度量数据,发现: 索引器删除计数=hbase表行计数-solr numfound
最后我们调试到hbase indexer源代码中,发现一些代码会导致此问题,可能是hbase indexer的问题,请参阅:好的,我们最近解决了此问题 solr numfound与hbase表行计数不同的原因是hbase索引器出错 删除某些行而不是插入它们。我们根据hbase indexer指标发现了这种情况: 我们使用jconsole查看jmx度量数据,发现: 索引器删除计数=hbase表行计数-solr numfound
最后,我们调试到hbase indexer源代码中,发现一些代码会导致此问题,可能是关于hbase indexer的问题,请参阅:solr中的唯一id是什么。。。?它与hbase…?solr schema.xml中的唯一id与hbase RowKey中的唯一id相同solr…?中的唯一id是什么。。。?它与hbase不同吗…?solr schema.xml中的唯一id与hbase RowKey相同,也许您是对的。在解决方案1中,想象一下这样的场景:hbase数据将每天增加,我们需要hbase indxer不间断地存储索引。如果我们运行batch indexer对整个数据进行批处理,在mapreduce作业期间,可能会出现增量数据,hbase indexer会观察到这种数据吗?这可能会导致solr索引大小与hbase表行大小再次不同?如果是真的,那就太可怕了!嗨,RamPrasad G,最近我们发现了solr的numfound与hbase行数不同的原因。只有当我们的hbase表已创建二级索引时,才会发生这种情况。如果数据表后面没有索引表,则导入数据完成后,solr中的numfound与hbase表行数相同。我在使用jconsole查看hbase索引器指标时发现了这种情况,但我们不知道
现在为什么会发生……也许你是对的。在解决方案1中,想象一下这样的场景:hbase数据将每天增加,我们需要hbase indxer不间断地存储索引。如果我们运行batch indexer对整个数据进行批处理,在mapreduce作业期间,可能会出现增量数据,hbase indexer会观察到这种数据吗?这可能会导致solr索引大小与hbase表行大小再次不同?如果是真的,那就太可怕了!嗨,RamPrasad G,最近我们发现了solr的numfound与hbase行数不同的原因。只有当我们的hbase表已创建二级索引时,才会发生这种情况。如果数据表后面没有索引表,则导入数据完成后,solr中的numfound与hbase表行数相同。我在使用jconsole查看hbase索引器指标时发现了这种情况,但我们不知道为什么会发生这种情况。。。