Nutch是Apache旗下的Java开源项目,最初是一个搜索引擎,现在
是一个网络爬虫。
Nutch 致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎。
插件架构,高度模块化
大多数功能可通过插件来实现和改变
易扩展,极强的伸缩性
当爬虫获取了上万条甚至更多数据时,很有可能一台机器装不下,那么,我们需要增加机器来存储和计算。不用修改代码,从一台可扩展到上千台
高可用性,健壮容错
容忍宕机情况的出现。
灵活可配置
配置文件注释全面,选项多。提供了162个配置参数。
商业搜索引擎不开源,搜索结果不仅仅是根据网页本身的价值进行排序,而是有众多商业利益考虑。Nutch提供了开源的解决方案,帮助人们根据自己的需要构建自己的搜索引擎,为用户提供优质的搜索结果,并能从一台机器扩展到成百上千台。
通过Nutch爬取邮箱账号,联系方式等信息。
Linux操作系统、jdk、svn、ant
[root@Nutch Nutch2]# svn co https://svn.apache.org/repos/asf/nutch/tags/release-1.6/
注:如果未安装svn,是不能检出结果的。
Svn 可通过yum(shell前端软件包管理器)来安装。如果未安装yum,应当先完成yum安装。
[root@nutch nutch2]# cd release-1.6/
[root@nutch nutch2]# ls
[root@Nutch release-1.6]# ant
注意:
1)、如果为安装ant,则应该先安装ant,否则编译失败。
2)、需要在build.xml所在目录中运行ant命令编译Nutch
编译过程比较中,由于要下载相关依赖jar包,所以比较耗时,花了10分钟。
Ant构建之后,生成build、runtime两个目录。在runtime下有local和deploy两个子文件夹,分别代表Nutch的两种运行方式。
Deploy:使用hadoop集群的方式运行,数据存储在hdfs文件系统中
Local:使用本地文件系统来运行
数据的存储位置不同
local模式对hadoop没有依赖
deploy模式对hadoop依赖。它必须将数据存储到hdfs中,以二进制文件形式保存。
[root@Nutch local]# bin/Nutch
[root@nutch local]# bin/nutch crawl
Usage: Crawl <urlDir> -solr <solrURL> [-dir d] [-threads n] [-depth i] [-topN N]
初学时不知道每一个命令选项用于干嘛?我们可读源代码的方式查看相应选项参数。
[root@nutch local]# mkdir urls
[root@Nutch urls]# vi url
此参数可选,可加可不加
Nutch将网页爬取下来,交给solr做索引,之后用户通过solr来进行内容的搜索,Nutch本身并不做索引方面的工作,它只是把文档提交给solr,solr负责索引。
从这些可以看出,Nutch目前是一个网络爬虫,而不是一个搜索引擎。它的目标已经从搜索引擎蜕变为网络爬虫。
爬取数据保存地址
fetch阶段是可以使用多线程的,但是在建立索引时只能有一个线程工作。
抓取深度
建立url文件,放置要爬取的url网址,用于生成crawlDB数据库
配置JAVA_HOME环境变量,一般在/usr/lib/jvm下会装有java的环境。
修改conf/nutch-site.xml,加入<property>
<name>http.agent.name</name>
<value>test-nutch</value>
</property>
先不做修改,查看报错信息
[root@master local]#nohup bin/nutch crawl urls/url.txt -dir data -threads 4 -depth 2 &
Nutch入门重点在于分析Nutch脚本文件
Nutch介绍到此为止。
Solr是一个高性能,基于Lucene的全文搜索服务器。是一款非常优秀的全文搜索引擎。
对nutch抓取信息通过分词产生索引。
[root@Nutch Nutch2]# wget http://archive.apache.org/dist/lucene/solr/3.6.2/apache-solr-3.6.2.tgz
下载过程比较久。
Solr可运行在tomcat下,为简化配置,我们使用solr内嵌的服务器jetty。
Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。
[root@master nutch]# cd apache-solr-3.6.2/example/solr/conf/
[root@master conf]# cp /home/hadoop/nutch/release-1.6/runtime/local/conf/schema.xml /home/hadoop/nutch/apache-solr-3.6.2/example/solr/conf/schema.xml
将nutch/conf配置文件scheme.xml复制到solr/conf,告知solr在建索引的时候要建立哪些字段。
在nutch的conf文件中,有两个scheme打头的文件,schema.xml、schema-solr4.xml文件。schema-solr4.xml对应solr4.x的版本,schema.xml对应solr3.6的版本。因为我们用的solr是3.6.2版本,所以把nutch/conf目录下的schema.xml文件复制到solr主目录下的conf目录中。
将<str name=”df”>text</str>全部替换为<str name=”df”>content</str>
因为solr/conf/schema.xml默认搜索字段为content,所以要把所有含<str name=”df”>text</str>的字段全部替换为<str name=”df”>content</str>。
[root@master solr]# vi conf/solrconfig.xml
把Nutch/conf的配置文件scheme.xml复制到solr/conf中
告诉solr在建立的索引的时候要建立哪些字段。
修改solr默认的配置文件solr/conf/solrconfig.xml
[root@Nutch local]# java -jar start.jar &
http://192.168.1.49:8983/solr/
[root@master local]# bin/nutch solrindex http://192.168.232.142:8983/solr/ data/crawldb/ -linkdb data/linkdb/ -dir data/segments/ &
出错通过查看日志文件hadoop.log查看详情。
用lukeall打开索引,可看到索引的字段、文档数目、term的数目,也可以在documents选项内查看每一个特定的文档。
[root@Nutch data]# kill -9 11184
[root@Nutch data]# rm -rf /home/Nutch2/solr/example/solr/collection1/data/
这样就把原来没有使用特定分词器的情况下生成的索引干掉了。然后停止solr服务器,开始安装自定义的中文分词器。
[root@Nutch data]# wget [root@Nutch example]# wget http://mmseg4j.googlecode.com/files/mmseg4j-1.8.5.zip
[root@Nutch example]# unzip mmseg4j-1.8.5.zip -d mmseg4j-1.8.5
[root@Nutch solr]# mkdir /home/Nutch2/solr/example/solr/lib
[root@Nutch example]# cp mmseg4j-1.8.5/mmseg4j-all-1.8.5-with-dic.jar solr/lib/
[root@Nutch example]# vi solr/conf/schema.xml (注:solr我使用的是3.6.2版本)
将<tokenizer class="solr.WhitespaceTokenizerFactory"/>和<tokenizer class="solr.StandardTokenizerFactory"/>替换为<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode=”complex”/>
因为它默认的分词方法不能对中文有一个很好地效果,我们指定分词器。
[root@Nutch example]# java -jar start.jar &
[root@Nutch local]# bin/Nutch solrindex http://192.168.1.49:8983/solr/ data/crawldb/ -linkdb data/linkdb/ -dir data/segments/
将分词器相应jar包mmseg4j-all-1.8.5-with-dic.jar复制到solr下的lib目录。
将Nutch/conf/scheme.xml文件的<tokenizer class="solr.WhitespaceTokenizerFactory"/>和<tokenizer class="solr.StandardTokenizerFactory"/>配置替换为<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode=”complex”/>