nutch1.4 分布式爬取

从nutch1.3开始本地抓取(单机),分布式抓取(集群)所使用的配置文件和命令单独分开。
NUTCH_HOME/conf 为分布式抓取所用配置文件
NUTCH_HOME/runtime/deply/bin/nutch 分布式抓取命令
NUTCH_HOME/runtime/local/conf 为本地抓取所用配置文件
NUTCH_HOME/runtime/local/bin/nutch 本地抓取命令

另外,修改了NUTCH_HOME/conf下的配置文件,需要重新编译之后才能生效。

爬取命令分别如下:

单机:

*/nutch1.4/runtime/local/bin/nutch.sh crawl urls -solr http://address:point/solr -dir crawl -depth 2 -threads 1 -topN 100

 集群:

 */nutch1.4/runtime/deploy/bin/nutch.sh crawl urls -solr http://address:point/solr -dir crawl -depth 2 -threads 1 -topN 100

 环境准备:

1、配置hadoop,确保hadoop运行正常。(hadoop配置请参考文章。《hadoop集群配置》

2、将hadoop/conf目录中的配置文件拷贝到nutch/conf中,使nutch绑定hadoop。

 程序准备:

1、将nutch1.4拷贝到其他集群机器中采用保证存放目录结构相同;

2 、运行本文所示集群脚本,可能出现如下错误:

12/06/18 02:49:27 INFO mapred.JobClient: Running job: job_201206180227_0001
12/06/18 02:49:28 INFO mapred.JobClient:  map 0% reduce 0%
12/06/18 02:49:48 INFO mapred.JobClient: Task Id : attempt_201206180227_0001_m_000000_0, Status : FAILED
java.lang.RuntimeException: Error in configuring object
        at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
        at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
        at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:432)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1083)
        at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
        ... 9 more

无法找到plugins导致的问题,将如下配置加入nutch-default.xml中

<property>
  <name>plugin.folders</name>
  <value>./plugins</value>
  <description>Directories where nutch plugins are located.  Each
  element may be a relative or absolute path.  If absolute, it is used
  as is.  If relative, it is searched for on the classpath.</description>
</property>
 

  重新编译并部署,将编译后的nutch-*job拷贝到deploy下,注意文件命名格式必须符合要求。默认的文件名apache-nutch-*-SNAPSHOT.job会导致 java.io.IOException异常。

 总结:deploy中只需要bin和*.job文件就可以集群运行。所以配置都针对*.job中的各项文件、路径,以上配置经过多次测试确认,以供参考。

 --------------------------------------------------------

 单点环境爬取:

 分布式爬取各个步骤无法有效监控,单点爬取是测试验证程序的一个办法。

单点爬取只是将deploy中的*.job文件进行了分别的维护,包括bin、conf、lib、log、plugins。只需将项目对应目录中的文件拷贝到单点环境即可。拷贝完后执行 bin/nutch ******* 。如果爬取失败,则可以根据log中的日志跟踪来进行处理。一般情况下先检查各目录中的文件是否同步完毕,特别是lib中的*.jar文件是不是全部引入等等。

猜你喜欢

转载自peigang.iteye.com/blog/1563288
今日推荐