Nutch 1.0配置与运行

来源:互联网 发布:小鸣单车 知乎 编辑:程序博客网 时间:2024/05/18 03:23

http://blog.csdn.net/shirdrn/article/details/5922087

有一段时间没有关注Nutch了,借最近假期,尝试一下,以后可能会慢慢深入了解Nutch及其相关的内容(像Hadoop),话不多说,先把最简单配置的Nutch运行起来。 

这次下载了Nutch 1.0,貌似和之前版本在配置上有轻微的变化。

由于Nutch基于Hadoop项目,肯定需要满足Hadoop运行的一些配置,为了更能详细地说明实际的配置和运行过程,还是采用按步骤进行解释的方式来表达。我直接使用root帐户了,Linux为RHEL 5。

 

1、Linux系统无密码验证配置

 

启动命令行窗口,执行命令行: 

[plain] view plaincopy
  1. $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa   
  2. $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys   

然后执行如下命令: 

[plain] view plaincopy
  1. $ ssh localhost   

如果不需要使用密码登录,表示无密码验证配置成功。

 

2、配置Hadoop

 

(1)修改conf/hadoop-env.sh中JAVA_HOME

(2)修改conf/hadoop-site.xml的内容,如下所示:

[xhtml] view plaincopy
  1. <?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3.   
  4. <!-- Put site-specific property overrides in this file. -->  
  5.   
  6. <configuration>      
  7.   <property>      
  8.     <name>fs.default.name</name>      
  9.     <value>hdfs://localhost:9000</value>      
  10.   </property>     
  11.   <property>      
  12.     <name>mapred.job.tracker</name>      
  13.     <value>localhost:9001</value>      
  14.   </property>  
  15.   <property>      
  16.     <name>dfs.replication</name>      
  17.     <value>1</value>      
  18.   </property>   
  19. </configuration>  

 

 

3、配置Nutch

 

(1)配置conf/nutch-site.xml,内容如下所示: 

[xhtml] view plaincopy
  1. <?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3.   
  4. <!-- Put site-specific property overrides in this file. -->  
  5.   
  6. <configuration>  
  7.         <property>  
  8.                 <name>http.agent.name</name>  
  9.                 <value>z-hacker</value>  
  10.         </property>  
  11.         <property>  
  12.                 <name>http.agent.description</name>  
  13.                 <value>I'm z-hacker.</value>  
  14.         </property>  
  15.         <property>  
  16.                 <name>http.agent.url</name>  
  17.                 <value>www.z-hacker.com</value>  
  18.         </property>  
  19.         <property>  
  20.                 <name>http.agent.email</name>  
  21.                 <value>crawler@z-hacker.com</value>  
  22.         </property>  
  23. </configuration>  

其中,http.agent.name是必须配置的,其它为可选。

(2)配置conf/crawl-urlfilter.txt,修改如下一行即可: 

[plain] view plaincopy
  1. # accept hosts in MY.DOMAIN.NAME  
  2. +^http://([a-z0-9]*/.)*sina.com.cn/   

上述配置,表示抓取新浪的网页。

 

4、准备Nutch爬虫入口url文件

 

在当前目录下创建一个目录,例如urls,在url下面可以创建文本文件,文本文件中每行一个合法的url即可。

 

5、格式化HDFS文件系统

 

[plain] view plaincopy
  1. [root@localhost nutch-1.0]# bin/hadoop namenode -format   

如果第一次在本机Linux上运行,则不出错就应该没问题;如果第一次执行格式化,可能提示你是否重新格式化: 

Re-format filesystem in /tmp/hadoop-root/dfs/name ? (Y or N) Y 

输入Y即可,重新格式化。

 

6、启动Hadoop相关的5个后台进程

 

[root@localhost nutch-1.0]# bin/start-all.sh 

如果没有出错,表示成功,此时启动了5个后台进程,可以通过jps命令查看一下,是否是下面5个进程: 

