Nutch在Eclipse上的开发调试环境配置手册
Eclipse虽然可以正确导入Nutch的工程目录,但是在执行的时候会由于output的class路径问题,而造成如classnotfoud或者找不到plugin目录的情况,下面总结一下如何正确的使用Eclipse搭建Nutch的编译和调试环境:
工程导入和配置文件修改
1. File->New->Project->Java Project 选择在已有代码目录上创建工程,jdk版本为1.6以上
2. 在Libraries页Add Class Folder把conf文件夹加入,在Order and Export页把conf置顶,Finish
3. 分别修改core-site.xml,hdfs-site.xml,mapred-site.xml,nutch-site.xml
core-site.xml |
<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property>
<property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-0.20.2/usr/tmp</value> </property> </configuration> |
hdfs-site.xml |
<configuration> <property> <name>dfs.data.dir</name> <value>/usr/local/hadoop-0.20.2/usr/data</value> </property>
<property> <name>dfs.name.dir</name> <value>/usr/local/hadoop-0.20.2/usr/name</value> </property>
<property> <name>dfs.replication</name> <value>2</value> </property> </configuration> |
mapred-site.xml |
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property>
<property> <name>mapred.local.dir</name> <value>/usr/local/hadoop-0.20.2/usr/mapred</value> </property>
<property> <name>mapred.map.tasks</name> <value>40</value> </property>
<property> <name>mapred.reduce.tasks</name> <value>4</value> </property> </configuration> |
nutch-site.xml |
<configuration> <property> <name>http.agent.name</name> <value>nutch-1.2</value> </property>
<property> <name>searcher.dir</name> <value>/user/root/data</value> </property> </configuration> |
4. 修改masters,slaves,crawl-urlfilter文件,单机伪集群环境下按如下方式配置:
masters |
localhost |
slaves |
localhost |
crawl-urlfilter.txt |
# skip URLs containing certain characters as probable queries, etc. #-[?*!@=]
# accept hosts in MY.DOMAIN.NAME #+^http://([a-z0-9]*/.)*MY.DOMAIN.NAME/ +^http://([a-z0-9]*/.)*tgbus.com/ +^http://([a-z0-9]*/.)*csdn.net/ |
5. 用Ant执行根目录下的build.xml,run as -> ant build
6. 在build path下,把生成出来的build目录加入到class folder
7. 单步调试的方法[1]
a) 单步调试所有map/reduce任务的方法:
修改mapred-site.xml文件中的mapred.job.tracker的value为local
b) 单步调试某个特定的task的方法:
修改代码,在new JobConf后,加入一行代码:
conf.set("mapred.job.tracker", "local"); |
分步调试Nutch的爬虫和索引过程
Nutch从爬虫到建立索引的整个过程比较复杂,包括多个子过程,如果直接执行crawl命令,会顺序执行从爬虫到建立索引的所有子过程,若出现问题,不易定位和调试。为此,Nutch提供分步执行每个子过程的方法,下面详细说明在Eclipse中Run Configurations的配置方法:
0. 索引目录结构
按照上文的配置,索引文件在hadoop上的根目录为/user/root/data
├─crawldb
│ └─current
│ └─part-00000
├─index
├─indexes
│ └─part-00000
├─linkdb
│ └─current
│ └─part-00000
└─segments
└─20101213101132
其中index和indexes是nutch搜索时的默认搜索路径,nutch搜索时只能指定索引文件的根目录,不能指定具体的index目录。
1. injector过程
Name: 1.injector
Main class: org.apache.nutch.crawl.Injector
Arguments: data/crawldb urls/url1
参数说明:data为建立索引时的根目录,urls为自己建立的存放url入口地址文件的目录
2. generator过程
Name: 2.generator
Main class: org.apache.nutch.crawl.Generator
Arguments: data/crawldb data/segments -topN 10
3. fetcher过程
Name: 3.fetch
Main class: org.apache.nutch.fetch.Fetcher
Arguments: data/segments/20101213101132
参数说明:20101213101132为segments目录下按时间生成的子目录
4. updatedb过程
Name: 4.updatedb
Main class: org.apache.nutch.crawl.CrawlDb
Arguments: data/crawldb data/segments/20101213101132
5. invertlinks过程
Name: 5.invertlinks
Main class: org.apache.nutch.crawl.LinkDb
Arguments: data/linkdb data/segments/*
6. index过程
Name: 6.invertlinks
Main class: org.apache.nutch.crawl.LinkDb
Arguments: data/indexes data/crawldb data/linkdb data/segments/*
VM Arguments: -Xms250m –Xmx512m
参数说明:Data/Indexes目录可随意指定,但搜索时,nutch默认只会检索index或indexes,需要单独测试索引时,可以通过hadoop的rmr命令删除该目录,再重新单独执行index。增加了中文分词后,执行索引操作时容易出现内存不足的情况,抛出的异常是IO Exception,通过查看hadoop.log可以看到Out of memory的log,因此需要在VM Arguments中增加对Eclipse使用内存的扩展。
7. 查看索引状态的方法
a) 查看crawldb
Name: 0.readdb
Main class: org.apache.nutch.crawl.CrawlDbReader
Arguments: data/crawldb -stats
b) 查看segment
Name: 0.readseg
Main class: org.apache.nutch.segment.SegmentReader
Arguments: -list data/segments/20101213101132
Reference
[1] http://wiki.apache.org/hadoop/HowToDebugMapReducePrograms