【问题标题】:How to build distribute search base on hadoop and lucene如何在hadoop和lucene上建立分布式搜索库
【发布时间】:2013-12-08 02:44:14
【问题描述】:

我正准备用 lucence 和 hadoop 制作分布式搜索模块,但对某些东西感到困惑:

  1. 众所周知,hdfs是一个分布式文件系统,当我把一个文件放到hdfs上时,文件会被分成几个块存储在claster的不同从机中,但是如果我使用lucene来写hdfs上的索引,我想看看每台机器上的索引,如何实现?

  2. 我已经阅读了一些 hadoop/contrib/index 和一些 katta,但不理解“分片,看起来像索引的一部分”的概念,它存储在一台计算机的本地磁盘上还是集群中只有一个方向分布?

感谢提前

【问题讨论】:

  • 请您重写最后一句“集群中只有一个方向分布”吗?

标签: hadoop lucene katta


【解决方案1】:

-至于你的问题1:

您可以实现 Lucene“目录”接口以使其与 hadoop 一起使用,并让 hadoop 处理您提交给它的文件。您还可以提供自己的“IndexWriter”和“IndexReader”实现,并使用您的 hadoop 客户端来编写和读取索引。这样,您可以更好地控制要编写的索引的格式。您可以通过 lucene/hadoop 实现“查看”或访问每台机器上的索引。

-对于你的问题 2:

分片是索引的子集。当您运行查询时,所有分片都会同时处理,并且所有分片上的索引搜索结果都会合并。在集群的每台机器上,您都将拥有索引的一部分:一个分片。因此,索引的一部分将存储在本地机器上,但在您看来,它就像一个分布在集群中的单个文件。

我还可以建议您查看分布式搜索 SolrCloudhere 它作为索引/搜索引擎在 Lucene 上运行,并且已经使您能够拥有聚集索引。它还提供了一个 API,用于将文件提交到索引和查询索引。也许这对您的用例来说已经足够了。

【讨论】:

  • 感谢您的启发性回答。您能否分享更多关于如何设计自定义 lucene 编写器和使用 mapreduce 在 HDFS 上生成索引的信息?
  • 我们可以。在那之后我停止了这个项目的工作。所以我还没有真正进入这个领域。但我很高兴我几天前又重新开始了。我已经可以告诉你,我决定不为此目的使用 hadoop 和 hdfs。原因是 mapreduce 旨在为某些原始数据提供结果。粗略地说:您不会在存储文档之前对其进行索引。搜索集群时,您可以在 map/reduce 方法中处理所有内容。我决定用 cassandra 替换 hadoop,这是一个 p2p 数据库,其中数据已经以聚合方式存储,您的查询具有良好的性能。
  • Cassandra 是一个行键/值存储。非常适合搜索索引。如果您想了解更多信息,可以查看“lucandra”项目。作者决定使用 IndexWriter/Reader 方法,您可以看到他是如何实现自定义编写器和读取器的。我们也可以保持联系,因为我每周只监控这个项目几个小时。
  • 我以前从未听说过这些项目,将检查它们。谢谢你的信息,你真的很善良!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2011-03-29
  • 1970-01-01
相关资源
最近更新 更多