Nutch入门学习

因为solr生成的索引是放在本地磁盘的,为了把搜索索引放到HDFS上,所以最近看了一下搭建分布式Nutch和Nutch+solr的集成

Nutch的抓取流程:对目标网站完成抓取后, 在保存抓取数据目录crawl 下产生了五个子目录: crawldb,linkdb,segments,indexes 和 index 。数据库 crawldb 中包含页面的数目等;linkdb 包含页面在数据库中的链接,这是抓取器真正抓取网站时由页面的链接数目决定;Segments 数据库按照时间戳分为三个片断,每个片断的产生都经历了 generate/fetch/update 三个过程;Indexes 数据库包含了在 generate/fetch/update 过程中产生的 Lucene 索引;Index 数据库包含了经合并处理后的 Lucene 索引。

Nutch的单机运行:

1.从官网上下载Nutch的bin包,然后解压。本人用的是Nutch-1.2,不保证其它版本的安装过程也是如此

2.在nutch的安装目录下,新建一个文件夹urls(可以任意命名),在这个文件夹下,新建一个文本文件url.txt(可以任意命名),在这个文本中写入http://www.baidu.com,这个就是爬虫的入口地址。

3.打开nutch-1.2/conf/crawl-urlfilter.xml,定位到MY.DOMAIN.NAME这一行,将+^http://([a-z0-9]*/.)*MY.DOMAIN.NAME/ 改为

   +^http://([a-z0-9]*/.)*,即将后面的域名换成*,意思是可以爬取任意网站

4.打开nutch-1.2/conf/nutch-site.xml,加入下面内容

<configuration>
    <property>
        <name>http.agent.name</name>
        <value>MySearch</value>
    </property>
 </configuration>

否则,报错:

   Fetcher: No agents listed in 'http.agent.name' property.
   Exception in thread "main" java.lang.IllegalArgumentException: Fetcher: No agents listed in 'http.agent.name' property

运行下面命令:

bin/nutch crawl urls -dir crawl -depth 2 -topN 100 -threads 2
其中:   -dir = localweb  指明下载数据存放路径,该目录不存在时,会被自动创建
            -deptch = 2       下载深度为2
            -topN = 100      下载符合条件的前100个页面
            -threads = 2      启动的线程数目
爬虫运行时会输出大量数据,抓取结束之后,可以发现crawl目录被生成,里面有crawldb,linkdb,segments,indexes 和 index 五个目录。

 

运行Nutch搜索:

1.下载tomcat并运行

2.将nutch-1.2中的nutch-1.2.war复制到tomcat6/webapps/中,tomcat在运行状态下会自动解压缩这个包,打开解压缩后的包,在文件/nutch-1.2/WEB-INF/classed/nutch-site.xml中加入:

<property>
    <name>searcher.dir</name>
    <value>/usr/local/nutch-1.2/crawl</value>

</property>

这个value值为所爬取到的数据的存储路径,搜索引擎根据这个路径搜索到用户想要的内容。

3.在web上运行nutch搜索:

地址栏输入:http://localhost:8080/nutch-1.2

在出现的搜索界面中填写搜索关键词,即可获得结果。如果出现乱码,则将tomcat安装目录下conf/server.xml定位到connector并修改一下:

<Connector port="8080" protocol="HTTP/1.1" 
       connectionTimeout="20000" 
       redirectPort="8443" 

   URIEncoding="UTF-8"  
useBodyEncodingForURI="true "/>

参考资料:Nutch-1.2配置

 

Nutch分布式配置

Nutch=hadoop+lucene,从官网上下载Nutch,解压后,发现确实已经包含了hadoop的包和lucene的包,Nutch的分布式搭建和hadoop的集群搭建类似,先将ssh连通各机器,然后写好配置文件,详见下面的参考资料:

1.http://wiki.apache.org/nutch/NutchHadoopTutorial

2.NutchHadoopTutorial对应的中文翻译

3.Nutch分布式安装

4.Nutch的集群式搜索

5.nutch-1.0 的分布式查询部署

Nutch+solr

solr要用1.4版,我用3.1版,结果映射索引时报错:java.io.IOException: Job failed!
不知道为什么原因?也不知道如何跟踪在哪一步报的错?如果有知道的大侠,请不吝赐教!

2011-8-1补答:nutch1.2中solrj是1.4.0版,所以映射到solr3.1时会报错,版本要保持一致才可以

1.配置schema.xml

把nutch1.2conf目录下的schema.xml复制到/home/test/solr-1.4/example/solr/conf中替换原文件。
2.在/home/test/solr-1.4/example/solr/conf/solrconfig.xml中末尾增加以下内容:

<requestHandler name="/nutch" class="solr.SearchHandler" >
<lst name="defaults">
<str name="defType">dismax</str>
<str name="echoParams">explicit</str>
<float name="tie">0.01</float>
<str name="qf">content^0.5 anchor^1.0 title^1.2 </str>
<str name="pf"> content^0.5 anchor^1.5 title^1.2 site^1.5 </str>
<str name="fl"> url </str>
<str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
<int name="ps">100</int>
<bool name="hl">true</bool>
<str name="q.alt">*:*</str>
<str name="hl.fl">title url content</str>
<str name="f.title.hl.fragsize">0</str>
<str name="f.title.hl.alternateField">title</str>
<str name="f.url.hl.fragsize">0</str>
<str name="f.url.hl.alternateField">url</str>
<str name="f.content.hl.fragmenter">regex</str>
</lst>
</requestHandler>

注意:不要出现大于小于号,要把它转化成对应的转义字符。不然tomcat在启动时就会在加载solrconfig.xml时报错

3.启动solr服务:solr/example/java -jar start.jar  

4.将nutch的索引映射到solr

bin/nutch solrindex http://127.0.0.1:8983/solr/ crawl/crawldb crawl/linkdb crawl/segments/*

5.测试solr索引
访问solr查询界面,提交查询表单,检查能否查到数据 http://127.0.0.1:8983/solr/admin

 

参考资料:

1.Using Nutch with solr
2.http://blog.csdn.net/laigood12345/article/details/6091813

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值