谈谈Hadoop和分布式Lucene

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提供搜索服务。

时间: 2024-10-03 09:44:26

谈谈Hadoop和分布式Lucene的相关文章

用Hadoop进行分布式并行编程, 第1部分

Hadoop 是一个实现了 MapReduce 计算模型的开源分布式并行编程框架,借助于 Hadoop, 程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数 据的计算.本文将介绍 MapReduce 计算模型,分布式并行计算等基本概念,以及 Hadoop 的安装部署和基本运行方法. Hadoop 简介 Hadoop 是一个开源的可运行于大规模集群上的分布式并行编程框架,由于分布式存储 对于分布式编程来说是必不可少的,这个框架中还包含了一个分布式文件系统 HDFS( Hadoo

Hadoop的分布式架构改进与应用

Hadoop的分布式架构改进与应用 Baofeng Zhang@zju  转载请注明出处:http://blog.csdn.net/zbf8441372  1.  背景介绍        谈到分布式系统,就不得不提到Google的三驾马车:GFS[1],MapReduce[2]和BigTable[3].虽然Google没有开源这三个技术的实现源码,但是基于这三篇开源文档, Nutch项目子项目之一的Yahoo资助的Hadoop分别实现了三个强有力的开源产品:HDFS,MapReduce和HBas

【图解】用Hadoop 进行分布式并行编程(一)

Hadoop 是一个实现了MapReduce 计算模型的开源分布式并行编程框架,借助于 Hadoop, 程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数据的计算.本文将介绍 MapReduce 计算模型,分布式并行计算等基本概念,以及 Hadoop 的安装部署和基本运行方法. Hadoop 简介 Hadoop 是一个开源的可运行于大规模集群上的分布式并行编程框架,由于分布式存储对于分布式编程来说是必不可少的,这个框架中还包含了一个分布式文件系统 HDFS( Hadoop D

用Hadoop进行分布式数据处理,第2部分

Hadoop 分布式计算架构的真正实力在于其分布性.换句话说,向工作并行分 布多个节点的能力使 Hadoop 能够应用于大型基础设施以及大量数据的处理.本 文首先对一个分布式 Hadoop 架构进行分解,然后探讨分布式配置和使用. 分布式 Hadoop 架构 根据 用 Hadoop 进行分布式数据处理,第 1 部分:入门,所有 Hadoop 守 护进程都在同一个主机上运行.尽管不运用 Hadoop 的并行性,这个伪分布式配 置提供一种简单的方式来以最少的设置测试 Hadoop 的功能.现在,让我

大数据-hadoop伪分布式环境搭建

问题描述 hadoop伪分布式环境搭建 最近开始新学hadoop,想搭建个伪分布式环境,而自己的电脑配置不高,不能运行虚拟机,可以利用阿里云来搭建伪分布式运行环境吗? 解决方案 阿里云搞几台机器在一个局域网就可以搭建或者用单机模式 解决方案二: 嗯,单机模式是不是不用装虚拟机

用 Hadoop 进行分布式数据处理,从 入门、进阶到应用开发

入门 简介: 本文是讨论 Hadoop 的系列中的第一篇.本文介绍 Hadoop 框架,包括 Hadoop 文件系统 (HDFS) 等基本元素和常用的节点类型.学习如何安装和配置单节点 Hadoop 集群,然后研究 MapReduce 应用程序.最后,学习使用核心 Web 界面监视和管理 Hadoop 的方法. 尽管 Hadoop 是一些大型搜索引擎数据缩减功能的核心部分,但是它实际上是一个分布式数据处理框架.搜索引擎需要收集数据,而且是数量极大的数据.作为分布式框架,Hadoop 让许多应用程

《Hadoop实战第2版》——1.4节Hadoop与分布式开发

1.4 Hadoop与分布式开发我们通常所说的分布式系统其实是分布式软件系统,即支持分布式处理的软件系统.它是在通信网络互联的多处理机体系结构上执行任务的系统,包括分布式操作系统.分布式程序设计语言及其编译(解释)系统.分布式文件系统和分布式数据库系统等.Hadoop是分布式软件系统中文件系统层的软件,它实现了分布式文件系统和部分分布式数据库系统的功能.Hadoop中的分布式文件系统HDFS能够实现数据在计算机集群组成的云上高效的存储和管理,Hadoop中的并行编程框架MapReduce能够让用

Hadoop伪分布式搭建操作步骤指南

一.准备工作 在 /opt/目录下创建文件夹modules,和softwares 修改操作权限(切换至root用户下) chown -R wxt:wxt /opt/  然后切换至普通用户 mkdir softwares    mkdir modules   安装lrzsz (在linux里可代替ftp上传和下载.) 首先安装lrzsz yum -y install lrzsz  上传文件,执行命令rz,会跳出文件选择窗口,选择好文件,点击确认即可. rz  下载文件,执行命令sz sz  二.H

用 Hadoop 进行分布式并行编程, 第 2 部分

前言 在上一篇文章:"用 Hadoop 进行分布式并行编程 第一部分 基本概念与安装部署"中,介绍了 MapReduce 计算模型,分布式文件系统 HDFS,分布式并行计算等的基本原理, 并且详细介绍了如何安装 Hadoop,如何运行基于 Hadoop 的并行程序.在本文中,将针对一个具体的计算任务,介绍如何基于 Hadoop 编写并行程序,如何使用 IBM 开发的 Hadoop Eclipse plugin 在 Eclipse 环境中编译并运行程序. 分析 WordCount 程序