[root@localhost nutch-1.0]# jps
15559 Jps
15407 JobTracker
15243 DataNode
15150 NameNode
15512 TaskTracker
15349 SecondaryNameNode
 

如果缺少某个,说明你的配置还是存在问题,需要查看日志。

例如,我的日志目录为logs,假如通过jps查看发现NameNode进程不存在,说明NameNode服务进程启动失败,查看/logs/hadoop-root-namenode-localhost.log日志文件,即可查明原因。

 

7、上传Nutch爬虫入口url目录

 

需要将本地准备好的爬虫入口目录(例如urls)及文件(目录urls下面存在url文件)上传到HDFS上,执行如下命令: 

[root@localhost nutch-1.0]# bin/hadoop fs -put urls/ urls 

如果没有发生异常,则上传成功。

 

8、简单模式启动Nutch

 

执行如下命令启动Nutch: 

[plain] view plaincopy
  1. [root@localhost nutch-1.0]# bin/nutch crawl urls -dir storeDir -depth 10 -threads 5 -topN 50 >&./logs/nutch.log   

上面,urls是上传的入口url的目录,storeDir是抓取下来的数据存储目录。

如果执行上述命令,查看日志,能够按照正确的流程执行,就表示配置运行成功了,可以通过如下命令查看日志: 

