作者:马士华
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)、存储(HDFS)、计算(MapReduce)、分析(Hive)、智能处理(Mahout)到实时访问(HBase),覆盖了大数据处理的全生命周期。...
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的工作流程,包括爬虫的工作策略和流程、索引的主要过程以及搜索和分析的过程。索引部分特别提到了倒排索引(inverted index)的构建过程,它是搜索引擎中用于快速检索的关键技术之...
Nutch 利用 Hadoop MapReduce 进行分布式任务执行,同时,HBase 通常用于存储 Nutch 的索引数据,提供实时查询功能。 **Nutch 的使用** 学习 Nutch 需要掌握 Hadoop 相关知识,包括配置 Hadoop 环境、理解 ...
Nutch在开发过程中借鉴了学术派和工业派的知识,其核心部分使用MapReduce模型重新实现,展示了分布式处理模型的应用,并吸引了大量研究者尝试新的搜索算法。 扩展性:Nutch的灵活性很高,允许用户根据自己的需求...
5. **Nutch源码结构**:压缩包中的"src"目录很可能包含了Nutch的源代码,这包括了各种模块,如爬虫模块(fetcher)、解析模块(parser)、索引模块(indexer)等。开发者可以通过阅读源码理解其内部机制,并进行二次...
Nutch提供了API接口,允许开发者集成Nutch的功能到自己的应用程序中,或者创建基于Nutch的服务和应用。 #### 结论 Nutch作为一个强大的搜索引擎框架,提供了丰富的功能和工具,使得构建和运行搜索引擎变得相对简单...
在 Apache Nutch 2.3 中,主要涉及以下几个关键知识点: 1. **网络爬虫架构**:Nutch 采用分层架构设计,包括爬虫、解析器、索引器等多个组件。这些组件协同工作,实现了从发现网页到建立索引的全过程。 2. **URL...
Nutch是Apache软件基金会开发的一款开源搜索引擎项目,主要用于网络数据抓取和索引。这个“Nutch入门教程 高清 带书签”的资源...这份高清带书签的教程,将是你学习Nutch的最佳伙伴,帮助你在实践中逐步掌握这一技术。
参考书中可能涉及的主题有Nutch配置、爬虫优化、抓取策略、数据存储和检索机制。例如,可能会讲解如何定制Nutch的配置文件以适应特定的抓取需求,如何避免重复抓取和IP封锁问题,以及如何调整抓取速度和深度。此外,...
Nutch 使用 Hadoop MapReduce 模型来并行处理任务,如网页抓取、解析、索引等。通过 Nutch 脚本,我们可以将 Apache-nutch-1.6.job 提交给 Hadoop 的 JobTracker 进行执行。 【Solr】 Apache Solr 是一个基于 ...
Injector 类在 Nutch 中的作用是将输入的 URL 集合并入到 CrawlDB(爬取数据库)中。这个过程主要包括三个主要步骤: 1. **URL 格式化和过滤**:Injector 会接收一个包含 URL 的文本文件,对这些 URL 进行标准化...
源码中可以看到如何使用MapReduce处理抓取、索引和搜索任务。 6. **配置与插件(Configuration & Plugins)**:Nutch允许开发者通过配置文件定制爬虫的行为,并提供了一套插件系统,方便扩展其功能。例如,你可以...
Nutch 2.2.1 是一个开源的网络爬虫项目,主要用于收集、索引和分析互联网上的数据。这个未编译的代码包是给那些对Nutch不太熟悉的开发者准备的,让他们有机会深入理解Nutch的工作原理并进行自定义开发。 Nutch的...
Nutch在运行过程中会产生大量的日志,通过分析这些日志,可以了解爬虫的运行状态,如抓取速率、错误信息等。 10. **优化与调试** 根据需求,可能需要调整Nutch的抓取策略、抓取深度、并发度等参数,以达到最佳...
Nutch 1.2是该项目的一个稳定版本,提供了许多改进和优化,使得它在搜索引擎构建、数据分析等领域具有广泛应用。 一、Nutch概述 Nutch是由Apache软件基金会开发的开源Web爬虫项目,主要用于抓取互联网上的网页并...
2. **MapReduce**:Nutch 把爬虫任务分解为多个MapReduce作业,分发到集群中的各个节点执行,提高处理速度。 3. **Gora持久化**:Nutch 使用Gora进行数据持久化,将抓取的网页数据存储在HDFS上。 **三、Nutch 索引...
7. **Hadoop集成**:Nutch 1.6充分利用了Hadoop的MapReduce框架,将大型任务分解为小任务并在集群中并行处理。这使得Nutch能够处理海量的网页数据。 8. **配置与插件系统**:Nutch允许用户自定义配置和编写插件,以...
- **MapReduce**:Nutch的大部分处理任务都是通过Hadoop的MapReduce模型执行的,实现了并行处理和容错性。 4. **配置与插件体系** - **配置文件**:Nutch的运行依赖于一系列配置文件,如`conf/nutch-site.xml`,...
Nutch采用分布式文件系统HDFS(Hadoop Distributed File System)作为数据存储的基础,并利用Hadoop提供的MapReduce框架来进行数据处理。这样的设计不仅能够支持大规模的数据处理需求,还能够确保系统的稳定性和可靠...