以下是在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).