nutch_
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Nutch实验过程与学习心得
1.1安装Nutch
1.1.1实验环境
Linux操作系统,采用的是VMWare虚拟机下的Ubuntu 10.10系统。
1.1.2安装的必要软件
1.JDK,本人采用的是JDK1.6版本,为了方便大家学习,给出软件的
下载链接,在下载时,注意选择linux下的版本,不要选择windows
的版本,此次实验下载的是jdk-6u13-linux-i586.bin。
/technetwork/java/javase/downloads/index.html
2.Tomcat,采用的是apache-tomcat-6.0版本,此次实验选择的是
apache-tomcat-6.0.32.tar.gz。
/
3.Nutch, 采用的是apache-nutch-1.1版本,此次实验选择的是
apache-nutch-1.1-bin.tar.gz。
/
4.最后尽量采用较新的版本,否则,可能出现其他问题。
1.1.3软件的安装方法和安装过程
1.安装JDK
1)将下载好的jdk的bin文件放到虚拟机环境下,例如,可以放在/home
目录下(虚拟机和主机之间的文件传递可以简单通过U盘或移动硬
盘,当然还有其他很多种方法,可自行选择)。
2)到jdk的bin文件目录下,执行命令,安装jdk。
安装命令:
[root@localhost -]#sh jdk-6u13-linux-i586.bin
一直按Enter键,知道需要选择yes or no,选择也是即可。
(注意:如果对于linux不太熟悉,最简单的方法就是在操作界面中启动终端,应用程序->附件->终端,然后即可再次之下输入命令行了。
一般情况下,进入终端后的结果:
andy是本人linux系统下用户名,每个人都不同。
先获取root权限,命令如下:
andy@andy-virtual-machine:~$ sudo –sH
并且需要输入password,输入的password是不会在终端中显示的,命令执行后的结果:
此时,已获得root权限。
)
3)修改环境变量,在etc/environment文件中修改,如果在用户界面中直
接点开,用可能是只读形式,所以不能修改,需在命令行窗口打开。
首先,转到etc目录下,根据自己的情况,输入cd命令,例如,从当
前目录andy转到etc目录下,
命令如下:
[root@andy-virtual-machine:/home/andy]# cd ../../etc
打开environment文件,
命令如下:
[root@andy-virtual-machina:/etc]# gedit environment
在文件environment中修改:在PATH 中追加路径配置,添加
CLASSPAHT和JA V A_HOME配置,根据自己jdk的路径配置,这里
以我自己的路径配置为例。
PATH=“...:/home/andy/jdk1.6.0_13/bin”
CLASSPATH=.:/home/andy/jdk1.6.0_13/lib
JA V A_HOME=/home/andy/ jdk1.6.0_13 /
4)由于ubuntu可能会有默认的jdk,所以要将默认的jdk改成已经安装
好的jdk。
命令如下:
[root@andy-virtual-machine:~]# update-alternatives --install /usr/bin/java
java /home/andy/ jdk1.6.0_13/bin/java 300
[root@andy-virtual-machine:~]# update-altenatives –install /usr/bin/java
java /home/andy/ jdk1.6.0_13/bin/javac 300
再将安装的jdk加入到java选单中。
命令如下:
[root@andy-virtual-machine:~]# update-alternatives --config java
5)查看jdk是否安装成功
命令如下:
[root@andy-virtual-machine:~]# java –version
如果出现下列结果,jdk安装成功。
2.安装nutch
1)将下载好的文件apache-nutch-1.1-bin.tar.gz放到虚拟机环境下,在
apache-nutch-1.1-bin.tar.gz文件目录下解压,本例中文件放在/home/andy目录下。
命令如下:
[root@andy-virtual-machina:/home/andy]# tar zxvf apache-nutch-1.1- bin.tar.gz
2)为了方便以后命令行的输入,可以将安装好的文件夹更改名称,这样
安装好的文件夹的名称就是nutch了。
命令如下:
[root@andy-virtual-machina:/home/andy]# mv 原文件名称nutch
3)Nutch命令的测试,nutch文件夹目录下。
命令如下:
[root@andy-virtual-machina:/home/andy/nutch]# bin/nutch
3.安装tomcat
1)将下载好的文件apache-tomcat-6.0.32.tar.gz放到虚拟机环境下,在
apache-tomcat-6.0.32.tar.gz文件目录下解压,本例中文件放在/home/andy目录下。
命令如下:
[root@andy-virtual-machina:/home/andy]# tar zvxf apache-tomcat-
6.0.32.tar.gz
2)更改安装好的文件夹名称。
命令如下:
[root@andy-virtual-machina:/home/andy/]# mv 原文件名称tomcat
3)将nutch自带的.war文件拷贝到tomcat的webapps文件夹下。
命令如下:
[root@andy-virtual-machina:/home/andy/]# cd tomcat/webapps
[root@andy-virtual-machina:~]#rm –rf ROOT*
[root@andy-virtual-machina:~webapps]# cp ../../nutch/nutch*.war
ROOT.war
4)启动和关闭tomcat,在bin目录下,start catalina.sh。
命令如下:
[root@andy-virtual-machina:/home/andy/tomcat/bin]# catalina.sh start
[root@andy-virtual-machina:/home/andy/tomcat/bin]# catalina.sh stop
5)在浏览器中,打开http://localhost:8080(其中8080是tomcat的默认
端口号)。
1.2Nutch 爬行实验
1.2.1简单的爬行实验过程
1.对nutch进行配置
1)在nutch目录下进行,增加抓取页面,在本次实验中采用的是。
首先,增加一个url文件,在这里先增加一个目录urls,然后再在该
目录下添加一个文件,文件名为sohu,将要抓取的页面
写入其中。
命令如下:
[root@andy-virtual-machina:/home/andy/nutch]# mkdir urls
[root@andy-virtual-machina:/home/andy/nutch]# echo http://www.sohu.
com/>>urls/sohu
也可以使用gedit命令,添加文件。
2)改写nutch/conf目录下的crawl-urlfilter.txt文件,设定抓取信息。
命令如下:
[root@andy-virtual-machina:/home/andy/nutch]# gedit conf/crawl-
urlfilter.txt
修改为
# accept hosts in
+^http://([a-z0-9]*\.)*/
3)改写nutch/conf目录下的nutch-default.xml文件,设定搜索目录,例
如,搜索目录名称定为crawl,可以自定义名称,但是要与下面的tomcat 设置相同。
命令如下:
[root@andy-virtual-machina:/home/andy/nutch]# gedit conf/nutch-default .xml
修改文件中的搜索目录。
<property>
<name>searcher.dir</name>
<value>crawl</value>
</property>
2.对tomcat进行配置
1)设定搜索目录,要与nutch-default.xml中设定的相同,此时要在tomcat
目录下进行设置。
命令如下:
[root@andy-virtual-machina:/home/andy/tomcat]# gedit webapps/RO OT/WEB-INF/classes/nutch-site.xml
添加或修改部分代码,如下:
<configuration>
<property>
<name>searcher.dir</name>
<value>/home/andy/nutch/crawl<value>
</property>
</configuration>
3.开始抓取网站,以为例。
1)爬行命令,在nutch文件目录下,进行。
命令如下:
[root@andy-virtual-machina:/home/andy/nutch]# bin/nutch crawl urls -dir crawl -depth 2 -threads 4 -topN 50 >& crawl.log
Urls表示存放网址的文件目录;
-dir crawl表示抓取后结果的存放记录;
-depth表示爬行的深度;
-threads表示并发进程;
-topN表示每层上抓取的最大页面数。
1.3Nutch爬行实验结果
1.3.1实验结果
1.在crawl.log中记录如下。
crawl started in: crawl.demo3
rootUrlDir = urls
threads = 4
depth = 2
indexer=lucene
topN = 50
Injector: starting
Injector: crawlDb: crawl.demo3/crawldb
Injector: urlDir: urls
Injector: Converting injected urls to crawl db entries.
Injector: Merging injected urls into crawl db.
Injector: done
Generator: Selecting best-scoring urls due for fetch.
Generator: starting
Generator: filtering: true
Generator: normalizing: true
Generator: topN: 50
Generator: jobtracker is 'local', generating exactly one partition.
Generator: Partitioning selected urls for politeness.
Generator: segment: crawl.demo3/segments/20110311092949
Generator: done.
Fetcher: Your '' value should be listed first in
'http.robots.agents' property.
Fetcher: starting
Fetcher: segment: crawl.demo3/segments/20110311092949
Fetcher: threads: 4
QueueFeeder finished: total 1 records + hit by time limit :0
fetching /
-finishing thread FetcherThread, activeThreads=2
-finishing thread FetcherThread, activeThreads=1
-finishing thread FetcherThread, activeThreads=1
-activeThreads=1, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=1, spinWaiting=0, fetchQueues.totalSize=0
-finishing thread FetcherThread, activeThreads=0
-activeThreads=0, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=0
Fetcher: done
CrawlDb update: starting
CrawlDb update: db: crawl.demo3/crawldb
CrawlDb update: segments: [crawl.demo3/segments/20110311092949] CrawlDb update: additions allowed: true
CrawlDb update: URL normalizing: true
CrawlDb update: URL filtering: true
CrawlDb update: Merging segment data into db.
CrawlDb update: done
Generator: Selecting best-scoring urls due for fetch.
Generator: starting
Generator: filtering: true
Generator: normalizing: true
Generator: topN: 50
Generator: jobtracker is 'local', generating exactly one partition. Generator: Partitioning selected urls for politeness.
Generator: segment: crawl.demo3/segments/20110311093014 Generator: done.
Fetcher: Your '' value should be listed first in 'http.robots.agents' property.
Fetcher: starting
Fetcher: segment: crawl.demo3/segments/20110311093014
Fetcher: threads: 4
QueueFeeder finished: total 50 records + hit by time limit :0
fetching /
fetching
/bill/s2010/jiedong/mkt/neitui/4501050708.swf fetching /
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=46
fetching /bill/s2011/lilixing/dianxin/4501050211.swf Error parsing: /bill/s2010/jiedong/mkt/neitui/4501050708.swf: failed(2,0): Can't retrieve Tika parser for mime-type application/x-shockwave-flash
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=44
Error parsing: /bill/s2011/lilixing/dianxin/4501050211.swf:
failed(2,0): Can't retrieve Tika parser for mime-type application/x-shockwave-flash
fetching /
fetching /
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=41
fetching /
fetching /videoshow/33533.html fetching /
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=37 fetching /
fetching /
fetching /
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=33 fetching /
fetching /
fetching /
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=29 fetching /
fetching /
fetching /
fetching /
fetching /20110303/n279634880.shtml -activeThreads=4, spinWaiting=0, fetchQueues.totalSize=24 fetching /
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=22 fetching /
fetching /
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=19 fetching /
fetching /passport/pp18030_31.js
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=17 fetching /
fetching /mobile.shtml
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=15 fetching /
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=13 fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=12 -activeThreads=4, spinWaiting=0, fetchQueues.totalSize=12 -activeThreads=4, spinWaiting=0, fetchQueues.totalSize=12 fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=11 fetching /
fetching /
fetching /
fetching /
fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=6
fetching /
fetching /20110302/n279605838.shtml fetching /));sohuFlash1.write(
fetching /passport/pi18030.201011300952.js fetching /
-activeThreads=4, spinWaiting=0, fetchQueues.totalSize=1
* queue:
maxThreads = 1
inProgress = 0
crawlDelay = 1000
minCrawlDelay = 0
nextFetchTime = 1299807018652
now = 1299807036805
0. /
fetching /
-finishing thread FetcherThread, activeThreads=3
-finishing thread FetcherThread, activeThreads=2
-activeThreads=2, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=2, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=2, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=2, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=2, spinWaiting=0, fetchQueues.totalSize=0
-finishing thread FetcherThread, activeThreads=1
-activeThreads=1, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=1, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=1, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=1, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=1, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=1, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=1, spinWaiting=0, fetchQueues.totalSize=0
-finishing thread FetcherThread, activeThreads=0
-activeThreads=0, spinWaiting=0, fetchQueues.totalSize=0
-activeThreads=0
Fetcher: done
CrawlDb update: starting
CrawlDb update: db: crawl.demo3/crawldb
CrawlDb update: segments: [crawl.demo3/segments/20110311093014] CrawlDb update: additions allowed: true
CrawlDb update: URL normalizing: true
CrawlDb update: URL filtering: true
CrawlDb update: Merging segment data into db.
CrawlDb update: done
LinkDb: starting
LinkDb: linkdb: crawl.demo3/linkdb
LinkDb: URL normalize: true
LinkDb: URL filter: true
LinkDb: adding segment: file:/home/andy/nutch/crawl.demo3/segments/20110311093014
LinkDb: adding segment: file:/home/andy/nutch/crawl.demo3/segments/20110311092949
LinkDb: done
Indexer: starting
Indexer: done
Dedup: starting
Dedup: adding indexes in: crawl.demo3/indexes
Dedup: done
merging indexes to: crawl.demo3/index
Adding file:/home/andy/nutch/crawl.demo3/indexes/part-00000
done merging
crawl finished: crawl.demo3
2.浏览器测试结果。
输入sohu,进行搜索,结果如下:
1.4实验心得和问题解决方案
1.4.1问题的解决方案。
1.Tomcat服务器未能开启,可能导致浏览器的http 404错误。
1)Tomcat服务器默认的端口号是8080,在一些情况下,8080可能端口
号被占用,导致服务器未能开启,在排查问题的过程中,最好打开
tomcat/log目录下的日子文件,能够观察到服务器未能开启的原因,
根据不同的原因,解决不同的方案。
2)若要更改tomcat服务器的默认端口,修改tomcat/conf目录下
server.xml文件即可,将有8080端口号改成自己定义的端口号。
2.虽然成功的进行了爬行抓取,但是仍然没有在服务器中进行结果搜索
却没有搜索到任何结果。
1)要注意设定搜索目录,否则,不会出现搜索结果。
2)以下两条命令很容易就忘记做,导致不会出现搜索结果
[root@andy-virtual-machina:/home/andy/tomcat]# gedit webapps/RO
OT/WEB-INF/classes/nutch-site.xml
[root@andy-virtual-machina:/home/andy/nutch]# gedit conf/nutch-default
.xml
修改文件中的搜索目录。
<property>
<name>searcher.dir</name>
<value>crawl</value>
</property>
1.4.2实验心得
整个实验在进行软件安装和软件配置的步骤繁琐,忽略了任意一点就有可能导致整个实验过程无法进行。
总结出检查各个软件的安装和配
置的最好方法,就是学会查看各个log文件,在log文件中找出问题的所
在,进行改进。
以上的总结只是对nutch的安装,配置和抓取过程进行
了简要的描述,对于nutch的使用不能仅局限于此,nutch中还有很多的
指令和抓取方法,还要继续学习。