Solr4.4 + hadoop2.0 + nutch1.8

Solr4.4 + hadoop2.0 + nutch1.8

先说一点nutch2.2.1不支持hadoop2.01.8是最新版本。如果想用nutch2.2.1需要做代码兼容要修改hadoopnutch源码。

公司最近要做一个客户的数据分析。在原有的hadoop集群上进行分析。但是该公司的数据需要从固定网上爬取下来。所以就研究了下nutch。但是研究发现hadoop本身就是脱离于nutch,也就是说hadoop最开始时为nutch做爬虫的。然后我发现尝试使用solr4.8但是solr4.8要求jdk1.7,而且solrjdk的依赖官网没有,只是说你下载了之后在doc里边有,告诉你依赖的jdk。所以我浪费了半天才搞明白4.8jdk1.7果断放弃使用4.4

这里需要对hadoop命令有了解还要了解nutchsolr所以建议先单独研究下这3者。

 

首先搭建solr环境

这里使用的是solr4.4+tomcat6。建议使用6因为7有一个url不能解析’/’的bug当然可以解决,但是之前搭建4.8正恶心了就直接用6了。

1.解压缩后的solr文件下的example下的solr拷贝到一个单独目录(这里拷贝到/opt下)作为tomcat的示例。将解压缩文件夹下的distsolr-version.war包拷贝到tomcat/webapps下改名为solr.war

2.进入tomcat/conf/Catalina/localhost/下创建solr.xml(如果没有此目录就启动一下tomcat)在solr.xml里添加如下内容

<Context docBase="$TOMCAT_HOME/webapps/solr.war" debug="0" crossContext="true" >

<Environment name="solr/home" type="java.lang.String" value="/opt/solr" override="true" />

</Context>

3.将example下的lib/ext下所有jar包拷贝到tomcat/lib下,然后exampleresourcelog4j.properties拷贝到tomcat/lib下。

4.如果你要添加中文分词器。IK Analyzer 2012FF_hf1将解压缩后的IKAnalyzer.cfg.xmlIKAnalyzer2012FF_u1.jarstopword.dic拷贝到你webappssolr文件夹WEB-INFO/lib下(已经启动之后deployesolr.war以后)然后在/opt/solr/collection1/conf下的schema.xml中的<types><types>下添加如下内容:

 <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">

      <analyzer>

       <tokenizer class="solr.StandardTokenizerFactory"/>

       <filter class="solr.TurkishLowerCaseFilterFactory"/>

       <filter class="solr.StopFilterFactory" ignoreCase="false" words="lang/stopwords_tr.txt" />

       <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>

      </analyzer>

</fieldType>

启动tomcat服务器访问http://ip:port/solr即可。

Ps:下边整合nutch的时候有可能会出现如下错误:

] ERROR org.apache.solr.core.SolrCore  ? org.apache.solr.common.SolrException: ERROR: [doc=http://www.36kr.com/] unknown field 'host'

 

解决办法:这个问题参考

http://stackoverflow.com/questions/13429481/error-while-indexing-in-solr-data-crawled-by-nutch

还是是在schema.xml文件中<field>…</fields>中增加以下的字段:

<fields>   <field name="host" type="string" stored="false" indexed="true"/>
   <field name="digest" type="string" stored="true" indexed="false"/>
   <field name="segment" type="string" stored="true" indexed="false"/>
   <field name="boost" type="float" stored="true" indexed="false"/>

   <field name="tstamp" type="date" stored="true" indexed="false"/>

   <field name="anchor" type="string" stored="true" indexed="true"
            multiValued="true"/>
   <field name="cache" type="string" stored="true" indexed="false"/>

</fields> 

 

 

整合nutch

下载好的jar包解压缩先在本地测试。

1首先:在nutch加压缩目录创建urls目录,进入urls目录,创建seed.txt,在txt内添加你要爬的网址:http://www.163.com

2.进入conf下编辑regex-urlfilter.txt,在最后一行修改+.为正则表达式。也可不修改

+^http://([a-z0-9]*\.)*www.163.com/

3.编辑confnutch-site.xml文件加入如下内容:这个是必须加的

<property>

<name>http.agent.name</name>

<value>My Nutch Spider</value>

</property>

 

4.可以测试了。bin/crawl urls localDir http://ip:port/solr 2

如果出现如下错误

Exception in thread "main" java.io.IOException: Job failed!
     at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1357)
     at org.apache.nutch.indexer.IndexingJob.index(IndexingJob.java:123)
     at org.apache.nutch.indexer.IndexingJob.index(IndexingJob.java:81)
     at org.apache.nutch.indexer.IndexingJob.index(IndexingJob.java:65)
     at org.apache.nutch.crawl.Crawl.run(Crawl.java:155)
     at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
     at org.apache.nutch.crawl.Crawl.main(Crawl.java:55)

解决办法:

进到nutch/conf下,编辑nutch-default.xml找到plugins.folders这个修改成绝对路径即可。

 

整合hadoop

搭建hadoop集群就不说了

首先下载nutchsrc压缩包不是bin压缩包,在解压缩目录里边执行ant(这个不解释了)

因为第一次编译所以会很慢。编译完成以后在解压缩目录下出现runtime目录,进取有deploylocal两个文件夹,depoly就是在分布式hadoop中使用的。

进入deploy,创建urls目录,进入urls目录,创建seed.txt,在txt内添加你要爬的网址:http://www.163.com,将urls文件夹puthdfs下。然后在hdfs下创建一个输出目录crawld

。然后执行如下命令:

Bin/crawl urls crawld http://ip:port/solr 2

哈哈。你就考到mapreduce程序运行的日志了。但是最后会出现非法输入路径crawld/segments/crawl_****原因不太清楚。解决办法就是

进到bin文件目录执行./crawl urls crawld http://ip:port/solr 2

然后访问http://ip:port/solr访问solr测试。

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值