2013-12-08 46 views
1

我準備做與lucence和Hadoop分發搜索模塊,但下跌困惑的東西分發搜索基礎:如何建立在Hadoop和Lucene

  1. ,因爲我們知道,HDFS是一個分發文件系統,當我把一個文件放到hdfs中時,文件將被分成嚴格的塊並存儲在clater中的不同的slave機器上,但是如果我使用lucene在hdfs上編寫索引,我想看看每臺機器上的索引,如何達到它呢?

  2. 我已經閱讀了一些hadoop/contrib/index和一些katta,但不理解「碎片,看起來像索引的一部分」的想法,它存儲在一臺計算機的本地磁盤上或只有一個方向分佈在集羣中?

感謝提前

+0

請您重寫最後一句「集羣中只有一個方向分佈」嗎? – mschonaker

回答

1

-As你的問題1:

您可以實現Lucene的「目錄」界面,使其與工作與Hadoop和Hadoop的讓你處理提交的文件它。您也可以提供您自己的「IndexWriter」和「IndexReader」實現,並使用您的hadoop客戶端來編寫和讀取索引。這樣,因爲您可以更多地控制您將編寫的索引的格式。您可以通過lucene/hadoop實現「查看」或訪問每臺機器上的索引。

- 對於你的問題2:

一個碎片是該指數的子集。當您運行查詢時,所有碎片都會在同一時間處理,並且所有碎片索引搜索的結果都會合並。在你的集羣的每臺機器上,你都會有一部分索引:碎片。因此,索引的一部分將存儲在本地計算機上,但在整個羣集中將顯示爲單個文件。

我也建議你簽出分佈式搜索SolrCloud,或here 它是運行在Lucene的爲下標/搜索引擎,並且已經使你有一個聚集索引。它還提供了用於提交文件以索引和查詢索引的API。也許這對你的用例來說已經足夠了。

+0

謝謝你的答案。您能否與我分享更多關於如何設計自定義lucene編寫器並使用mapreduce在HDFS上生成索引的問題? – hakunami

+0

我們可以。那之後我就停止了這個項目的工作。所以我還沒有真正意識到這一點。但是我很高興幾天前我回到了它。我已經可以告訴你,我決定不爲此目的使用hadoop和hdfs。原因是mapreduce的設計旨在爲一些原始數據提供結果。粗略地說:在存儲它們之前,您不要爲文檔建立索引。在搜索羣集時,您可以使用地圖/縮減方法處理所有問題。 我決定用cassandra替換hadoop一個p2p數據庫,其中的數據已經存儲在聚合中,查詢的性能很好。 – Esquive

+0

Cassandra是一個行鍵/值存儲。非常適合搜索索引。如果你想更多地瞭解這個,你可以看看「lucandra」項目。作者決定使用IndexWriter/Reader方法,您可以看到他如何實現自定義作家和讀者。我們也可以保持聯繫,因爲我只能每週監測這個項目幾個小時。 – Esquive