【问题标题】:hbase-indexer solr numFound different from hbase table rows sizehbase-indexer solr numFound 与 hbase 表行大小不同
【发布时间】:2016-05-17 05:34:25
【问题描述】:

最近我的团队在 CDH 上使用 hbase-indexer 将 hbase 表列索引到 solr 。当我们部署 hbase-indexer 服务器(称为 Key-Value Store 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 索引之间的行大小确实不同!有没有人遇到这种情况?我不知道该怎么做

【问题讨论】:

  • solr 中的唯一 ID 是什么...?它与 hbase 有什么不同...?
  • solr schema.xml中的唯一id与hbase rowkey一致

标签: hadoop solr hbase phoenix


【解决方案1】:

我的理解:

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

4084355 - 4060479 = 23876(在 Hbase 中有,在 Solr 中没有)

键值存储索引器服务使用 Lily HBase NRT 索引器来索引添加到 HBase 表的记录流。

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

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

1) NRT 最初起作用,如果突然 NRT 不起作用(由于某些健康问题),则可能存在数量差异。

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

可能的解决方案: 1) 删除 Solr 文档并将数据从 Hbase 新加载到 Solr。 Hbase 批处理索引器,您可以在整个数据上运行(批处理索引器不会对增量数据起作用,它适用于整个数据集)

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

【讨论】:

  • 也许你是对的。在您的解决方案 1) 中,想象这个场景:hbase 数据每天都会增加,我们需要 hbase-indxer 不间断地存储索引。如果我们运行批处理索引器来批处理整个数据,在 mapreduce 作业期间,可能会出现增量数据,并且这种数据将被 hbase-indexer 观察到?这可能会导致 solr 索引大小与 hbase 表行大小再次发生差异?如果是真的,那就太可怕了!
  • 嗨,RamPrasad G,最近我们找到了 solr 的 numfound 与 hbase 行数不同的原因。仅当我们的 hbase 表已创建 phoenix 二级索引时才会发生。如果数据表后面没有索引表,则导入数据完成后,solr中的numfound与hbase表行数相同。我发现这种情况是使用 jconsole 观察 hbase-indexer 指标https://github.com/NGDATA/hbase-indexer/wiki/Metrics 但我们不知道为什么会发生这种情况......
【解决方案2】:

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

由于hbase-indexer出错导致solr numfound与hbase表行数不同的原因 删除某些行而不是插入它们。我们根据 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

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 2017-06-09
    • 2015-08-03
    • 2016-02-05
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多