2

在分布式(部署)模式下进行 Nutch 爬网后如下:

bin/nutch crawl s3n://..... -depth 10 -topN 50000 -dir /crawl -threads 20 

我需要以地图缩减友好格式提取每个获取的 URL 及其内容。通过使用下面的 readseg 命令,可以获取内容,但输出格式不适合映射缩减。

bin/nutch readseg -dump /crawl/segments/*  /output  -nogenerate -noparse -noparsedata -noparsetext

理想情况下,输出应采用以下格式:

http://abc.com/1     content of http://abc.com/1
http://abc.com/2     content of http://abc.com/2

关于如何实现这一目标的任何建议?

4

2 回答 2

0

bin/nutch readseg命令以人类可读格式而不是 map reduce 格式生成输出。数据以 map-reduce 格式存储在段中。我不认为您可以直接从 map-reduce 格式的段中提取该信息。

您关心的几个选项:

  1. 段本身就是 map-reduce 格式文件。你能重复使用那些吗?
  2. readseg通过编写一个小的 map-reduce 代码,可以将命令的输出转换为 map-reduce 形式。
于 2012-04-12T05:45:14.077 回答
0

答案在于调整 nutch 的源代码。事实证明这很简单。导航到SegmentReader.java文件apache-nutch-1.4-bin/src/java/org/apache/nutch/segment

类内部SegmentReader是一个方法reduce,负责生成bin/nutch readseg命令生成的人类可读输出。更改StringBuffer dump您认为合适的变量 - 这包含由key变量表示的给定 url 的整个输出。

确保您运行ant以创建一个新的二进制文件,并进一步调用以bin/nutch readseg您的自定义格式生成输出。

这些参考在浏览代码时非常有用:
[1] http://nutch.apache.org/apidocs-1.4/overview-summary.html
[2] http://nutch.apache.org/apidocs-1.3/index -all.html

于 2012-04-12T22:41:19.963 回答