合并存储在 HDFS 中的 Solr 索引不起作用

问题描述 投票:0回答:1

我正在尝试使用 org/apache/lucene/misc/IndexMergeTool 将两个 Solr 核心索引合并到新索引中。

所有索引都保存在 HDFS 的 /apps/solr/data/collection_name/data/index 路径下。

所以我创建了一个新集合,例如 col_new,并且我正在尝试合并 col_1:core_1 和 core_2。

我使用的是以下:

“”” java -cp /usr/cloudera-hdp-solr/5.0.0.5-301/cloudera-hdp-solr/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-7.4.0.jar: /usr/cloudera-hdp-solr/5.0.0.5-301/cloudera-hdp-solr/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-misc-7.4.0.jar org/apache/ lucene/misc/IndexMergeTool -destDir hdfs://namenode/path_to_new_core/data/index -srcDir hdfs://namenode/path_to_old_core_1/data/index hdfs://namenode/path_to_old_core_2/data/index ”“”

行为很奇怪。它创建一个名为 hdfs: 的文件夹以及另外两个名为 -srcDir 和 -destDir 的文件夹。

有人有合并共享文件系统上保存的索引的经验吗?

其他详情:

  • Solr 版本 7.4
  • HDP v3
  • Lucene 5.0.0

谢谢。

solr lucene hdfs hdp
1个回答
0
投票

问题可能出在IndexMergeTool读写索引文件的目录类型上。 我不确定所有版本,但最后一个版本使用 FSDirectory 访问文件。

FSDirectory
有一些实现,但它们都适用于本地文件系统,而不适用于 HDFS。要访问HDFS,应该使用
HdfsDirectory

看起来

IndexMergeTool
无法帮助您合并存储在HDFS上的文件,但您可以使用
HDFSDirectory
实现自己的合并:

val part1 = HdfsDirectory(Path("path-to-part1"), hdfsConfig)
val part2 = HdfsDirectory(Path("path-to-part2"), hdfsConfig)
val output = HdfsDirectory(Path("output-path"), hdfsConfig)

IndexWriter(output, IndexWriterConfig()).use {
    it.addIndexes(part1)
    it.addIndexes(part2)
}

还需要注意的是,如果索引中有大量文件,直接写入 HDFS 可能会产生性能问题。有时在本地合并索引然后将结果索引复制到 HDFS 可能会很快。

© www.soinside.com 2019 - 2024. All rights reserved.