nutch分析.docx

上传人:b****0 文档编号:12447384 上传时间:2023-04-19 格式:DOCX 页数:92 大小:110.98KB
下载 相关 举报
nutch分析.docx_第1页
第1页 / 共92页
nutch分析.docx_第2页
第2页 / 共92页
nutch分析.docx_第3页
第3页 / 共92页
nutch分析.docx_第4页
第4页 / 共92页
nutch分析.docx_第5页
第5页 / 共92页
点击查看更多>>
下载资源
资源描述

nutch分析.docx

《nutch分析.docx》由会员分享,可在线阅读,更多相关《nutch分析.docx(92页珍藏版)》请在冰豆网上搜索。

nutch分析.docx

nutch分析

Nutch分析

1Nutch简介2

1.1nutch体系结构2

2抓取部分3

2.1爬虫的数据结构及含义3

2.2抓取目录分析4

2.3抓取过程概述4

2.4抓取过程分析5

2.4.1inject方法6

2.4.2generate方法12

2.4.3fetch方法14

2.4.4parse方法16

2.4.5update方法16

2.4.6invert方法19

2.4.7index方法23

2.4.8dedup方法26

2.4.9merge方法30

3配置文件分析31

3.1nutch-default.xml分析31

3.1.1

--fileproperties-->31

3.1.2

--HTTPproperties-->32

3.1.3

--FTPproperties-->35

3.1.4

--webdbproperties-->37

3.1.5

--generateproperties-->41

3.1.6

--fetcherproperties-->42

3.1.7

--indexerproperties-->43

3.1.8

--indexingfilterpluginproperties-->45

3.1.9

--analysisproperties-->45

3.1.10

--searcherproperties-->45

3.1.11

--URLnormalizerproperties-->48

3.1.12

--mimeproperties-->48

3.1.13

--pluginproperties-->49

3.1.14

--parserproperties-->49

3.1.15

--urlfilterpluginproperties-->51

3.1.16

--scoringfiltersproperties-->52

3.1.17

--clusteringextensionproperties-->52

3.1.18

--ontologyextensionproperties-->53

3.1.19

--query-basicpluginproperties-->53

3.1.20

--creative-commonspluginproperties-->54

3.1.21

--query-morepluginproperties-->55

3.1.22

--microformats-reltagpluginproperties-->55

3.1.23

--language-identifierpluginproperties-->55

3.1.24

--TemporaryHadoop0.17.xworkaround.-->56

3.1.25

--responsewriterproperties-->56

3.2regex-urlfilter.txt解析58

3.3regex-normalize.xml解析58

3.4总结59

4参考资源59

1Nutch简介

1.1nutch体系结构

2抓取部分

2.1爬虫的数据结构及含义

爬虫系统是由Nutch的爬虫工具驱动的。

并且把构建和维护一些数据结构类型同一系列工具关联起来:

包括webdatabase、一系列的segment和index。

接下来我们将详细描述他们。

三者的物理文件分别存储在爬行结果目录下的crawldb文件夹内,segments文件夹和index文件夹内。

那么三者分别存储的信息是什么呢?

Webdatabase,也叫WebDB,其中存储的是爬虫所抓取网页之间的链接结构信息,它只在爬虫Crawler工作中使用而和Searcher的工作没有任何关系。

WebDB内存储了两种实体的信息:

page和link。

Page实体通过描述网络上一个网页的特征信息来表征一个实际的网页,因为网页有很多个需要描述,WebDB中通过网页的URL和网页内容的MD5两种索引方法对这些网页实体进行了索引。

Page实体描述的网页特征主要包括网页内的link数目,抓取此网页的时间等相关抓取信息,对此网页的重要度评分等。

同样的,Link实体描述的是两个page实体之间的链接关系。

WebDB构成了一个所抓取网页的链接结构图,这个图中Page实体是图的结点,而Link实体则代表图的边。

一次爬行会产生很多个segment,每个segment内存储的是爬虫Crawler在单独一次抓取循环中抓到的网页以及这些网页的索引。

