设为首页收藏本站优领域

优领域

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
优领域 优领域 IT领域 网络技术 其它 查看内容

基于Nutch和Hadoop的分布式搜索引擎探究

2014-5-19 23:20| 发布者: dzly| 查看: 724| 评论: 0|原作者: 李伟

摘要: 分析Apache 开源框架Nutch 和Hadoop 的系统结构,利用Nutch 和Hadoop 设计高效、可靠、可扩展的分布式搜索 引擎,来解决搜索引擎对海量数据的处理和存储问题。

  0 引言
  随着互联网的迅速发展,Internet 上的信息量快速增长。
  集中式搜索引擎从海量的信息中快速检索出用户真正需要的信息正变得很困难,搜索引擎系统应向着具有分布式处理能力方向发展,不断地扩展系统规模来增强系统处理信息的能力,分布式搜索引擎应运而生。
  Apache Nutch 是一个用于网络搜索的开源框架,它提供了运行搜索引擎所需的全部工具,包括全文搜索和Web爬虫。
  Hadoop [1] 作为Google MapReduce 技术的开源实现,借鉴了Google 的Google File System 文件系统、MapReduce 并行算法以及BigTable。因此,Hadoop 也是一个能够分布式处理大规模海量数据的软件框架。Hadoop 的可靠性是因为Hadoop 假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理。Hadoop的高效性是在MapReduce 的思想下,Hadoop 是并行工作的,以加快任务处理速度。Hadoop的可扩展是依赖于部署Hadoop软件框架计算集群的规模,Hadoop的运算是可扩展的,具有处理PB 级数据的能力。
  1 Apache Nutch
  Nutch[2]是由Java 实现的,刚刚诞生开放源代码(open-sou- rce)的web 搜索引擎。Nutch 主要分为爬虫crawler 和查询searcher两个部分,其组件结构如图1 所示。


  图1 Nutch 的组件结构
  WebDB: 存储网页数据和连接信息。
  fetch lists: 将WebDB 所存储的连接分成多个组,来用于分布式检索。
  fetchers: 检索fetch list 中的内容并下载到本地,共有两项输出:分别是连接的update 信息和内容content。
  updates: 更新WebDB 的页面检索状态。
  content: 界面内容,获取内容之后,Nutch 便可以根据它来创建索引并执行查询操作。
  indexers: 对目标content 创建索引,当索引内容较大时,可把索引划分成多个索引片段,然后分配给不同的seracher 实现并行检索。
  searchers: 实现查询功能的同时也会缓存content。
  Web servers: 有两种角色:处理用户的交互请求(Nutch SearchClient)和从searchers 中获取查询结果(HTTP Server)。
  其中,WebDB、updates、fetch lists 和fetchers 组成循环结构,不断运行下去,来确保所得到的Web 镜像是最新的。fetchers和searchers 两个节点所对应的操作可放到分布式环境(Hadoop)中去完成。
  2 Apache Hadoop
  Hadoop 框架在功能划分上包含3 个子框架,分别是:HDFS,用于分布式存储;MapReduce,用于分布式并行计算;Common,封装HDFS 和MapReduce 所需要的实用类。
  2.1 HDFS 文件系统
  HDFS 是Google GFS 的开源版本,是一个高度容错的分布式文件系统,它能够提供高吞吐量的数据访问,适合存储海量( PB 级) 的大文件(通常超64MB)。HDFS 采用Master/Slave结构,由一个管理结点(NameNode)和多个数据节点(DataNode)组成,每个结点均是一台普通的计算机。NameNode 是关键模块,进行文件系统元数据的管理和控制服务,对外提供创建、打开、删除和重命名文件或目录的功能。但其底层实现上是把文件切割成Block.然后这些Block 分散地存储于不同的DataNode 上,DataNode 提供数据块存储和查询服务,并且负责处理数据的读写请求。每个Block 还可以复制数份存储于不同的DataNode 上.达到容错容灾的目的。NameNode 通过维护一些数据结构,记录了每一个文件被切割成了多少个Block,这些Block 可以从哪些DataNode 中获得,各个DataNode的状态等重要信息。
  2.2 MapReduce
  MapReduce 的工作原理:当向MapReduce 框架提交一个计算作业时,首先它会把计算作业拆分成若干个Map 任务[3],然后再分配到不同的节点上去执行,每一个Map 任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce 任务的输入数据。Reduce任务的主要目标就是把前面若干个Map 的输出规约汇总并输出。
  MapReduce 由一个JobTracker 和多个TaskTracker 组成。
  其中,JobTracker 负责作业调度,TaskTracker 执行计算任务,全部的TaskTracker 都要运行在DataNode 上,因为Hadoop 的MapReduce 并行计算遵循了“移动计算比移动数据更经济”的原则[4],数据存储在那一个节点上,就由此节点对这部分的数据计算。这样就可以减少在网络上传输的数据,降低对网络带宽的需要, 从而保证分布式系统的高效性。
  3 分布式搜索引擎系统
  Nutch 的单机采集(local 方式)并不复杂,然而当所采集的数据源较大时,一台机器难以满足性能上的需求,因此通常的做法是将Nutch 集成到Hadoop 环境中以完成分布式采集和分布式查询的效果(deploy 方式)。
  环境搭建的步骤是:(1)需要准备两台或以上Linux 机器(这里假定为四台)。
  一台机器名称设置为master,另三台分别设置为slave01、slave02、slave03,四台机器具有相同的登录用户名nutch,并且将四台机器的etc/hosts 文件设置成相同的内容,以便可以通过主机名找到对应的机器。如:192.168.1.11 master
  192.168.1.12 slave01
  192.168.1.12 slave02
  192.168.1.12 slave03
  (2)搭建ssh 环境,ssh 的安装可通过命令$ sudo apt-get installssh 和$ sudo apt-get install rsync 完成。
  (3)安装JDK,通过命令$ apt-get install *.jar 完成。
  (4)安装hadoop 和nutch,并完成相应的配置。
  4 结语
  分布式搜索引擎是当前研究的热点之一,本文在分析了Apache 开源框架Nutch 和Hadoop 的系统结构的基础上,给出了基于Nutch 和Hadoop 的分布式搜索引擎设计方案。总体来说该系统有待进一步完善,如何让分布式搜索引擎系统的效率更高、更可靠是下一步主要的研究内容。__
  

网站统计|优领域|优领域 ( 粤ICP备12011853号-1 )  

GMT+8, 2019-6-16 04:53 , Processed in 0.046529 second(s), 12 queries .

Copyright © 2008-2014 优领域

回顶部