`
esteem
  • 浏览: 156569 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Nutch中MapReduce的分析

阅读更多

作者:马士华

Nutch是最早用MapReduce的项目 (Hadoop其实原来是Nutch的一部分),Nutch的plugin机制吸取了eclipse的plugin设计思路。在Nutch中 MapReduce编程方式占据了其核心的结构大部分。从插入url列表(Inject),生成抓取列表(Generate),抓取内容(Fetch), 分析处理内容(Parse),更新Crawl DB库(Update ),转化链接(Invert Links)一直到建立索引(Index)都是采用MapReduce来完成的。查看Nutch的源代码我们能够学到更多的 如何用MapReduce来处理我们编程中所遇到的问题。

Nutch从获取下载列表到建立索引的过程:

插入url列表到Crawl DB,引导下面的抓取程序
 循环:
  – 从Crawl DB生成一些url列表;
  – 抓取内容;
  – 分析处理抓取的内容;
  – 更新Crawl DB库.
 转化每个页面中外部对它的链接
 建立索引

 

具体技术实现细节:

1。插入url列表(Inject)

MapReduce程序1:
  目标:转换input输入为CrawlDatum格式.
  输入: url文件
  Map(line) → <url, CrawlDatum>
  Reduce()合并多重的Url.
  输出:临时的CrawlDatum文件.
 MapReduce2:
  目标:合并上一步产生的临时文件到新的DB
  输入: 上次MapReduce输出的CrawlDatum
  Map()过滤重复的url.
  Reduce: 合并两个CrawlDatum到一个新的DB
  输出:CrawlDatum

2。生成抓取列表(Generate)

MapReduce程序1:
  目标:选择抓取列表
  输入: Crawl DB 文件
  Map() → 如果抓取当前时间大于现在时间 ,抓换成 <CrawlDatum, url>格式.
  分发器(Partition) :用url的host保证同一个站点分发到同一个Reduce程序上.
  Reduce:取最顶部的N个链接.
 MapReduce程序2:
  目标:准备抓取
  Map() 抓换成 <url,CrawlDatum,>格式
  分发器(Partition) :用url的host
  输出:<url,CrawlDatum>文件

3。抓取内容(Fetch)

MapReduce:
  目标:抓取内容
  输入: <url,CrawlDatum>, 按host划分, 按hash排序
  Map(url,CrawlDatum) → 输出<url, FetcherOutput>
  多线程, 调用Nutch的抓取协议插件,抓取输出<CrawlDatum, Content>
  输出: <url,CrawlDatum>, <url,Content>两个文件

4。分析处理内容(Parse)

MapReduce:
  目标:处理抓取的能容
  输入: 抓取的<url, Content>
  Map(url, Content) → <url, Parse>
  调用Nutch的解析插件,输出处理完的格式是<ParseText, ParseData>
  输出: <url,ParseText>, <url,ParseData><url,CrawlDatum>.

5。更新Crawl DB库(Update )

MapReduce:
  目标: 整合 fetch和parse到DB中
  输入:<url,CrawlDatum> 现有的db加上fetch和parse的输出,合并上面3个DB为一个新的DB
  输出: 新的抓取DB

6。转化链接(Invert Links)

MapReduce:
  目标:统计外部页面对本页面链接
  输入: <url,ParseData>, 包含页面往外的链接
  Map(srcUrl, ParseData> → <destUrl, Inlinks>
  搜集外部对本页面的链接Inlinks格式:<srcUrl, anchorText>
  Reduce() 添加inlinks
  输出: <url, Inlinks>

7。建立索引(Index)

MapReduce:
  目标:生成Lucene索引
  输入: 多种文件格式
  parse处理完的<url, ParseData> 提取title, metadata信息等
  parse处理完的<url, ParseText> 提取text内容
  转换链接处理完的<url, Inlinks> 提取anchors
  抓取内容处理完的<url, CrawlDatum> 提取抓取时间.
  Map() 用ObjectWritable包裹上面的内容
  Reduce() 调用Nutch的索引插件,生成Lucene Document文档
  输出: 输出Lucene索引

http://hi.baidu.com/lushaojin/blog/item/e5a13a292d0e6cfb98250ada.html

分享到:
评论

相关推荐

    大数据技术 Hadoop开发者第二期 Nutch MapReduce HDFS Hive Mahout HBase 共64页.r

    这六个组件共同构成了一个完整的Hadoop生态系统,它们相互配合,从数据采集(Nutch)、存储(HDFS)、计算(MapReduce)、分析(Hive)、智能处理(Mahout)到实时访问(HBase),覆盖了大数据处理的全生命周期。...

    nutch 初学文档教材

    4. nutch基本原理分析...23 4.1 nutch的基本组成.23 4.2 nutch工作流程.....23 5. nutch工作流程分析...25 5.1 爬虫...25 5.1.1 工作策略...25 5.1.2 工作流程分析....25 5.1.3 其它..27 5.2 索引...27 5.2.1 索引...

    Nutch入门教程.pdf

    基本原理分析部分详细介绍了Nutch的工作流程,包括爬虫的工作策略和流程、索引的主要过程以及搜索和分析的过程。索引部分特别提到了倒排索引(inverted index)的构建过程,它是搜索引擎中用于快速检索的关键技术之...

    nutch

    Nutch 利用 Hadoop MapReduce 进行分布式任务执行,同时,HBase 通常用于存储 Nutch 的索引数据,提供实时查询功能。 **Nutch 的使用** 学习 Nutch 需要掌握 Hadoop 相关知识,包括配置 Hadoop 环境、理解 ...

    nutch入门.pdf

    Nutch在开发过程中借鉴了学术派和工业派的知识,其核心部分使用MapReduce模型重新实现,展示了分布式处理模型的应用,并吸引了大量研究者尝试新的搜索算法。 扩展性:Nutch的灵活性很高,允许用户根据自己的需求...

    nutch开发资料 搜索引擎

    5. **Nutch源码结构**:压缩包中的"src"目录很可能包含了Nutch的源代码,这包括了各种模块,如爬虫模块(fetcher)、解析模块(parser)、索引模块(indexer)等。开发者可以通过阅读源码理解其内部机制,并进行二次...

    nutch入门教程

    Nutch提供了API接口,允许开发者集成Nutch的功能到自己的应用程序中,或者创建基于Nutch的服务和应用。 #### 结论 Nutch作为一个强大的搜索引擎框架,提供了丰富的功能和工具,使得构建和运行搜索引擎变得相对简单...

    apache-nutch-2.3

    在 Apache Nutch 2.3 中,主要涉及以下几个关键知识点: 1. **网络爬虫架构**:Nutch 采用分层架构设计,包括爬虫、解析器、索引器等多个组件。这些组件协同工作,实现了从发现网页到建立索引的全过程。 2. **URL...

    Nutch入门教程 高清 带书签

    Nutch是Apache软件基金会开发的一款开源搜索引擎项目,主要用于网络数据抓取和索引。这个“Nutch入门教程 高清 带书签”的资源...这份高清带书签的教程,将是你学习Nutch的最佳伙伴,帮助你在实践中逐步掌握这一技术。

    nutch爬虫资料

    参考书中可能涉及的主题有Nutch配置、爬虫优化、抓取策略、数据存储和检索机制。例如,可能会讲解如何定制Nutch的配置文件以适应特定的抓取需求,如何避免重复抓取和IP封锁问题,以及如何调整抓取速度和深度。此外,...

    Nutch+solr + hadoop相关框架搭建教程

    Nutch 使用 Hadoop MapReduce 模型来并行处理任务,如网页抓取、解析、索引等。通过 Nutch 脚本,我们可以将 Apache-nutch-1.6.job 提交给 Hadoop 的 JobTracker 进行执行。 【Solr】 Apache Solr 是一个基于 ...

    nutch的源代码解析

    Injector 类在 Nutch 中的作用是将输入的 URL 集合并入到 CrawlDB(爬取数据库)中。这个过程主要包括三个主要步骤: 1. **URL 格式化和过滤**:Injector 会接收一个包含 URL 的文本文件,对这些 URL 进行标准化...

    nutch-1.5.1源码

    源码中可以看到如何使用MapReduce处理抓取、索引和搜索任务。 6. **配置与插件(Configuration & Plugins)**:Nutch允许开发者通过配置文件定制爬虫的行为,并提供了一套插件系统,方便扩展其功能。例如,你可以...

    nutch2.2.1

    Nutch 2.2.1 是一个开源的网络爬虫项目,主要用于收集、索引和分析互联网上的数据。这个未编译的代码包是给那些对Nutch不太熟悉的开发者准备的,让他们有机会深入理解Nutch的工作原理并进行自定义开发。 Nutch的...

    搜索引擎nutch配置

    Nutch在运行过程中会产生大量的日志,通过分析这些日志,可以了解爬虫的运行状态,如抓取速率、错误信息等。 10. **优化与调试** 根据需求,可能需要调整Nutch的抓取策略、抓取深度、并发度等参数,以达到最佳...

    nutch1.2源码

    Nutch 1.2是该项目的一个稳定版本,提供了许多改进和优化,使得它在搜索引擎构建、数据分析等领域具有广泛应用。 一、Nutch概述 Nutch是由Apache软件基金会开发的开源Web爬虫项目,主要用于抓取互联网上的网页并...

    apache-nutch

    2. **MapReduce**:Nutch 把爬虫任务分解为多个MapReduce作业,分发到集群中的各个节点执行,提高处理速度。 3. **Gora持久化**:Nutch 使用Gora进行数据持久化,将抓取的网页数据存储在HDFS上。 **三、Nutch 索引...

    nutch1.6源码

    7. **Hadoop集成**:Nutch 1.6充分利用了Hadoop的MapReduce框架,将大型任务分解为小任务并在集群中并行处理。这使得Nutch能够处理海量的网页数据。 8. **配置与插件系统**:Nutch允许用户自定义配置和编写插件,以...

    apache-nutch-1.4

    - **MapReduce**:Nutch的大部分处理任务都是通过Hadoop的MapReduce模型执行的,实现了并行处理和容错性。 4. **配置与插件体系** - **配置文件**:Nutch的运行依赖于一系列配置文件,如`conf/nutch-site.xml`,...

    基于Nutch 的插件系统的原理分析

    Nutch采用分布式文件系统HDFS(Hadoop Distributed File System)作为数据存储的基础,并利用Hadoop提供的MapReduce框架来进行数据处理。这样的设计不仅能够支持大规模的数据处理需求,还能够确保系统的稳定性和可靠...

Global site tag (gtag.js) - Google Analytics