http://www.ij2ee.com/2011/11/29/katta%EF%BC%9A%E5%9F%BA%E4%BA%8Elucene%E5%8F%AF%E4%BC%B8%E7%BC%A9%E5%88%86%E5%B8%83%E5%BC%8F%E5%AE%9E%E6%97%B6%E6%90%9C%E7%B4%A2%E6%96%B9%E6%A1%88.html

Katta:基于Lucene可伸缩分布式实时搜索方案

2011年11月29日admin发表评论阅读评论  4 views

介绍 
katta 是一个运行在许多商品硬件服务器上的分布式应用,它非常类似于Hadoop MapReduce, Hadoop DFS, HBase, Bigtable 和 Hypertable.

概述 
主节点服务器管理从节点服务器和index shards任务。从节点服务器服务index shards。客户端允许从所有连接的节点上查找数据,并把所有的结果合并成一个结果返回给客户端。

数据结构 
katta的索引是个文件夹,它里面包含一套所谓的index shards(文件形式)。这些子文件包含了Lucene索引。 
index shards能够很简单的用Lucene的index writer创建。创建一个katta的索引只不过是把一群Lucene索引拷贝到一个文件夹下。因此katta索引可以用Hadoop map reduce创建(katta提供了一些工具),一台单独的服务器或者什么都可以满足你的要求。 
这样我们就可以使用最适合我们的应用的索引结构方式。比如说:把含有常见相关术语的document放在同一个shard里。

主从节点的通信 
主从节点的通信在分布式系统中非常重要。主节点必须尽可能块的知道从节点的是否已经挂没挂掉。通常此类的通信使用了心跳消息(heartbeat messages )来联系主从节点。但是katta使用了一个不同的方法实现。那就是Zookeeper,一个分布式配置和锁定系统,它是YaHoo的研究项目,用来实现主从节点的通信。Zookeeper允许你读写成一种分布式虚拟文件系统——虽然它不是一个真正的文件系统。从节点在启动过程中把一个临时文件写入一个叫“/nodes”的文件夹。主节点同意任何改变这个文件夹,如果一个从节点失败了,那Zookeeper会移除这个临时文件,并且发送一个通知给主节点。一个类似的程序是用来处理主节点的错误虽然这里只有活跃的主节点写了一个“/master”的文件夹,二级masters订阅通知到这个文件。 
在katta中,所有的主从节点的通信都是实施了这种机制。 
“/index”—当一个新的索引被部署上时写入这个文件 
“/nodes-to-shards”—目录保存每一个从节点的文件夹,在每一个文件夹下是这个从节点被分配的索引文件列表 
“/shards-to-nodes”—目录保存每一个从节点的文件夹,在每一个文件夹下是这个从节点已经部署的索引文件列表

客户端节点通信 
当得到一个查找请求后客户端和从节点通信。为了客户端和节点的通信,我们决定使用Hadoop的RPC,它是一个非常快速的并且易于使用的同步通信的Java实现(Apache的Mina也很快速但它是异步的通信)。对于每个搜索请求,我们向所有节点发送请求的服分享我们的索引中搜索。 
所有的请求都是做成多线程的,Hadoop的RPC保持开放的TC P  IP连接。

载入Shards到节点 
因为性能在查找中是至关重要的,所以katta首先把shards拷贝到节点的本地硬盘上。 
Hadoop的文件系统可以理解所以的URL并把它们当做一个源。比如,“file:” 从一个本地的shards部署一个索引,所有的节点都能访问它。当然,“hdfs:”也能提供部署从Hadoop的分布式系统的一个索引。亚马逊的S3也支持了这——涉及到Hadoop文件系统文件的更多细节。

分布式评分 
katta提供了分布式评分——这是因为我们不希望这个词完全平衡的分配所有shards。 
每个搜索查询是在Katta中被两个网络往返:首先,我们从所有节点为查询得到文件的频率,然后根据这个值搜索查询到所有的节点访问。请注意,我们还提供了一个简单的计数方法,仅仅是数查询相匹配的文件,但并不表示,在一个网络往返。

集成 
Katta提供的Java API管理系统,你可以集成到你的管理和监控应用程序中(具体见Katta的java api)。 
Katta还提供的Java API ,可以搜索索引(Client.java ) -这将是一个结合点来连接你的网站或应用程序的搜索结果。
最后, Katta提供了一个命令行工具来管理系统级功能,如部署和取消部署的shards。

官方介绍:

Katta – Lucene & more  in the cloud.

Katta is a scalable, failure tolerant, distributed, data storage for real time access.
Katta serves large, replicated, indices as shards to serve high loads and very large data sets. These indices can be of different type. Currently implementations are available for Lucene and Hadoop mapfiles.

  • Makes serving large or high load indices easy
  • Serves very large Lucene or Hadoop Mapfile indices as index shards on many servers
  • Replicate shards on different servers for performance and fault-tolerance
  • Supports pluggable network topologies
  • Master fail-over
  • Fast, lightweight, easy to integrate
  • Plays well with Hadoop clusters
  • Apache Version 2 License

