開源分布式存儲係統katta
以下是在Katta官網了解時候的簡陋學習筆記,之後看到katta--索引的管理者比我翻譯的好多了,嘻嘻
Katta是一個可擴展的、故障容錯的、分布式實施訪問的數據存儲。
Katta可用於大量、重複、索引的碎片,以滿足高負荷和巨大的數據集。這些索引可以是不同的類型。當前該實現在Lucene和Hadoop mapfiles
- 讓大型高負荷的索引變簡單
- 能為許多具有大型Lucene或Hadoop Mapfile 的索引碎片的服務器提供服務
- 在不同服務器上複製碎片以保證性能和容錯性
- 支持插件化的網絡拓撲
- 故障管理
- 快速、輕量級、易於集成
- 與Hadoop集群工作良好
- Apache License,Version 2.0
Intro
Katta is a distributed application running on many commodity hardware servers very similar to Hadoop MapReduce, Hadoop DFS, HBase, Bigtable or Hypertable
Overview
master負責管理節點和索引分片。節點為索引分片服務。客戶端可以去所有節點搜索並合並結果集。目錄/分片種類可以不同,取決於節點服務器的內容服務器
Content Server
每個節點負責一個內容服務器。現在提供Lucene indices和 Hadoop mapfiles. 你可以實現自己的
數據結構
索引文件夾由子索引分片文件夾組成。如lucene的索引分片能用indexwriter創造,僅僅簡單把lucene的索引集合起來。所以katta的目錄能被mapreduce製造。你可以構造自己想要的索引
主節點通信
katta通過zk實現通信,把信息寫在虛擬文件係統裏。節點啟動時寫入臨時文件/node/livemaster訂閱虛擬文件係統的任何改變,當節點失敗的時候,zk移除虛擬文件並通知master。
主節點和次主節點也是通過類似方式,由活躍的master寫在/master裏
master和nodes都各自有個queue,用來處理自己的操作和任務,具體的:
- 客戶端分配索引部署任務給master queue
- master布置分片任務給nodes
- node做自己queue裏的任務,比如去hdfs裏拷文件加到lucene內容服務器裏,成功後記錄在zk下的“/shard-to-nodes”文件裏
- node成功或crash的結果通告給master,然後在zk裏公布索引以及一些元數據,如“/indices/indexX”
- 搜索客戶端監視目錄文件夾,會被通知更新.通過讀取“/shard-to-nodes” 文件夾,獲知哪些node在服務新的索引分片
客戶端節點通信
客戶端要和所有節點通信.使用hadoop RPC(很快且比較容易用java實現同步).對搜索請求,發送給所有需要去找索引分片搜索的nodes.請求是多線程處理的,而且hadoop RPC保持TCP/IP連接
給node裝載分片
katta先把分片複製到node的硬盤驅動器。映射的時候是hdfs地址,也支持S3。為了不減慢搜索,為分片部署提供節流機製。
為lucene的評分實現分布式
由於term在分布式情況下在每個分片裏不平均,所以每次請求進行兩輪:1. 從所有node裏得到doc的頻率
2. 把這個值和請求發給所有node去搜索
(意思是在第一算得總數,第二輪的時候各個node可以各自計算各自搜素結果的權重)
整合
DeployClient.java for deploying and un-deploying of indices.ILuceneClient.java for querying lucene indices (uses Client.java).
IMapFileClient.java.java for querying hadoop mapfiles (Client.java).
最後更新:2017-04-02 15:28:26