nutch1.2搭建分布式检索

最近工作当中需要用到分布式检索的东西,一开始就想到了nutch,lucene和hadoop的口碑都挺不错,国内使用的也比较多,而Nutch就是基于二者的一个分布式搜索服务。原以为搭起来跑跑应该很快,没想到过程相当曲折。使用过程当中的一些笔记,由于工作性质的缘故无法拷出来,这里简单凭记忆记录一下。

下载最新版的Nutch1.3,按照wiki上的说明在单机上跑了一下,这个过程很简单,接下来就是分布式的了,结果一看wiki,还是基于v1.1的,上面的目录结构跟1,3完全不一样,一下就蒙了,document跟release版本完全对不上,我不知道其它人是怎么解决这个问题,我是没招了,于是下了v1.2的,看了看目录结构,发现跟wiki还是能对上,于是就决定用v1.2的了。另外,在找资料和文档的过程中,给我的感觉是Nutch的应用很少,有的只是一些试验性的,感觉生产环境中应用的很少,不像lucene和hadoop,其实我这次最终应该也是不用nutch,而是基于lucene和hadoop搭建分布式检索。

ok,进入正文。先说环境,master:kylin,slave1,slave2:centos,kylin大家可能不熟悉,由于后期的项目要在国产化的的平台上跑,所以一开始试验就弄了个国产的linux系统。先说网络配置:
1、/etc/hosts 这个文件很重要,相信使用过程中大家都会碰到一些主机名解析的问题,很多都是由这个文件引起。有些linux系统的hosts里面默认有 127.0.0.1 hostname localhost
然后为了将当前hostname映射到当前ip,后续得加上 192.168.1.111 hostname,这个配置可能就有问题,需要把127映射的hostname给去掉。另外就是把集群中的所有节点的ip和主机名都加上
2、防火墙 这个问题很隐晦,环境配置完毕后,bin/start-all.sh没问题,整个节点都起来了,但在后续操作中可能会出现主节点卡死的现象,或是爬虫失败。由于hadoop在启动后会开启一些随机端口,所以使用过程中大家最好把防火墙关闭。先通过iptables -L查看有没有防火墙设置,如果有的话就消除。
3、Stopping at depth=0 - no more URLs to fetch
这个问题看版本,0.9确实有个bug,Generator在分布式环境下只检查了一个分块,当urllist里面只放了一个网址时很容易出现这个问题(引自网上查的资料)。但在1.2版本中,该处的代码已经修正,所以跟这就没关系了。后来查了日志,发现datanode中有类似这样的日志,fetchTime=11111111,curTime=1111101111。时间是乱写的,反正就是fetchTime>curTime,后来查看源码,发现在shouldFetch的逻辑是这么写的:
if(fecthTime-curTime)>1000*db.fetch.interval.max {
fetchTime = curTime;
}
if(fetchTime>curTime) return false;
return true;
以上代码只是写了个意思,不是拷贝的源码。拿着我的fetTime和curTime试了一下,发现if判断不成立,先为了解决问题,在nutch-site配置文件中将db.fetch.interval.max改成了符合要求的时间,ok了。但我在网上查了多次,发现就一个人提出了这个问题,而且wiki中关于配置的没有任何地方与这个fetch相关联(我是说step-by-step中主动提到的),所以我觉得这个问题很诡异,按理说不应该出现。因为后期应该不会用Nutch,所以也没兴趣去探究,有兴趣的同学可以跟跟源码,看看这个fetchTime到底是怎么算出来的,这样才算真正地解决这个问题。
4、Input path doesnt exist ....../parse_data
类似这种错误,一般是之前的crawl过程在parse之前失败,所以没有产生parse_data目录,但在link阶段,会将hdfs上的crawl目录里的东西全部拿来,所以如果之前的crawl失败,最好是将hdfs上的crawl目录给清掉。另外,我搭建过程中,曾经修改过待爬的网站列表,将3个变成了1个,但爬的过程中发现还是抓了三个,很有可能也是因为这个crawl造成的,因为之前的url已经到db当中去了
5、最后一步,将索引拷到本地搜索不到东西
按照wiki上的说法,最终配置出来的东西是搜索不到的,但查看索引文件都没问题。实际上wiki上少提了一个配置,就是fs.default.name,这个配置是很重要的。wiki上说的是,将index从hdfs上拷到本地,然后只是修改了search.dir,但如果不修改conf/nutch-site.xml里面的fs.default.name的话,还是不行的。
6、关于日志 将conf/log4j.properties里面关注的类的日志级别设为debug,然后把每个节点的hadoop.log文件tail出来,跑的过程中就轮流盯着日志文件看,这个对发现问题很有帮助 ,否则你在主控制台上看到的错误不一定是真正的错误,上网查或提问的话,找的也不是真正的问题。
7、master和slave节点的conf/*保持一致,除了hadoop-env这个文件外,其它的应该都是一致的,这个也很容易忽略 而引起问题


实际部署过程中碰到的问题太多了,整整折腾了我近一周才把所有问题搞定。但收获也不小,以前觉得linux难使,现在用的过程中感觉挺好的;了解了hadoop的强大,下一步工作就是深入去了解;lucene一直停留在简单使用上,后续对其性能调优也得有了解。

碰到的问题比较多,但凭脑子记忆就想起这些了,如果有其它问题可以讨论交流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值