[plain] view plaincopy
  1. [root@localhost nutch-1.0]# tail -100f logs/nutch.log  
  2. crawl started in: storeDir  
  3. rootUrlDir = urls  
  4. threads = 5  
  5. depth = 10  
  6. topN = 50  
  7. Injector: starting  
  8. Injector: crawlDb: storeDir/crawldb  
  9. Injector: urlDir: urls  
  10. Injector: Converting injected urls to crawl db entries.  
  11. Injector: Merging injected urls into crawl db.  
  12. Injector: done  
  13. Generator: Selecting best-scoring urls due for fetch.  
  14. Generator: starting  
  15. Generator: segment: storeDir/segments/20101004091724  
  16. Generator: filtering: true  
  17. Generator: topN: 50  
  18. Generator: Partitioning selected urls by host, for politeness.  
  19. Generator: done.  
  20. Fetcher: Your 'http.agent.name' value should be listed first in 'http.robots.agents' property.  
  21. Fetcher: starting  
  22. Fetcher: segment: storeDir/segments/20101004091724  
  23. Fetcher: done  
  24. CrawlDb update: starting  
  25. CrawlDb update: db: storeDir/crawldb  
  26. CrawlDb update: segments: [storeDir/segments/20101004091724]  
  27. CrawlDb update: additions allowed: true  
  28. CrawlDb update: URL normalizing: true  
  29. CrawlDb update: URL filtering: true  
  30. CrawlDb update: Merging segment data into db.  
  31. CrawlDb update: done  
  32. Generator: Selecting best-scoring urls due for fetch.  
  33. Generator: starting  
  34. Generator: segment: storeDir/segments/20101004091902  
  35. Generator: filtering: true  
  36. Generator: topN: 50  
  37. Generator: Partitioning selected urls by host, for politeness.  
  38. Generator: done.  
  39. Fetcher: Your 'http.agent.name' value should be listed first in 'http.robots.agents' property.  
  40. Fetcher: starting  
  41. Fetcher: segment: storeDir/segments/20101004091902  
  42. Fetcher: done  
  43. CrawlDb update: starting  
  44. CrawlDb update: db: storeDir/crawldb  
  45. CrawlDb update: segments: [storeDir/segments/20101004091902]  
  46. CrawlDb update: additions allowed: true  
  47. CrawlDb update: URL normalizing: true  
  48. CrawlDb update: URL filtering: true  
  49. CrawlDb update: Merging segment data into db.  
  50. CrawlDb update: done  
  51. Generator: Selecting best-scoring urls due for fetch.  
  52. Generator: starting  
  53. Generator: segment: storeDir/segments/20101004092053  
  54. Generator: filtering: true  
  55. Generator: topN: 50  
  56. Generator: Partitioning selected urls by host, for politeness.  
  57. Generator: done.  
  58. Fetcher: Your 'http.agent.name' value should be listed first in 'http.robots.agents' property.  
  59. Fetcher: starting  
  60. Fetcher: segment: storeDir/segments/20101004092053  
  61. Fetcher: done  
  62. CrawlDb update: starting  
  63. CrawlDb update: db: storeDir/crawldb  
  64. CrawlDb update: segments: [storeDir/segments/20101004092053]  
  65. CrawlDb update: additions allowed: true  
  66. CrawlDb update: URL normalizing: true  
  67. CrawlDb update: URL filtering: true  
  68. CrawlDb update: Merging segment data into db.  
  69. CrawlDb update: done  
  70. Generator: Selecting best-scoring urls due for fetch.  
  71. Generator: starting  
  72. Generator: segment: storeDir/segments/20101004092711  
  73. Generator: filtering: true  
  74. Generator: topN: 50  
  75. Generator: Partitioning selected urls by host, for politeness.  
  76. Generator: done.  
  77. Fetcher: Your 'http.agent.name' value should be listed first in 'http.robots.agents' property.  
  78. Fetcher: starting  
  79. Fetcher: segment: storeDir/segments/20101004092711  
  80. Fetcher: done  
  81. CrawlDb update: starting  
  82. CrawlDb update: db: storeDir/crawldb  
  83. CrawlDb update: segments: [storeDir/segments/20101004092711]  
  84. CrawlDb update: additions allowed: true  
  85. CrawlDb update: URL normalizing: true  
  86. CrawlDb update: URL filtering: true  
  87. CrawlDb update: Merging segment data into db.  
  88. CrawlDb update: done  
  89. Generator: Selecting best-scoring urls due for fetch.  
  90. Generator: starting  
  91. Generator: segment: storeDir/segments/20101004092833  
  92. Generator: filtering: true  
  93. Generator: topN: 50  
  94. Generator: 0 records selected for fetching, exiting ...  
  95. Stopping at depth=4 - no more URLs to fetch.  
  96. LinkDb: starting  
  97. LinkDb: linkdb: storeDir/linkdb  
  98. LinkDb: URL normalize: true  
  99. LinkDb: URL filter: true  
  100. LinkDb: adding segment: hdfs://localhost:9000/user/root/storeDir/segments/20101004091724  
  101. LinkDb: adding segment: hdfs://localhost:9000/user/root/storeDir/segments/20101004091902  
  102. LinkDb: adding segment: hdfs://localhost:9000/user/root/storeDir/segments/20101004092053  
  103. LinkDb: adding segment: hdfs://localhost:9000/user/root/storeDir/segments/20101004092711  
  104. LinkDb: done  
  105. Indexer: starting  
  106. Indexer: done  
  107. Dedup: starting  
  108. Dedup: adding indexes in: storeDir/indexes  
  109. Dedup: done  
  110. merging indexes to: storeDir/index  
  111. Adding hdfs://localhost:9000/user/root/storeDir/indexes/part-00000  
  112. done merging  
  113. crawl finished: storeDir  
 

9、查看Nutch执行结果

 

可以根据上面我们指定的数据存储目录来查看HDFS上存储情况,执行如下命令: 

[plain] view plaincopy
  1. [root@localhost nutch-1.0]# bin/hadoop fs -ls /user/root/storeDir  
  2. Found 5 items  
  3. drwxr-xr-x   - root supergroup          0 2010-10-04 09:28 /user/root/storeDir/crawldb  
  4. drwxr-xr-x   - root supergroup          0 2010-10-04 09:31 /user/root/storeDir/index  
  5. drwxr-xr-x   - root supergroup          0 2010-10-04 09:30 /user/root/storeDir/indexes  
  6. drwxr-xr-x   - root supergroup          0 2010-10-04 09:29 /user/root/storeDir/linkdb  
  7. drwxr-xr-x   - root supergroup          0 2010-10-04 09:27 /user/root/storeDir/segments