Crawler爬行时会根据WebDB中的link关系按照一定的爬行策略生成每次抓取循环所需的fetchlist,然后Fetcher通过fetchlist中的URLs抓取这些网页并索引,然后将其存入segment。

Segment是有时限的,当这些网页被Crawler重新抓取后,先前抓取产生的segment就作废了。

在存储中。

Segment文件夹是以产生时间命名的,方便我们删除作废的segments以节省存储空间。

Index是Crawler抓取的所有网页的索引,它是通过对所有单个segment中的索引进行合并处理所得的。

Nutch利用Lucene技术进行索引,所以Lucene中对索引进行操作的接口对Nutch中的index同样有效。

但是需要注意的是,Lucene中的segment和Nutch中的不同,Lucene中的segment是索引index的一部分,但是Nutch中的segment只是WebDB中各个部分网页的内容和索引,最后通过其生成的index跟这些segment已经毫无关系了。

2.2抓取目录分析

抓取后一共生成5个文件夹,分别是:

●crawldb目录存放下载的URL,以及下载的日期,用来页面更新检查时间.

●linkdb目录存放URL的互联关系,是下载完成后分析得到的.

●segments:

存放抓取的页面,下面子目录的个数于获取的页面层数有关系,通常每一层页面会独立存放一个子目录,子目录名称为时间,便于管理.比如我这只抓取了一层页面就只生成了20090508173137目录.每个子目录里又有6个子文件夹如下:

Øcontent:

每个下载页面的内容。

Øcrawl_fetch:

每个下载URL的状态。

Øcrawl_generate:

待下载URL集合。

Øcrawl_parse:

包含来更新crawldb的外部链接库。

Øparse_data:

包含每个URL解析出的外部链接和元数据

Øparse_text:

包含每个解析过的URL的文本内容。

●indexs:

存放每次下载的独立索引目录

●index:

符合Lucene格式的索引目录,是indexs里所有index合并后的完整索引

2.3抓取过程概述

引用到的类主要有以下9个:

1、nutch.crawl.Inject

用来给抓取数据库添加URL的插入器

2、nutch.crawl.Generator

用来生成待下载任务列表的生成器

3、nutch.fetcher.Fetcher

完成抓取特定页面的抓取器

4、nutch.parse.ParseSegment

负责内容提取和对下级URL提取的内容进行解析的解析器

5、nutch.crawl.CrawlDb

负责数据库管理的数据库管理工具

6、nutch.crawl.LinkDb

负责链接管理

7、nutch.indexer.Indexer

负责创建索引的索引器

8、nutch.indexer.DeleteDuplicates

删除重复数据

9、nutch.indexer.IndexMerger

对当前下载内容局部索引和历史索引进行合并的索引合并器

2.4抓取过程分析

Crawler的工作原理主要是:

首先Crawler根据WebDB生成一个待抓取网页的URL集合叫做Fetchlist,接着下载线程Fetcher开始根据Fetchlist将网页抓取回来,如果下载线程有很多个,那么就生成很多个Fetchlist,也就是一个Fetcher对应一个Fetchlist。

然后Crawler根据抓取回来的网页WebDB进行更新,根据更新后的WebDB生成新的Fetchlist,里面是未抓取的或者新发现的URLs,然后下一轮抓取循环重新开始。

这个循环过程可以叫做“产生/抓取/更新”循环。

指向同一个主机上Web资源的URLs通常被分配到同一个Fetchlist中,这样的话防止过多的Fetchers对一个主机同时进行抓取造成主机负担过重。

另外Nutch遵守RobotsExclusionProtocol,网站可以通过自定义Robots.txt控制Crawler的抓取。

在Nutch中,Crawler操作的实现是通过一系列子操作的实现来完成的。

这些子操作Nutch都提供了子命令行可以单独进行调用。

