nutch+hadoop集群总结磊磊版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.下载Nutch-1.6-src.tar.gz /apache/nutch/1.6/
将Nutch-1.6-src.tar.gz复制到usr/目录下
sudo cp /home/franklin/Documents/apache-nutch-1.6-src.tar.gz /usr/
并解压
sudo tar -zxf apache-nutch-1.6-src.tar.gz
改变apache-nutch-1.6的权限
sudo chown hadoop:hadoop apache-nutch-1.6
2.使用ant对nutch进行编译
ant的安装:
下载ant-1.9.0 /bindownload.cgi
将apache-ant-1.9.0-bin.tar.gz复制到usr下
sudo cp /home/franklin/Documents/apache-ant-1.9.0-bin.tar.gz /usr/ 解压之
sudo tar -zxf apache-ant-1.9.0-bin.tar.gz
配置ant的环境变量
sudo gedit /etc/profile
加入如下内容
export ANT_HOME=/usr/apache-ant-1.9.0
在PATH后添加
:$ANT_HOME/bin
验证ant是否配置成功
ant -version
出现如下提示即配置成功
使用ant对nutch进行编译
进入apache-nutch-1.6.0目录下,运行ant命令,就会根据build.xml对nutch进行编译(需要等一段时间,因为要通过网络下载)
编译成功总共花了15分钟编译完后会在apache-nutch-1.6.0目录下看到一个runtime目录进入该目录会发现一个local目录和
一个deploy目录,一个是本地模式,一个是分布式模式。
很重要的是每次修改配置文件都需要重新ant编译一下
3.本地模式下运行nutch的爬虫进行爬取
进入runtime/local/conf下配置nutch-site.xml
sudo gedit nutch-site.xml
在configuration中加入如下内容:
<property>
<name></name>
<value>My Nutch Spider</value>
</property>
创建爬虫爬取的Url
新建urls目录
sudo mkdir urls
在urls目录下新建seed.txt
sudo touch seed.txt
改变seed.txt的读写权限
chmod 777 seed.txt
写入爬取Url
sudo echo / > seed.txt
设置爬取的规则
进入apache-nutch-1.6.0/runtime/local/conf目录下
sudo gedit regex-urlfilter.txt
将这两行内容
# accept anything else
+.
替换为 +^http://([a-z0-9]*\.)*/
运行ant重新编译一下
开始爬取
进入apache-nutch-1.6.0/runtime/local 运行bin/nutch crawl /data/urls/seed.txt -dir crawl -depth 3 -topN 5
爬取的过程中出现错误:
这是由于上一次运行爬取命令生成了一个不完整的segments/20130434113019造成的,到相应目录下将该文件夹删除即可
爬取完毕:
在输出结果的文件夹中可以看见:crawldb/ linkdb/ segments/
4.分布式模式下运行nutch爬虫进行爬取
启动hadoop的所有节点
bin/start-all.sh
进入apache-nutch-1.6.0/conf下配置nutch-site.xml
sudo gedit nutch-site.xml
在configuration中加入如下内容:
<property>
<name></name>
<value>My Nutch Spider</value>
</property>
将爬取的url复制到hadoop分布式文件系统中
设置爬取规则:
进入apache-nutch-1.6.0/conf目录下
sudo gedit regex-urlfilter.txt
将这两行内容
# accept anything else
+.
替换为 +^http://([a-z0-9]*\.)*/
运行ant重新编译一下
开始爬取
进入apache-nutch-1.6.0/runtime/deploy 运行bin/nutch crawl /data/urls/seed.txt -dir crawl -depth 3 -topN 5
可以看到爬取任务被提交给hadoop的mapping和reducing
通过50030端口可以看到jobtracker运行的状态
运行完毕:
爬取完毕后可以通过50070查看hadoop的分布式文件系统
点击Browse the filesystem:可以看到分布式文件系统下的文件
进入该目录下可以看到爬取输出的内容
至此所有配置测试完毕。
配置Nutch与Hadoop集群
Posted by Rui on May 15, 2011Leave a comment (0)Go to comments
前言
最近在学习使用开源web抓取工具Nutch, Nutch使用Lucene作为其全文检索引擎,使用Hadoop 提供分布式计算支持。
在这篇文章里我将记录下Nutch 1.2及Hadoop集群的配置方法,本文主要的参考资料来自Nutch官方Wiki中的相关文章《How to Setup Nutch(V1.1) and Hadoop》,地址:/nutch/NutchHadoopTutorial。
准备工作
假设我们的集群由4台计算机组成,分别为:cluster01, cluster02, cluster03, cluster04. 将cluster01作为master节点,其它三台作为slave节点。
Nutch的抓取工作也将在cluster01上进行。
首先从官方网站上下载最新版本的Nutch-1.2二进制包,当然也可以直接下载源码自己进行编译工作。
不过为方便起见,我直接使用已编译的二进制包进行部署。
Nutch 已经集成了Hadoop,因此不需要单独下载Hadoop。
建立运行架构
当我们在集群中所有的机器上部署完Nutch以后,我们需要通过运行master节点上的start-all.sh 脚本来启动整个集群。
因此必须在所有的机器上建立完全相同的目录结构来发布Nutch。
为了不使用root用户来运行Nutch。
首先在集群中所有的机器上创建nutch用户。
然后在每台机器nutch 用户的主目录/home/nutch下建立如下目录结构:
/home/nutch/nutch (Nutch 安装目录)
/home/nutch/filesystem (Hadoop文件系统目录)
/home/nutch/local (存放用于搜索的本地文件目录)
建立完目录结构后,用nutch用户登录到master节点,也就是cluster01上,将下载的Nutch 二进制包解压缩到nutch目录下,编辑hadoop运行环境变量配置文件:
cd /home/nutch/nutch/conf
vim hadoop-env.sh
填入以下配置信息:
export HADOOP_HOME=/home/nutch/nutch
export JAVA_HOME=/path/to/java
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves
接下来,在master节点上创建ssh密钥并将公钥复制到所有slave节点上,这样我们就能不用输入口令的情况下在master节点上用nutch用户ssh登录到slave节点。
cd /home/nutch
ssh-keygen -t rsa
在之后所有询问的提示符时直接回车,直到完成创建密钥。
将生成的公钥另存为authorized_keys 文件。
cd /home/nutch/.ssh
cp id_rsa.pub authorized_keys
用scp命令将authorized_keys文件复制到所有的slave节点上
scp /home/nutch/.ssh/authorized_keys nutch@cluster02:/home/nutch/.ssh/authorized_keys 依次使用scp命令将公钥文件复制到cluster03及cluster04上。
可以在master上通过ssh nutch@cluster02来尝试登录cluster02检查密钥是否生效,如果不需要输入口令即可登录,则配置成功。
依次检查所有slave节点的登录状态。
当所有slave节点都配置完成。
我们将开始部署Nutch。
在单台机器上部署Nutch
Nutch与Hadoop的配置文件在nutch/conf下,nutch的配置项可以查看nutch-default.xml,我们如果需要对某些配置项进行配置,可以将相应项目写在nutch-site.xml中,我们可以直接将nutch-default.xml另存为nutch-site.xml
cd /home/nutch/nutch/conf
cp nutch-default.xml nutch-site.xml
需要注意,必须在nutch-site.xml中配置参数的值,这个参数是给抓取的站点识别的爬虫的名称,在http.robots.agents参数中必须将的值放在列表的第一项。
接下来对Hadoop进行配置,新版本中原来hadoop-site.xml配置文件中的内容将分别放在core-site.xml,hdfs-site.xml,mapred-site.xml中进行配置。
conf/core-site.xml
参数让nutch识别所使用的文件系统,由于我们使用Hadoop,所以必须指向master节点或者hadoop的namenode。
然后配置hadoop的分布式文件系统
conf/hdfs-site.xml
需要注意的是dfs.replication参数,它的值不能多于集群中的节点数,我们的集群有4个节点,所以我们这里将它的值设为3。
conf/mapred-site.xml
在启动hadoop服务器前必须对namenode进行格式化
cd /home/nutch
bin/hadoop namenode -format
接下来,修改conf/master文件,将namenode配置进去
vim conf/master
内容只有一行,
cluster01
修改conf/slaves文件:
vim conf/slaves
将所有slave节点名写入,每个slave节点占一行
cluster02
cluster03
cluster04
下一步,在nutch工作目录下创建urls文件,在其中添加一个文本文件,该文本文件为nutch 抓取URL的种子列表
mkdir /home/nutch/nutch/urls
vim /home/nutch/nutch/urls/urllist.txt
我们先抓取nutch的主页作为测试,在urllist.txt文件中只加入一行
配置Nutch抓取过程中的URL过滤规则可以通过编辑conf/crawl-urlfilter.txt文件来实现
vim conf/crawl-urlfilter.txt
将
修改为
至此,我们已在NameNode上部署完单个nutch的运行环境。
将Nutch部署到所有slave节点
将Nutch发布到所有slave节点的工作非常简单,将master节点上部署的nutch复制到所有slave 节点上
scp -r /home/nutch/nutch/* nutch@cluster02:/home/nutch/nutch
依次用scp命令部署到cluster03与cluster04上。
此时,我们已经可以启动hadoop服务了,在此之前我们可以执行以下命令查看所有slave节点是否正常工作
bin/slaves.sh uptime
如果输出信息中包含了所有slave节点的运行状态信息。
则之前配置正确,我们可以用以下命令启动hadoop服务
bin/start-all.sh
使用下述命令可以检查hadoop集群的启动状态,该命令会输出已经启动完毕的slave节点以及当前集群可用及已用的容量等信息
bin/hadoop dfsadmin -report
当集群启动完毕,我们需要将抓取的种子列表加入到hadoop的文件系统中,使用以下命令
bin/hadoop dfs -put urls urls
检查是否添加成功
bin/hadoop dfs -ls
当添加成功后,我们就可以开始让Nutch抓取网页了。
执行抓取网页任务
执行命令开始抓取任务
bin/nutch crawl urls -dir crawl -depth 5 > crawl.log &
在crawl.log文件中会记录Nutch的执行过程。
以上命令告诉Nutch抓取的种子文件在urls目录下,抓取结果放在crawl目录中,抓取的深度为5,Nutch的其它可选参数与使用方法可以参考Nutch的使用文档。
通过访问http://cluster01:50070可以查看namenode的状态及相关信息。
通过访问http://cluster01:50030可以查看mapreduce任务执行的情况。
执行搜索操作
当Nutch的抓取任务完成以后,我们可以对搜索操作进行测试,可以先将hadoop的文件系统复制到本地
bin/hadoop dfs -copyToLocal crawl /home/nutch/local/
将Nutch的搜索路径指向本地索引结果目录,修改conf/nutch-site.xml文件
vim conf/nutch-site.xml
修改其中searcher.dir参数的值为/home/nutch/local/crawl,执行以下命令测试搜索
bin/nutch org.apache.nutch.searcher.NutchBean apache
命令会输出搜索操作命中的结果集数量。
如果命中的结果集数量不为0,则Nutch的分布式运行环境部署完成。
如果结果集数量为0,可能配置的过程中有地方没做对,也有可能抓取的结果中确实没有关键字的索引。
Nutch中包含一个nutch.war的软件包,可以直接部署到Tomcat下,部署完以后将nutch-site.xml 加入到部署目录的WEB-INF/classes下,只要包含如下内容
启动tomcat后访问http://cluster01:8080/nutch,可以看到Nutch的搜索界面,至此一个基于Nutch的搜索引擎搭建完成。
接下去我会学习一下solr与nutch的整合使用,届时会再将相关的笔记记录到博客中,敬请关注!。