谈谈Hadoop和分布式Lucene
http://hi.baidu.com/lewutian
Lucene是大家用的最多的开源搜索引擎。本文不探讨Lucene如何实时更新(http://issues.apache.org/jira/browse/LUCENE-1313
),和如何修改Lucene评分机制,添加如PageRank评分因子,本文只讨论分布式的Lucene。
说到Lucene一般都会提到Nutch
,Hadoop最早是Doung Cutting为了Nutch的crawler和indexer所开发的做为nutch的两个package。Hadoop在Nutch中的作用就是抓取页面和建立索引。其抓取和建索引详见页面
。
因为Hadoop的seek能力限制,Nutch的分布式搜索使用手动配置的机制,缺少管理索引能力和服务器的机制。具体步骤:在webserver中修
改search-servers.txt把搜索服务的服务器地址和服务端口添加进去,然后把nutch-site.xml中的searcher.dir指
到search-servers.txt保存的目录,在提供搜索服务的服务器上手动的从HDFS中拷贝索引文件到本地。启动
DistributedSearch.Server提供搜索服务。Nutch节点失效通过搜索请求IPC调用的超时来通知。
Lucene另一种分布式搜索是使用Solr
(本
人 不太熟悉Solr)。所有的更新是在Solr的主服务器,通过cron自动分发到搜索服务器。搜索通过只定shards的
host:port/base_url分发到各个搜索服务器。url例子:http://localhost:8983/solr
/select?shards=192.168.1.27:8983/solr,192.168.1.28:8983&q=solr。缺点是没有
全局的Lucene评分机制中的idf、lengthNorm因子,没有节点失效处理机制。由于分发document到shards使用
uniqueId.hashCode() % numServers机制,可扩展性大打折扣。最近Rackspace
结合Sorl,Hadoop和Tomcat来搜索邮件日志数据,文档中看不出使用何种机制失效处理机制等。
在Hadoop的wiki
中提到由HP Lab实现的Distributed Lucene
,但是自从08年5月18日提交了一次source后就没了下文。
Katta
分布式搜索是101tec.com贡献的一个开源项目。主要目的提供高有效性的搜索服务,并提供负载平衡。Katta使用zookeeper
保
证主节点和搜索节点的有效性,指派索引文件给搜索节点,察觉搜索节点的失效。每一个搜索节点在启动时往zookeeper的“/nodes”节点写一个短
暂的znode。主节点设定watch事件察觉这个znode的变化。即当节点和zookeeper
server连接断开时,zookeeper自动把这个znode删除,并通知主节点。同样,相同的程序处理主节点失效。当前只有一个活动的主节点往
zookeeper中写“/master”
这个znode。备用的主节点设定watch事件察觉这个znode的变化,并把自己变成活动的主节点。当有新的索引被部署时在zookeeper中
“/index”
znode下添加一个znode,主节点把这个索引分配给搜索节点。“/nodes-to-shards”目录保存每一个搜索节点的znode,在每一个
znode下是这个搜索节点被分配的索引文件列表。“/shards-to-nodes”目录保存每一个搜索节点的znode,在每一个znode下是这
个搜索节点已经部署的索引文件列表。
Katta现阶段没有实时更新。(正在计划,可能类似于Dynamo
,
更新的一致性,采用类似于 Quorum
系统的一致性协议实现),没有LRU或LFU缓存策略。其分布式TF-IDF的解决方案:分为两次发送请求。首先向每个搜索节点发送获取document
frequency(只读取tis文件)的请求,然后再向每个搜索节点发送搜索请求,把document frequency和query一起发送。
在Hadoop的contrib中的index是使用MapReduce建立Lucene索引的,不是用来搜索用的。
通
过上面的软件,我们可以建立一个自动化的搜索服务。建立一个web控制服务器来监控整个过程。先使用hadoop的MapReduce来建立索
引,在提交job是设定job.end.notification.url到我们的控制服务器,控制服务器接受到建立索引的任务已经完成,就可把索引分配
给Katta提供搜索服务。
http://hi.baidu.com/lewutian推荐文章:
1. Lucene Demo安装,Linux
2. Lucene:基于Java的全文检索引擎简介
3. Sphinx(狮身人面)比lucene还牛的搜索引擎
4. 关于lucene 结构及内层的研究(一)
5. 学习用Lucene.net做全文搜索(1)
6. Lucene的平行索引和同时搜索多个索引
7. Lucene Query类结构
8. Lucene中文分析器的中文分词准确性和性能比较
9. Lucene的score()实现
10. Lucene 中文引擎,庖丁解牛的辞典参数配置方法
11. lucene.net学习心得
12. lucene结构学习
13. 实现基于lucene的三个功能:1-分页 2-按时间排序 3-检索某时间范围内的内容
14. 把lucene索引放在内存中提供查询服务
15. Lucene的平行索引和同时搜索多个索引
分享到:
相关推荐
分布式数据库30讲 分布式数据库是指使用分布式架构实现的关系型数据库。它可以解决许多问题,如性能和可靠性问题。由于各种原因,大型机已经不再是多数企业的可选项,而采用 x86 架构的通用设备在单机性能和可靠性...
本文来自于csdn,本文主要从分布式的原因,事务特性,和解决方案中深入理解了分布式事务,希望对您的学习有所帮助。 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的...
南理工 魏松杰 对应他的英文版本PPT复习可用,同时是学习分布式系统的很好的PPT,分布式系统ppt对应分布式系统第五版英文版ppt,复习,自学可用,了解分布式系统,共10章,01-概述,02-系统模型,03-进程间通信,04-...
分布式存储系统主要经历了四个阶段:第一代分布式存储系统(1980 到 1990),第二代分布式存储系统(1990 到 1995),第三代分布式存储系统(1995 到 2000),第四代分布式存储系统(2000 至今)。 第一代分布式...
本报告主要对分布式存储市场进行调研,涵盖了分布式存储的定义与分类、分布式存储与其他相关技术的关系、分布式存储市场状况、分布式存储行业典型应用场景等多个方面。 一、分布式存储的定义与分类 分布式存储是指...
分布式计算是计算机科学中的一个重要领域,它涉及到多台计算机协同工作以解决单台机器难以处理的大型或复杂问题。在“分布式计算课件(PPT)”中,我们可以期待深入学习这一领域的核心概念和技术。 首先,分布式对象...
分布式系统理论体系非常庞大,涉及知识面也非常广博,本文精心选择了部分在工程实践中应用广泛、简单有效的分布式理论、算法、协议加以介绍。全文分为两大部分,第一部分介绍了分布式系统的一些基本概念并框定了本文...
【Maven构建的分布式demo】 在现代软件开发中,分布式系统已经成为主流,它能提高系统的可扩展性、容错性和性能。Maven作为Java项目管理工具,为构建分布式应用程序提供了强大的支持。本篇将深入探讨如何利用Maven...
分布式系统及应用是计算机科学中的一个关键领域,尤其在当今大数据和云计算的时代背景下,其重要性日益凸显。东北大学的研究生课程"分布式系统及应用"显然涵盖了这一领域的核心概念和实践技能。以下是对该课程相关...
"浅谈分布式事务实现技术及应用场景探讨" 分布式事务是指在分布式系统中,多个节点之间的数据访问和更新操作集合,需要保证事务的原子性、一致性、隔离性和持久性。随着软件系统支持用户数的不断提高,对其架构的...
《大规模分布式存储系统:原理解析与架构实战》是分布式系统领域的一部经典著作,作者杨传辉依托于深厚的理论知识和实践经验,为读者详尽地解析了分布式存储系统的核心技术和基本原理,并针对全球顶尖互联网公司的...
本书分为三大部分,即分布式系统基础理论、分布式系统常用技术以及经典的分布式系统案例分析。第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,...
Java开发基于SpringBoot+WebSocket+Redis分布式即时通讯群聊系统。一个基于Spring Boot + WebSocket + Redis,可快速开发的分布式即时通讯群聊系统。适用于直播间聊天、游戏内聊天、客服聊天等临时性群聊场景。 ...
"分布式机器学习系统工程与实战" 《分布式机器学习系统、工程与实战》是一本全面深入地探讨分布式机器学习领域的书籍,主要内容包括分布式机器学习的发展历程、系统架构、工程构建以及实际应用案例。 一、分布式...
范型篇——介绍谷歌、亚马逊、微软、阿里巴巴等著名互联网公司的大规模分布式存储系统架构,涉及分布式文件系统、分布式键值系统、分布式表格系统以及分布式数据库技术等。实践篇——以阿里巴巴的分布式数据库Ocean...
《分布式系统原理与范型》作为一本系统介绍分布式系统基本原理与实践应用的书籍,涵盖了分布式系统设计与实现的核心理念。分布式系统指的是由多个可以独立运行的计算单元构成的系统,这些计算单元通过通信网络相互...
分布式系统是计算机科学中的一个重要领域,它涉及到多个独立的计算节点通过网络进行协作,共同完成一个任务或提供服务。这份“分布式系统 概念与设计 习题答案(完整版)”涵盖了该领域的核心概念、设计原则以及常见...
简介:《分布式服务框架:原理与实践》创作者具有丰富的分布式服务框架、平台中间件的架构设计和实践经验,主导设计的华为分布式服务框架已经在全球数十个国家成功商用。《分布式服务框架:原理与实践》依托工作实践...
《凤凰架构:构建可靠的大型分布式系统》是一本开源文档,其核心在于为技术人员提供一个构建可信赖的大型分布式软件系统的框架和方法论。分布式系统是一类由多个组件构成的系统,这些组件分散在不同的网络节点上,...