Linux下Nutch分布式配置和使用 |
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
网站管理员
![]() ![]() 注册日期:
1970/1/1 8:00 所属群组:
网站管理员 帖子:
7077
等级: 58; EXP: 5
HP : 0 / 1426 MP : 2359 / 208188 ![]() |
Linux下Nutch分布式配置和使用Linux下Nutch分布式配置和使用
目 录
介绍这是本人在完全分布式环境下在Cent-OS中配置Nutch-1.1时的总结文档,但该文档适合所有Linux系统和目前各版本的nutch。 0 集群网络环境介绍集群中所有节点均是Cent-OS系统,防火墙均禁用,sshd服务均开启;所有节点上均有一个名为nutch的用户(非超级用户,安装前root使用useradd添加),用户主目录是/home/nutch。 集群包含三个节点:1个namenode,2个datanode,节点之间局域网连接,可以相互ping通。节点IP地址和主机名分布如下: 10.10.97.132 gc03vm12 namenode 10.10.97.142 gc04vm12 datanode01 10.10.97.144 gc04vm14 datanode02 本配置将Nutch安装在/home/nutch/nutchinstall目录下。一般最好建议安装在其它非主目录路径下,例如/usr/local下,但此时需要使nutch用户对目录有rwx权限(nutch用户对主目录有rwx权限),一般做法是root用户在/usr/local下创建一个目录,并修改该目录拥有者为nutch(chown –R nutch:nutch 目录路径)。 1 /etc/hosts文件配置namenode节点上vi /etc/hosts,将所有节点的名字和IP地址写入其中,写入如下内容,注意注释掉127.0.0.1行: 10.10.97.132 gc03vm12 10.10.97.142 gc04vm12 10.10.97.144 gc04vm14 # 127.0.0.1 centos54 localhost.localdomain localhost /etc/hosts文件需要复制到所有数据节点上。 2 SSH无密码验证配置Nutch是基于Hadoop的,Hadoop需要使用SSH协议,namenode将使用SSH协议启动namenode和datanode进程,datanode向namenode传递心跳信息可能也是使用SSH协议,这是我认为的,还没有做深入了解,datanode之间可能也需要使用SSH协议。假若是,则需要配置使得所有节点之间可以相互SSH无密码登陆验证)。 2.1配置所有节点之间SSH无密码验证(0)原理 节点A要实现无密码公钥认证连接到节点B上时,节点A是客户端,节点B是服务端,需要在客户端A上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到服务端B上。当客户端A通过ssh连接服务端B时,服务端B就会生成一个随机数并用客户端A的公钥对随机数进行加密,并发送给客户端A。客户端A收到加密数之后再用私钥进行解密,并将解密数回传给B,B确认解密数无误之后就允许A进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端A公钥复制到B上。 因此如果要实现所有节点之间无密码公钥认证,则需要将所有节点的公钥都复制到所有节点上。 (1)所有机器上生成密码对 (a)所有节点用nutch用户登陆,并执行以下命令,生成rsa密钥对: zkl@zkl-ubuntu:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/zkl/.ssh/id_rsa): 默认路径 Enter passphrase (empty for no passphrase): 回车,空密码 Enter same passphrase again: Your identification has been saved in /home/zkl/.ssh/id_rsa. Your public key has been saved in /home/zkl/.ssh/id_rsa.pub. 这将在/home/nutch/.ssh/目录下生成一个私钥id_rsa和一个公钥id_rsa.pub。 (b)将所有datanode节点的公钥id_rsa.pub传送到namenode上: cp id_rsa.pub datanode01.id_rsa.pub scp datanode01.id_rsa.pub namenode节点ip地址:/home/nutch/.ssh ...... cp id_rsa.pub datanode0n.id_rsa.pub (c)namenode节点上综合所有公钥(包括自身)并传送到所有节点上 cp id_rsa.pub authorized_keys namenode自己的公钥 cat datanode01.id_rsa.pub >> authorized_keys ...... cat datanode0n.id_rsa.pub >> authorized_keys 然后使用SSH协议将所有公钥信息authorized_keys复制到所有DataNode的.ssh目录下 zkl@zkl-ubuntu:~$ scp authorized_keys data节点ip地址:/home/zkl/.ssh 这样配置过后,所有节点之间可以相互SSH无密码登陆,可以通过命令 “ssh 节点ip地址”来验证。 3 JDK安装和Java环境变量配置3.1 安装 JDK 1.6root用户登陆,在Namenode节点上新建文件夹/usr/program,下载JDK安装包jdk-6u13-linux-i586.bin,复制到目录/usr/ program下,在命令行进入该目录,执行命令“./ jdk-6u13-linux-i586.bin”,命令运行完毕,将在目录下生成文件夹jdk1.6.0_13,安装完毕。 安装完成后,修改/usr/program目录拥有着为nutch用户, Chown -R nutch:nutch /usr/program /usr/ program目录需要复制到所有数据节点上。 3.2 Java环境变量配置root用户登陆,命令行中执行命令”vi /etc/profile”,并加入以下内容,配置环境变量(注意/etc/profile这个文件很重要,后面Hadoop的配置还会用到)。 # set java environment export JAVA_HOME=/usr/program/jdk1.6.0_13/ export JRE_HOME=/usr/program/jdk1.6.0_13/jre export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH 保存并退出,执行以下命令使配置生效 chmod +x /etc/profile source /etc/profile 配置完毕,在命令行中使用命令”java -version”可以判断是否成功。 在nutch下测试java -version /etc/profile复制到所有数据节点上。 4 Hadoop集群配置在namenode上执行: 下载nutch-1.0,将其解压到/home/nutch/nutchinstall目录下,使用如下命令: tar zxvf nutch-1.0.tar.gz (1)配置Hadoop的配置文件 (a)配置hadoop-env.sh $ vi nutch-1.0/conf/hadoop-env.sh
(b)配置conf/hadoop-site.xml Hadoop配置参数的含义请参考Hadoop-default.xml,在lib/hadoop-xxx.core.jar中能找到。
(c)配置masters文件,加入namenode的主机名
(d)配置slaves文件, 加入所有datanode的主机名
(2)复制配置好的各文件到所有数据节点上。 root用户下: scp /etc/hosts 数据节点ip地址:/etc/hosts scp /etc/profile 数据节点ip地址:/etc/profile scp /usr/program 数据节点ip地址:/usr/program nutch用户下: scp /home/nutch/nutchinsta 数据节点ip地址:/home/nutch/ 5 Hadoop集群启动Namenode执行: 格式化namenode,格式化后在namenode生成了hdfs/name文件夹 bin/hadoop namenode –format 启动hadoop所有进程, bin/start-all.sh(或者先后执行start-dfs.sh和start-mapreduce.sh)。 可以通过以下启动日志看出,首先启动namenode,然后启动datanode1,datanode2,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,最后启动tasktracker2。 启动hadoop成功后,在namenode中生成了hadooptmp文件夹,在datanode中生成了hdfs文件夹和mapred文件夹。 namenode上用java自带的小工具jps查看进程
每个datanode上查看进程
在namenode上查看集群状态 bin/hadoop dfsadmin –report
Hadoop 的web 方式查看:http:// namenode ip地址:50070 Hadoop查看工作情况: http:// namenode ip地址:50030 6 Nutch分布式爬虫6.1配置Nutch配置文件(1)配置所有节点上的conf/nutch-site.xml文件 nutch-site.xml文件
(2)配置所有节点上的conf/crawl-urlfilter.txt文件
6.2 执行Nutch分布式爬虫Nutch爬虫命令是: bin/nutch Crawl <urlDir> [-dir d] [-threads n] [-depth i] [-topN N] 其中的<urlDir>参数是入口地址文件或其所在的目录,启动了集群进行分布式爬虫时,这个目录必须是HDFS中的目录,爬虫完毕将在HDFS中生成存有爬下来的数据的目录[-dir d]。 (1)入口地址文件 在本地磁盘中新建一个文件,写入一个入口url,然后将其复制到HDFS中,使用如下命令: (3)爬虫测试,在namenode、datanode或者与集群网络连通的安装有Hadoop或者nutch并且hadoop-site.xml配置相同的客户机上上均可使用如下命令分布式爬虫: bin/nutch crawl urls -dir data -depth 3 -topN 10
爬虫完毕,hdfs中生成data目录,data目录下面有这些子目录:crawldb,index, indexes,linkdb,segments。所有节点上的爬虫日志在logs/hadoop.log中。上述“Stopping at depth=1 - no more URLs to fetch.”这个错误不知何故,我在另几台机器上相同配置爬虫却没有出现任何错误,不知何原因。一般情况下按此配置没有任何问题。 从浏览器中可以查看到分布式爬虫时作业状态: 7 Nutch检索Nutch的爬虫和搜索可以说是分离的两块,爬虫可以是M/R作业,但搜索不是M/R作业。搜索有两种方式:一是将爬虫数据(或者称索引数据)放在本地硬盘,进行搜索。二是直接搜索HDFS中的爬虫数据。 Nutch自带了一个WEB前端检索程序,即主目录下的nutch-x.x.war,实现WEB前端检索时需要安装Tomcat,执行应用程序。此外,在命令行中也可执行Nutch检索命令。 7.1 Windows下Nutch单机搜索本地索引数据(1)将HDFS中生成的存储爬虫数据的data目录复制到本地,并将data目录拷贝到windows下的某个目录中,例如D盘下。 bin/hadoop fs –copyToLocal data data (2) 安装tomcat,请确保安装路径没有空格,这很重要,在windows上如果有空格将导致搜索结果始终为0。启动tomcat服务。 (3)将Nutch主目录下的WEB前端程序nutch-1.0.war复制到 ***/ tomcat/webapps/目录下。 (4)浏览器中输入http://localhost:8080/nutch-1.0,将自动解压nutch-1.0.war,在webapps下生成nutch-1.0目录。 (5)
2011/7/24 20:08
|
|||||||||||
![]() |