官方主页:http://katta.sourceforge.net/

官方文档:http://katta.sourceforge.net/documentation

Katta:基于Lucene可伸缩分布式实时搜索方案相关推荐

  1. 一种基于Lucene的实时搜索方案|淘宝技术部

    背景 阿里集团各大业务快速发展过程中都对搜索服务很多刚性的需要,而这样的搜索需求有着非常明显的特征:快速支持.低成本.实时性和稳定性. 快速支持: 业务需求急迫.需要一周甚至几天内完成索引服务搭建.测 ...

  2. Lucene5.5.4入门以及基于Lucene实现博客搜索功能

    前言 一直以来个人博客的搜索功能很蹩脚,只是自己简单用数据库的like %keyword%来实现的,所以导致经常搜不到想要找的内容,而且高亮显示.摘要截取等也不好实现,所以决定采用Lucene改写博客 ...

  3. 基于Lucene实现博客搜索功能

    前言: 最近毕设开会无意间听到小陈同学使用lucene整一个全文索引,出于好奇了解了一下发现其是结合相关分词器可以对一大段文字建立索引,然后可以实现搜索功能,本来博客一直差着一个搜索博客功能(不想通过 ...

  4. 基于lucene语法的实时文本搜索与匹配--Tripod

    Tripod是一款基于lucene语法实现的,可对文本数据进行实时匹配的开源工具,其工程路径为https://github.com/colorknight/tripod.git.在一定场景中,使用它, ...

  5. 【转载保存】基于Lucene的近实时搜索引擎优化总结

    一.搜索优化: 在工程领域,越是看起来"简单.确定"的问题,越是难以解决.近实时搜索引擎需要解决的问题只有一个:性能!它包含快速索引,快速搜索,以及索引到搜索的快速生效. 以下为百 ...

  6. 基于Vue实现关键词实时搜索高亮显示关键词

    最近在做移动real-time-search于实时搜索和关键词高亮显示的功能,通过博客的方式总结一下,同时希望能够帮助到别人~~~ 如果不喜欢看文字的朋友我写了一个demo方便已经上传到了github ...

  7. 基于Kubernetes的分布式压力测试方案

    压力测试是用来检测系统承载能力的有效手段.在系统规模较小的时候,在一台空闲的服务器上使用[ab],[wrk],[siege]等工具发起一定量的并发请求即可得到一个初步的测试结果.但在系统复杂度逐步提高 ...

  8. 基于Redis的分布式锁实现方案

    1.分布式锁简介 简单来说,分布式锁是针对集群环境下多台机器竞争公共资源提出的方案. 单机环境下,线程共享堆内存,jdk提供了同步机制来应对资源竞争,比如synchronized关键字,AQS队列同步 ...

  9. Spring Cloud Alibaba 统一门户:基于网关的统一用户认证方案

    本讲咱们涉及以下三方面内容: 传统的用户认证方案: JWT 与 JJWT: 基于网关的统一用户认证. 传统的用户认证方案 我们直奔主题,什么是用户认证呢?对于大多数与用户相关的操作,软件系统首先要确认 ...

最新文章

  1. Go语言调度器之调度main goroutine(14)
  2. 深入Jetty源码之Servlet框架及实现(AsyncContext、RequestDispatcher、HttpSession)
  3. 20W奖金+实习机会:阿里巴巴达摩院最新时间序列赛事来了!
  4. C语言 · 求矩阵各个元素的和
  5. distinct 只针对一个字段
  6. 网络工程师职业规划(三)
  7. 哈希表中处理冲突的方法
  8. Reverse Integer(C++)
  9. STM32中assert_param的使用
  10. idea创建类时自动添加注释
  11. 计算机主机配件及图解,组装电脑需要哪些配件?电脑组装教程之全程指导新手装机图解!...
  12. java里面有radix树吗_基数树(radix tree)
  13. java手机号码格式验证
  14. 03.Rocky8的kvm创建虚拟主机和迁移主机
  15. 切换windows系统版本
  16. 网络加速器的加速原理
  17. 图形推理1000题pdf_行测80分秒杀技——图形推理满分√
  18. 机器人开发--设计范式
  19. 实现DevSecOps正确左移的宣言
  20. 三星s20 android 10.0,同为骁龙865新旗舰,小米10对比三星S20,差距有多大

热门文章

  1. 32位jdk最大内存_Java安装之JDK下载篇
  2. 用python的turtle画正方形内切圆_Python 用turtle实现用正方形画圆的例子
  3. 输入学号查询课程c语言,广工c语言课程设计
  4. java中怎么打开标尺_PageOffice如何显示/隐藏Word文档中的标尺
  5. node中的异步API
  6. 计算机和自动化结合的专业,自动化转计算机?你可以选择这个专业!
  7. daemonset怎么读_DaemonSet 与 StatefulSet的使用
  8. python质量转换程序,Python库的文件转换成MP3和设置它们的质量
  9. 解决纵向滚屏导致的轮播图异常
  10. php相关知识,PHP的基础知识简单介绍