lucene 處理大規模數據的一些解決方法 katta--簡介

lucene 索引文件有大概10G,搜索時候比較慢,最好拆分存放索引,多位置同時搜索


當數據量較大訪問量較大的時候,分佈式就不可避免,處理方式有下面幾種:

1,用一個好服務器作爲索引服務器,磁盤冗餘的方式保證搜索的正常進行;

2,索引服務器用一臺,檢索服務器用分佈式;

3,編寫索引算法,分佈式存放,檢索時採用多線程搜索合併搜索結果返回;

4,索引分佈式存儲用硬件的方式保證索引文件的同步,檢索也採用分佈式。


5  不同業務,不同分佈。


分佈如何做好,看對搜索的要求,比如要求整個索引搜索要求多少時間內完成,搜索整體便於擴展,當中一服務器宕機,如何快速調整,承受高併發搜索,如何監視 整個集羣的運轉,如何不斷提升搜索。

 

 

 

katta--索引的管理者

 

* 可以輕鬆構建大數據量和高負載的環境
* 拆分lucene索引或者hadoop mapfiles成文件碎片存放到多臺服務器上
* 自動複製碎片功能,從而達到高性能和容錯功能
* 很容易擴展集羣
* Master故障切換
* 快速的、輕量級的、非常容易整合
* 在hadoop集羣上運行的很好
* Apache Version 2 License


介紹
katta 是一個運行在許多商品硬件服務器上的分佈式應用,它非常類似於Hadoop MapReduce, Hadoop DFS, HBase, Bigtable 和 Hypertable.

概述

主節點服務器管理從節點服務器和index shards任務。從節點服務器服務index shards。客戶端允許從所有連接的節點上查找數據,並把所有的結果合併成一個結果返回給客戶端。

數據結構

katta的索引是個文件夾,它裏面包含一套所謂的index shards(文件形式)。這些子文件包含了Lucene索引。
index shards能夠很簡單的用Lucene的index writer創建。創建一個katta的索引只不過是把一羣Lucene索引拷貝到一個文件夾下。因此katta索引可以用Hadoop map reduce創建(katta提供了一些工具),一臺單獨的服務器或者什麼都可以滿足你的要求。
這樣我們就可以使用最適合我們的應用的索引結構方式。比如說:把含有常見相關術語的document放在同一個shard裏。

主從節點的通信

主從節點的通信在分佈式系統中非常重要。主節點必須儘可能塊的知道從節點的是否已經掛沒掛掉。通常此類的通信使用了心跳消息(heartbeat messages )來聯繫主從節點。但是katta使用了一個不同的方法實現。那就是Zookeeper,一個分佈式配置和鎖定系統,它是YaHoo的研究項目,用來實現 主從節點的通信。Zookeeper允許你讀寫成一種分佈式虛擬文件系統——雖然它不是一個真正的文件系統。從節點在啓動過程中把一個臨時文件寫入一個叫 “/nodes”的文件夾。主節點同意任何改變這個文件夾,如果一個從節點失敗了,那Zookeeper會移除這個臨時文件,並且發送一個通知給主節點。 一個類似的程序是用來處理主節點的錯誤雖然這裏只有活躍的主節點寫了一個“/master”的文件夾,二級masters訂閱通知到這個文件。
在katta中,所有的主從節點的通信都是實施了這種機制。
“/index”---當一個新的索引被部署上時寫入這個文件
“/nodes-to-shards”---目錄保存每一個從節點的文件夾,在每一個文件夾下是這個從節點被分配的索引文件列表
“/shards-to-nodes”---目錄保存每一個從節點的文件夾,在每一個文件夾下是這個從節點已經部署的索引文件列表

客戶端節點通信

當得到一個查找請求後客戶端和從節點通信。爲了客戶端和節點的通信,我們決定使用Hadoop的RPC,它是一個非常快速的並且易於使用的同步通 信的Java實現(Apache的Mina也很快速但它是異步的通信)。對於每個搜索請求,我們向所有節點發送請求的服分享我們的索引中搜索。
所有的請求都是做成多線程的,Hadoop的RPC保持開放的TC P  IP連接。

載入Shards到節點

因爲性能在查找中是至關重要的,所以katta首先把shards拷貝到節點的本地硬盤上。
Hadoop的文件系統可以理解所以的URL並把它們當做一個源。比如,“file:” 從一個本地的shards部署一個索引,所有的節點都能訪問它。當然,“hdfs:”也能提供部署從Hadoop的分佈式系統的一個索引。亞馬遜的S3也 支持了這——涉及到Hadoop文件系統文件的更多細節。

分佈式評分

katta提供了分佈式評分——這是因爲我們不希望這個詞完全平衡的分配所有shards。
每個搜索查詢是在Katta中被兩個網絡往返:首先,我們從所有節點爲查詢得到文件的頻率,然後根據這個值搜索查詢到所有的節點訪問。請注意,我 們還提供了一個簡單的計數方法,僅僅是數查詢相匹配的文件,但並不表示,在一個網絡往返。

集成

Katta提供的Java API管理系統,你可以集成到你的管理和監控應用程序中(具體見Katta的java api)。
Katta還提供的Java API ,可以搜索索引(Client.java ) -這將是一個結合點來連接你的網站或應用程序的搜索結果。
最後, Katta提供了一個命令行工具來管理系統級功能,如部署和取消部署的shards。



發佈了91 篇原創文章 · 獲贊 9 · 訪問量 90萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章