如何在hadoop和lucene上构建分布式搜索

时间:2013-12-08 02:44:15

标签: hadoop lucene katta

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

  1. 我们知道,hdfs是一个分发文件系统,当我把文件放到hdfs时,该文件将被分成多个块并存储在claster中的不同奴隶机器中,但是如果我用lucene写的话关于hdfs的索引,我想看看每台机器上的索引,如何实现它?

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

  3. 感谢您提前

1 个答案:

答案 0 :(得分:1)

- 对于你的问题1:

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

- 对于你的问题2:

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

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