下面就是这些子操作的功能描述以及命令行,命令行在括号中。

  1.创建一个新的WebDb(admindb-create).

  2.将抓取起始URLs写入WebDB中(inject).

  3.根据WebDB生成fetchlist并写入相应的segment(generate).

  4.根据fetchlist中的URL抓取网页(fetch).

  5.根据抓取网页更新WebDb(updatedb).

  6.循环进行3-5步直至预先设定的抓取深度。

  7.分析链接关系,生成反向链接.(此步1.0特有,具体作用?

  8.对所抓取的网页进行索引(index).

  9.在索引中丢弃有重复内容的网页和重复的URLs(dedup).

  10.将segments中的索引进行合并生成用于检索的最终index(merge).

Crawler详细工作流程是:

在创建一个WebDB之后(步骤1),“产生/抓取/更新”循环(步骤3-6)根据一些种子URLs开始启动。

当这个循环彻底结束,Crawler根据抓取中生成的segments创建索引(步骤8-10)。

在进行重复URLs清除(步骤9)之前,每个segment的索引都是独立的(步骤8)。

最终,各个独立的segment索引被合并为一个最终的索引index(步骤10)。

其中有一个细节问题,Dedup操作主要用于清除segment索引中的重复URLs,但是我们知道,在WebDB中是不允许重复的URL存在的,那么为什么这里还要进行清除呢?

原因在于抓取的更新。

比方说一个月之前你抓取过这些网页,一个月后为了更新进行了重新抓取,那么旧的segment在没有删除之前仍然起作用,这个时候就需要在新旧segment之间进行除重。

下边是在Crawl类设置断点调试每个方法的结果.

2.4.1inject方法

描述:

初始化爬取的crawldb,读取URL配置文件,把内容注入爬取数据库.

首先会找到读取URL配置文件的目录urls.如果没创建此目录,nutch1.0下会报错.

得到hadoop处理的临时文件夹:

/tmp/hadoop-Administrator/mapred/

日志信息如下:

2009-05-0815:

41:

36,640INFOInjector-Injector:

starting

2009-05-0815:

41:

37,031INFOInjector-Injector:

crawlDb:

20090508/crawldb

2009-05-0815:

41:

37,781INFOInjector-Injector:

urlDir:

urls

接着设置一些初始化信息.

调用hadoop包JobClient.runJob方法,跟踪进入JobClient下的submitJob方法进行提交整个过程.具体原理又涉及到另一个开源项目hadoop的分析,它包括了复杂的

MapReduce架构,此处不做分析。

查看submitJob方法,首先获得jobid,执行configureCommandLineOptions方法后会在上边的临时文件夹生成一个system文件夹,同时在它下边生成一个job_local_0001文件夹.执行writeSplitsFile后在job_local_0001下生成job.split文件.执行writeXml写入job.xml,然后执行jobSubmitClient.submitJob正式提交整个job流程,日志如下:

2009-05-0815:

41:

36,640INFOInjector-Injector:

starting

2009-05-0815:

41:

37,031INFOInjector-Injector:

crawlDb:

20090508/crawldb

2009-05-0815:

41:

37,781INFOInjector-Injector:

urlDir:

urls

2009-05-0815:

52:

41,734INFOInjector-Injector:

Convertinginjectedurlstocrawldbentries.

2009-05-0815:

56:

22,203INFOJvmMetrics-InitializingJVMMetricswithprocessName=JobTracker,sessionId=

2009-05-0816:

08:

20,796WARNJobClient-UseGenericOptionsParserforparsingthearguments.ApplicationsshouldimplementToolforthesame.

2009-05-0816:

08:

20,984WARNJobClient-Nojobjarfileset.Userclassesmaynotbefound.SeeJobConf(Class)orJobConf#setJar(String).

2009-05-0816:

24:

42,593INFOFileInputFormat-Totalinputpathstoprocess:

1

2009-05-0816:

38:

29,437INFOFileInputFormat-Totalinputpathstoprocess:

1

2009-05-0816:

38:

29,546INFOMapTask-numReduceTasks:

1

2009-05-0816:

38:

29,562INFOMapTask-io.sort.mb=100

2009-05-0816:

38:

29,687INFOMapTask-databuffer=79691776/99614720

2009-05-0816:

38:

29,687INFOMapTask-recordbuffer=262144/327680

2009-05-0816:

38:

29,718INFOPluginRepository-Plugins:

lookingin:

D:

\work\workspace\nutch_crawl\bin\plugins

2009-05-0816:

38:

29,921INFOPluginRepository-PluginAuto-activationmode:

[true]

2009-05-0816:

38:

29,921INFOPluginRepository-RegisteredPlugins:

2009-05-0816:

38:

29,921INFOPluginRepository-thenutchcoreextensionpoints(nutch-extensionpoints)

2009-05-0816:

38:

29,921INFOPluginRepository-BasicQueryFilter(query-basic)

2009-05-0816:

38:

29,921INFOPluginRepository-BasicURLNormalizer(urlnormalizer-basic)

2009-05-0816:

38:

29,921INFOPluginRepository-BasicIndexingFilter(index-basic)

2009-05-0816:

38:

29,921INFOPluginRepository-HtmlParsePlug-in(parse-html)

2009-05-0816:

38:

29,921INFOPluginRepository-SiteQueryFilter(query-site)

2009-05-0816:

38:

29,921INFOPluginRepository-BasicSummarizerPlug-in(summary-basic)

2009-05-0816:

38:

29,921INFOPluginRepository-HTTPFramework(lib-http)

2009-05-0816:

38:

29,921INFOPluginRepository-TextParsePlug-in(parse-text)

2009-05-0816:

38:

29,921INFOPluginRepository-Pass-throughURLNormalizer(urlnormalizer-pass)

2009-05-0816:

38:

29,921INFOPluginRepository-RegexURLFilter(urlfilter-regex)

2009-05-0816:

38:

29,921INFOPluginRepository-HttpProtocolPlug-in(protocol-http)

2009-05-0816:

38:

29,921INFOPluginRepository-XMLResponseWriterPlug-in(response-xml)

2009-05-0816:

38:

29,921INFOPluginRepository-RegexURLNormalizer(urlnormalizer-regex)

2009-05-0816:

38:

29,921INFOPluginRepository-OPICScoringPlug-in(scoring-opic)

2009-05-0816:

38:

29,921INFOPluginRepository-CyberNekoHTMLParser(lib-nekohtml)

2009-05-0816:

38:

29,921INFOPluginRepository-AnchorIndexingFilter(index-anchor)

2009-05-0816:

38:

29,921INFOPluginRepository-JavaScriptParser(parse-js)

2009-05-0816:

38:

29,921INFOPluginRepository-URLQueryFilter(query-url)

2009-05-0816:

38:

29,921INFOPluginRepository-RegexURLFilterFramework(lib-regex-filter)

2009-05-0816:

38:

29,921INFOPluginRepository-JSONResponseWriterPlug-in(response-json)

2009-05-0816:

38:

29,921INFOPluginRepository-RegisteredExtension-Points:

2009-05-0816:

38:

29,921INFOPluginRepository-NutchSummarizer(org.apache.nutch.searcher.Summarizer)

2009-05-0816:

38:

29,921INFOPluginRepository-NutchProtocol(org.apache.nutch.protocol.Protocol)

2009-05-0816:

38:

29,921INFOPluginRepository-NutchAnalysis(org.apache.nutch.analysis.NutchAnalyzer)

2009-05-0816:

38:

29,921INFOPluginRepository-NutchFieldFilter(org.apache.nutch.indexer.field.FieldFilter)

2009-05-0816:

38:

29,921INFOPluginRepository-HTMLParseFilter(org.apache.nutch.parse.HtmlParseFilter)

2009-05-0816:

38:

29,921INFOPluginRepository-NutchQueryFilter(org.apache.nutch.searcher.QueryFilter)

2009-05-0816:

38:

29,921INFOPluginRepository-NutchSearchResultsResponseWriter(org.apache.nutch.searcher.response.ResponseWriter)

2009-05-0816:

38:

29,921INFOPluginRepository-NutchURLNormalizer(.URLNormalizer)

2009-05-0816:

38:

29,921INFOPluginRepository-NutchURLFilter(.URLFilter)

2009-05-0816:

38:

29,921INFOPluginRepository-NutchOnlineSearchResultsClusteringPlugin(org.apache.nutch.clustering.OnlineClusterer)

2009-05-0816:

38:

29,921INFOPluginRepository-NutchIndexi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1