katta是一个可扩展的,高容错性的,可实时访问的数据存储方案。它将那些海量的重复的索引封装成诺干个切片,这可以很好的服务于高吞吐量和大数据集的应用。这些索引可以只不同的种类,目前主要是适用于lucene和hadoop的映射文件。
katta是一个运行在许多商业服务器上的分布式应用,类似于Hadoop MapReduce, Hadoop DFS, HBase, Bigtable 或者 Hypertable.
主服务器管理节点和索引切片任务。其实节点也就是用来索引切片的。一个客户端通过联系所有的节点在这个索引中进行搜索,然后将来自所有节点的结果合并到一个统一的结果列表中。索引和切片的种类是可以不同的,这主要取决于这个节点服务的内容。
每一个节点主机也就是一个内容服务机。内容服务器决定 katta 簇可以迟滞哪些种类的切片索引。在katta中可以执行多种不同的内容服务器。目前有lucene的索引文件和hadoop的map文件,当然你也可以执行你自己的种类。
一个katta的索引就是一个文件夹,这个文件下有很多子文件夹。这些子文件夹被称为索引切片。他们可以是lucene的索引也可以是hadoop的映射文件(也可以是自己的文件格式)。可以简单地用lucene 的index writer 创建lucene索引切片。在这种情况下,创建一个katta索引,只不过是将若干个lucene索引一起放到一个文件夹下,单个服务器或者是其他一些简单操作就可以满足你的需求了。这就允许你用一种最适合你应用需求的方式去构建你自己的索引,比如说让内容相关的文档在一个切片中。
主机与从机节点的通讯在分布式系统中是至关重要的,因为主机需要尽可能快地知道失败节点。一般情况下,这种通讯是通过节点的“心跳信息.”。Katta用了一种不同的方式。分布式配置和锁系统Zookepper是yahoo的研究项目,用于主机和节点的通讯。Zoopkeeper允许你去读/写一种分布的虚拟文件系统——虽然它不是一个真实的文件系统。节点通过在启动的时候将一个短期文件写入 “/nodes/live” 文件夹,来公布他们自己信息。主机会去订阅这个文件夹,从而得知这个文件夹中的任何变化。在某个节点失败的情况下,zoopker会移走该短暂文件,然后会去通知主机。一个类似的过程也被用做去处理主机的故障转移,虽然这儿只有活动主机写一个“/master”文件夹,备份主机去订阅这个文件夹。除了这些操作中安排的主机和节点的工作,还有一些其他的工作。比如主机操作( MasterOperations ),像是索引部署/非部署操作就属于这一类;还有节点操作( NodeOperations ),如切片部署/非部署操作。这些操作都以阻塞队列的形式存储在zoopkeeper中。每一个组件(主机,节点)都有它他自己的队列,顺序的处理过来的操作。
以下流程描述了一个索引是如何在katta中部署的,同时也可以作为其他流程的一个好例子。
l 一个部署客服端创建一个索引部署操作,然后把这个操作加入到主机的队列。
l 主机拿到这个操作,生成切片任务计划,然后将一系列的切片部署操作发给诺干个节点。
l 节点拿到这个操作,然后试图去发布包含的切片(比如从hdfs中copyf f.e,加到到内容服务的lucene f.e. 中),然后成功把它们发布到zookeeper的 “/shard-to-nodes” 文件夹下。
l 主机被告知所有节点已经完成操作(或是有若干个失败了)然后将做了相同改动的索引新发布到zookeeper以及带“/indices/indexX” 目录的f.e。
l 一个搜索客户端可以看见 “/indices 目录,它可以被自动的通知是索引是否有变动,然后客户端会去探测 “/shard-to-nodes” 目录以便确定哪些节点上有跑着新的索引切片。
一个搜索请求的时候客户端会同所有节点通讯。对于客户端和节点的通讯,我们决定采用hadoop的远程过程调用因为这个是非常快,也是非常容易用java实现的同步通讯机制(mina仅仅是在异步通讯的时候快一些)。每一个到客户端的搜索请求,我们都会发送一个请求到所有的含对应索引切片的节点上(细节请看INodeSelectionPolicy )
据我们所知,所有的请求都是多线程的,hadoop的rpc链接也一直是打开的。
因为性能在搜索过程中是至关重要的,所以katta会首先将切片copy到节点的本地硬盘上。
Hadoop文件系统中的所有uri都可以作为源。比如从一个共享的本地或者其他网络存储设备上部署一个索引。当然一个最常见的情况就是, 用“hdfs:” 在hadoop分布式系统上部署一个索引。当然 Amazon’s S3(Amazon Simple Storage Service ) 也是被支持的,关于这一点可以参考hadoop的文件系统文档。
Katta的切片复制,并不是在Hadoop DFS 中对原有hadoop索引安全机制的一个替代方案。
为了部署索引时不降低搜索的性能,katta特别为切片部署提供了一种调节机制(throttling mechanism )。
Distributed Scoring For Lucene Implementation
Katta支持lucene的分布得分。这是因为我们并不期望term的分布在所有切片节点上并不是完全平衡分布的。
Katta中的每个搜索查询最终都必须要分2个步骤:首先我们会从所有节点获得查询文档的总数;第2步将这个值和查询条件送到所有节点。请注意,我们也有一个简单计数器用于计算匹配这个查询条件的文档数,这部分是在第一个步骤中进行的。
Katta提供了一个javaAPI去管理系统,这个api可以被整合到你的管理和监控系统中去。
l IDeployClient.java for deploying and un-deploying of indices.:部署个取消部署索引
l ILuceneClient.java for querying lucene indices (uses Client.java).:搜索lucene索引
l IMapFileClient.java.java for querying hadoop mapfiles (Client.java).:搜索hadoop的映射文件
这些I×Client可以用于连接你的web站点或者搜索结果应用。
最后,katta提供了一个命令行工具( Katta.java )去管理系统级别的功能,比如部署和取消部署索引等等
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24067076/viewspace-1120499/ ,如需转载,请注明出处,否则将追究法律责任。