ITPub博客

首页 > 大数据 > Hadoop > Katta - Lucene & more  in the cloud(1)

Katta - Lucene & more  in the cloud(1)

Hadoop 作者:greatwjg2 时间:2012-06-10 16:11:27 0 删除 编辑

About

katta是一个可扩展的,高容错性的,可实时访问的数据存储方案。它将那些海量的重复的索引封装成诺干个切片,这可以很好的服务于高吞吐量和大数据集的应用。这些索引可以只不同的种类,目前主要是适用于lucene和hadoop的映射文件。

How katta works

intro

katta是一个运行在许多商业服务器上的分布式应用,类似于Hadoop MapReduce, Hadoop DFS, HBase, Bigtable 或者 Hypertable.

主服务器管理节点和索引切片任务。其实节点也就是用来索引切片的。一个客户端通过联系所有的节点在这个索引中进行搜索,然后将来自所有节点的结果合并到一个统一的结果列表中。索引和切片的种类是可以不同的,这主要取决于这个节点服务的内容。

Content Server

每一个节点主机也就是一个内容服务机。内容服务器决定 katta 簇可以迟滞哪些种类的切片索引。在katta中可以执行多种不同的内容服务器。目前有lucene的索引文件和hadoop的map文件,当然你也可以执行你自己的种类。

Data Structure

一个katta的索引就是一个文件夹,这个文件下有很多子文件夹。这些子文件夹被称为索引切片。他们可以是lucene的索引也可以是hadoop的映射文件(也可以是自己的文件格式)。可以简单地用lucene 的index writer 创建lucene索引切片。在这种情况下,创建一个katta索引,只不过是将若干个lucene索引一起放到一个文件夹下,单个服务器或者是其他一些简单操作就可以满足你的需求了。这就允许你用一种最适合你应用需求的方式去构建你自己的索引,比如说让内容相关的文档在一个切片中。

Master -Node communication

主机与从机节点的通讯在分布式系统中是至关重要的,因为主机需要尽可能快地知道失败节点。一般情况下,这种通讯是通过节点的“心跳信息.”。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”  目录以便确定哪些节点上有跑着新的索引切片。

Client Node Communication

一个搜索请求的时候客户端会同所有节点通讯。对于客户端和节点的通讯,我们决定采用hadoop的远程过程调用因为这个是非常快,也是非常容易用java实现的同步通讯机制(mina仅仅是在异步通讯的时候快一些)。每一个到客户端的搜索请求,我们都会发送一个请求到所有的含对应索引切片的节点上(细节请看INodeSelectionPolicy )

据我们所知,所有的请求都是多线程的,hadoop的rpc链接也一直是打开的。

Load Shards to Nodes

因为性能在搜索过程中是至关重要的,所以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步将这个值和查询条件送到所有节点。请注意,我们也有一个简单计数器用于计算匹配这个查询条件的文档数,这部分是在第一个步骤中进行的。

Integration

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 )去管理系统级别的功能,比如部署和取消部署索引等等

来自:http://blog.sina.com.cn/s/blog_43b8e6dd0100ne4b.html

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24067076/viewspace-1120499/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-06-09