Linux下的Nutch分布式配置与安装

来源:互联网 发布:java培训哪个学校好 编辑:程序博客网 时间:2024/05/24 01:38

1.     介绍

本文主要介绍LinuxNutch的分布式配置与安装。Nutch是著名的开源搜索引擎,由Nutch引出了Apache另一个著名的项目Hadoop,一个类似于GoogleMapReduce架构的高效分布式计算模型。我们基于本实验室已有的Hadoop平台,将Nutch部署在Hadoop之上,利用MapReduce进行并行的分布式抓取,将得到的索引文件存在HDFS上,使得Nutch可以更加高效的运行。本文主要参照了一下几个网页:

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

2.    http://www.cnblogs.com/wycg1984/archive/2010/06/25/1764926.html

另外,前面的几个网页都是基于Nutch.0.9或者Nutch1.0的,我们在安装中发现和我们已有的Hadoop平台Hadoop-0.20.2存在不兼容的问题。我们发现在Nutch1.1中已经支持Hadoop-0.20.2的版本,主要是在配置文件conf下的hadoop-site.xml分割成了core-site.xmlhdfs-site.xmlmapred-site.xml三个文件。以下是本文所使用的开源软件:

1. Nutch-1.1 (存放于//202.38.64.184softs目录下的apache-nutch-1.1-bin)

2. Hadoop-0.20.2(已安装)

3. Apache Tomcat 6.0.29(存放于//202.38.64.184softs目录下的apache-tomcat-6.0.29.tar)

2 Hadoop的安装

详见//202.38.64.184/share/cluster-config/hadoop下的安装脚本intall_in_lab_cluster.sh

以下是我们的hadoop环境:

用户名:hadoop

安装目录:/localshare/hadoop/install/hadoop

Master节点:

Ip: 192.168.99.6   hostname:node-hp-dl-06

Slave节点:

Ip: 192.168.99.9   hostname:node-hp-dp-09

Ip: 192.168.99.11   hostname:node-r630-1

Ip: 192.168.99.12  hostname:node-r630-2

安装目录下的配置文件夹conf用符号链接指向共享存储上的/share/cluster-config/hadoop/conf目录。

格式化namenode指令;

       Bin/hadoop namenode –format

启动:

       Bin/start-all.sh

关闭:

       Bin/stop-all.sh

通过Web查看hadoop运行情况:

       HDFS:

              192.168.99.6:50070

       MapReduce:

              192.168.99.6:50030

3.  Nutch的安装

在已经安装Hadoop的情况下,只要将Nutch文件夹下的conf目录中文配置文件配置好,就可以通过Nutch中的bin/start-all.sh来启动hadoop进行分布式抓取和索引了。

首先,将Nutch的安装包apache-nutch-1.1-bin解压到/localshare/nutch/install/nutch目录下(之所以在/localshare/nutch目录下添加两层是为了方便多个Nutch版本切换而建立的符号链接)。

                                                                                                                                   -1

将原安装包中的conf目录mvconf_bak进行保存,在共享目录上建立共享配置文件夹/share/cluster-config/nutch/conf,把conf_bak中所有的文件cp到共享配置文件,并在原来conf的位置建立一个符号链接conf指向共享配置文件夹。

                                                              -2

Conf文件夹下主要有以下几个文件:

                                                               -3

其中我们要修改的有:

1.    Masters

2.    Slaves

3.    Hadoop-env.sh

4.    Core-site.xml

5.    Hdfs-site.xml

6.    Mapred-site.xml

7.    Nutch-site.xml

其中前6个配置文件只要和hadoopconf下的同名配置文件保持一直就可以了。

1. Masters

192.168.99.6

       2Slaves

              192.168.99.9

              192.168.99.11

              192.168.99.12

       3Hadoop-env.sh

              这里主要是jdk等环境变量的配置。主要添加:

              exportJAVA_HOME=/localshare/jdk/java

              exportHADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"

exportHADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote$HADOOP_SECONDARYNAMENODE_OPTS"

exportHADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote$HADOOP_DATANODE_OPTS"

exportHADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote$HADOOP_BALANCER_OPTS"

exportHADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote$HADOOP_JOBTRACKER_OPTS"

 

 

exportHADOOP_HOME=/localshare/hadoop/install/hadoop

export JAVA_HOME=/localshare/jdk/java

export HADOOP_LOG_DIR=${HADOOP_HOME}/logs

exportHADOOP_SLAVES=${HADOOP_HOME}/conf/slaves

 

 

4.  Core-site.xml

主要配置

<configuration>

  <property>

     <name>fs.default.name</name>

     <value>hdfs://192.168.99.6:9000</value>

  </property>

</configuration>

 

5.  Hdfs-site.xml

主要配置hdfs的属性,如目录,副本数量等。

<configuration>

  <property>

     <name>dfs.replication</name>

      <value>1</value>

  </property>

</configuration>

 

6.  Mapred-site.xml

主要配置Mapreduce的属性,如jobtracker的端口,map数量,reduce数量等。

<configuration>

  <property>

     <name>mapred.job.tracker</name>

     <value>192.168.99.6:9001</value>

  </property>

</configuration>

7.  Nutch-site.xml

主要配置Nutch相关属性,其中http.agent.name一定要配置,否则搜索结果始终为空。

<configuration>

        <property>

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

               <value>nutch-1.1</value>

        </property>

</configuration>

8.  Crawl-urlfilter.txt

主要配置抓取文件的属性:

# accept hosts in MY.DOMAIN.NAME

# +^http://([a-z0-9]*/.)*MY.DOMAIN.NAME/

+^http://([a-z0-9]*/.)*ustc.edu.cn/

注释掉原来的^http://([a-z0-9]*/.)*MY.DOMAIN.NAME,改为我们所要过滤的domainname: ^http://([a-z0-9]*/.)*ustc.edu.cn/

 

至此,Nutch的相关配置已经成功,主要在/localshare/nutch/install/nutch目录下启动服务即可:

执行Bin/start-all.sh:启动hadoop

利用bin/hadoop dfs –ls 查看HDFS的情况。

接下来可以接使用nutch进行抓取了。

 

4Crawl抓取

Nutch爬虫命令是:

    bin/nutch Crawl <urlDir> [-dir d] [-threadsn] [-depth i] [-topN N]

其中的<urlDir>参数是入口地址文件或其所在的目录,启动了集群进行分布式爬虫时,这个目录必须是HDFS中的目录,爬虫完毕将在HDFS中生成存有爬下来的数据的目录[-dir d]

    (1)入口地址文件

    在本地磁盘中新建一个文件,写入一个入口url,然后将其复制到HDFS中,使用如下命令:
    bin/hadoop dfs -copyFromLocal crawltest/urls urls

    (2)爬虫测试,在namenodedatanode或者与集群网络连通的安装有Hadoop或者nutch并且hadoop-site.xml配置相同的客户机上上均可使用如下命令分布式爬虫:

    bin/nutch crawl urls -dir crawled -depth 3 -topN10

爬虫完毕,hdfs中生成crawled目录(user/hadoop/crawled)crawled目录下面有这些子目录:crawldb,index,indexes,linkdb,segments。所有节点上的爬虫日志在logs/hadoop.log中。

从浏览器中可以查看到分布式爬虫时作业状态。

 

5Tomcat Configuration

Nutch的爬虫和搜索可以说是分离的两块,爬虫可以是M/R作业,但搜索不是M/R作业。搜索有两种方式:一是将爬虫数据(或者称索引数据)放在本地硬盘,进行搜索。二是直接搜索HDFS中的爬虫数据。

Nutch自带了一个WEB前端检索程序,即主目录下的nutch-x.x.war,实现WEB前端检索时需要安装Tomcat,执行应用程序。此外,在命令行中也可执行Nutch检索命令。

 

1. 单机检索

这里我们在master192.168.99.6)上进行如下操作:

        (1)HDFS中生成的存储爬虫数据的data目录复制到本地某一目录下。(例如/localshare/nutch/crawled)

             bin/hadoop fs copyToLocal data /localshare/nutch/crawled

       (2) 安装tomcat,请确保安装路径没有空格,这很重要,否则将导致搜索结果始终为0。安装完后启动tomcat服务,bin/catalina start

       (3)Nutch主目录下的WEB前端程序nutch-1.1.war复制到 ***/ tomcat/webapps/目录下。

(4)浏览器中输入http://192.168.99.6:8080/nutch-1.1,将自动解压nutch-1.0.war,在webapps下生成nutch-1.1目录。

(5)配置WEB前端程序中的nutch-site.xml文件,该文件所在目录是***/tomcat/webapps/nutch-1.0/WEB-INF/classes/下,配置如下:

<configuration>

        <property>

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

               <value>nutch-1.1</value>

        </property>

        <property>

               <name>searcher.dir</name>

                <value>/localshare/nutch/crawled </value>

        </property>

</configuration>

(6)重启tomcat,可以先执行bin/catalina stop停止再start。更改配置文件后必须重启tomcat,否则不会生效。

(7)http://192.168.99.6:8080/nutch-1.1下检索关键字

 

2. 分布式搜索

分布式爬虫时Nutch生成的索引数据存储的HDFS中,nutch支持搜索HDFS中的数据。检索HDFS中的索引数据和检索本地种的索引数据的配置差别 hadoop-site.xml文件。搜索hdfs中的数据时,nutch在搜索的时候首先通过rpc检索lucene索引文件,然后定位到 segment对应的14位数字时间作为文件夹的名字,然后从这个文件夹中获取结果信息的。

(1)选择一台机器,该机器可以是Hadoop集群中的节点,也可以是集群之外的机器,但保证机器和Hadoop集群网络连通。(例如192.168.99.6

(2) 安装tomcat,请确保安装路径没有空格,这很重要,否则将导致搜索结果始终为0。安装完后启动tomcat服务,bin/catalina start

      (3)Nutch主目录下的WEB前端程序nutch-1.1.war复制到 ***/ tomcat/webapps/目录下。

(4)浏览器中输入http://192.168.99.6:8080/nutch-1.1,将自动解压nutch-1.1.war,在webapps下生成nutch-1.1目录。

(5)配置WEB前端程序中的 core-site.xml文件,该文件所在目录是***/tomcat/webapps/nutch-1.1/WEB-INF/classes/下。至少需要配置fs.default.name参数,指定HDFS文件系统URI

<configuration>

       <property>

               <name>fs.default.name</name>

                <value>hdfs://192.168.99.6:9000</value>

       </property>

</configuration>

(6)配置WEB前端程序中的nutch-site.xml文件,该文件所在目录是***/tomcat/webapps/nutch-1.0/WEB-INF/classes/下,配置如下:

<configuration>

        <property>

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

                <value>nutch-1.1</value>

        </property>

        <property>

               <name>searcher.dir</name>

               <value>/user/hadoop/crawled</value>

        </property>

</configuration>

(7)重启tomcat,可以先执行bin/catalina stop停止,再start。更改配置文件后必须重启tomcat,否则不会生效。

(8)http://192.168.99.6:8080/nutch-1.1下检索关键字。

 

6Tomcat中文问题

       由于tomcat本身的问题,可能出现搜索中文关键字总是空结果的情况,这时需要修要tomcat的一个配置文件***tomcat/conf/server.xml

           <Connector port="8080"protocol="HTTP/1.1"

              connectionTimeout="20000"

               redirectPort="8443"

                URIEncoding="UTF-8"

               useBodyEncodingForURI="true" />

       添加蓝色的部分。

 

7Jar包运行方式

       1-6部已经详细叙述了在hadoop上部署nutch的全过程,此外,还可以通过jar包的方式来运行nutch任务。在nutch的安装目录下自带了一个文件Nutch-1.1.job。将这个文件拷贝到hadoop的安装目录下,并将nutch/conf下的配置文件都拷贝到hadoop/conf下(主要不要覆盖hadoop原来的配置文件),就可以像运行hadoopjar包任务一样来运行nutch

       Bin/hadoop jar nutch-1.1.joborg.apache.nutch.crawl.Crawl urls -dir crawl -depth 1