開源分布式存儲系統:katta

jopen 10年前發布 | 19K 次閱讀 katta 存儲系統 分布式/云計算/大數據

Katta是一個可擴展的、故障容錯的、分布式實施訪問的數據存儲。

Katta可用于大量、重復、索引的碎片,以滿足高負荷和巨大的數據集。這些索引可以是不同的類型。當前該實現在LuceneHadoop 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/live
master訂閱虛擬文件系統的任何改變,當節點失敗的時候,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).

    開源分布式存儲系統:katta

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!