我正在准备使用lucence和hadoop制作分发搜索模块,但却对某些东西感到困惑:
我们知道,hdfs是一个分发文件系统,当我把文件放到hdfs时,该文件将被分成多个块并存储在claster中的不同奴隶机器中,但是如果我用lucene写的话关于hdfs的索引,我想看看每台机器上的索引,如何实现它?
我已经阅读了一些hadoop / contrib / index和一些katta,但是不明白“分片,看起来像索引的一部分”的想法,它存储在一台计算机的本地磁盘上或者只有一个方向分布在集群中?
感谢您提前
答案 0 :(得分:1)
- 对于你的问题1:
您可以实现Lucene“目录”界面,使其与hadoop一起使用,让hadoop处理您提交给它的文件。您还可以提供自己的“IndexWriter”和“IndexReader”实现,并使用您的hadoop客户端来编写和读取索引。这样,因为您可以更好地控制要编写的索引的格式。您可以通过lucene / hadoop实现“查看”或访问每台计算机上的索引。
- 对于你的问题2:
分片是索引的子集。运行查询时,将同时处理所有分片,并合并所有分片上的索引搜索结果。在群集的每台计算机上,您将拥有索引的一部分:分片。因此,索引的一部分将存储在本地计算机上,但在您看来,就像在群集中分布的单个文件一样。
我还建议您查看分发式搜索SolrCloud或here 它作为索引/搜索引擎在Lucene上运行,并且已经允许您拥有聚簇索引。它还提供了一个API,用于提交索引和查询索引的文件。也许这对你的用例来说已经足够了。