一·集群配置——三台机器,njust01作为namenode,njust02,njust03作为datanode:
1. 修改各主机的主机名,以区分不同的机器:
打开/etc/hostname:sudo gedit /etc/hostname
对于namenode节点:
将主机名改成njust01,并保存关闭。如下图所示:
对于各个datanode节点:
依次将主机名改成njust02,njust03,……,并保存关闭。图略。
2. 配置各个主机之间IP与主机名的对应关系
修改集群中各个主机的/etc/hosts文件:sudo gedit /etc/hosts
将集群中各个主机的IP与主机名都列在此处,如图所示:
注意要将第一行注释掉:#127.0.0.1 localhost.localdomain localhost
这里补充个小知识——如何更改主机的IP地址:
首先,要使用ifconfig命令,查看当前网卡IP地址。如果显示为eth1,下面就要将eth0改成eth1。如果就是eth0,下面的配置内容就不需要做更改。
sudo gedit /etc/network/interfaces
在打开的文件中,写入以下信息。要注意一点:#设定eth0的IP这句话是给您看的,不需要写在文件中。如果把这些注释写在文件中,会导致IP配置失败。
auto lo
iface lo inet loopback #lo 是本地回环地址:127.0.0.1 并且打开文件就可以看到这两行
auto eth0
iface eth0 inet static
address 192.168.1.15
gateway 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255 #设定eth0的IP,这些是需要自己配的
关闭文件。
这样,IP并没有立即生效。
sudo /etc/init.d/networking restart
使得IP地址生效。此时,可以使用ifconfig命令来查看当前IP地址。这时候就能ping到局域网中的电脑了。但是上不了Internet,是因为没有设置DNS的原因。DNS信息保存在/etc/resolv.conf中,一旦更改,立即生效。
sudo gedit /etc/resolv.conf
在文件中写入DSN服务器的IP地址:
nameserver 202.119.80.10
nameserver 218.2.135.1
现在可以上网了。
3. 安装openssh-server,并配置各节点的公钥私钥
对于每个节点:
安装openssh-server:apt-get install openssh-server
创建公钥私钥:ssh-keygen –t rsa
期间会要求输入一些信息,直接按回车就可以。这样,在默认的路径(其中njust是当前用户名)/home/njust/.ssh目录下创建私钥id_rsa和一个公钥id_rsa.pub。
对于datanode节点:
将自己的公钥发送到namenode上:
cpid_rsa.pub datanode01.id_rsa.pub
scpdatanode01.id_rsa.pub namenode节点ip地址(在我的配置方案中,是192.168.1.13):/home/njust/.ssh
这里需要注意,由于每个datanode节点都要将自己的公钥传到namenode的相同路径下,因此,各个datanode发送的公钥文件名不能相同。这里使用cp命令,在每台datanode节点上将公钥文件复制为唯一名字的文件。
对于namenode节点:
在收到所有datanode发送过来的公钥文件之后,要综合这些文件(包括自身),并将这些文件发送到每个节点上:
cpid_rsa.pub authorized_keys
catdatanode01.id_rsa.pub >> authorized_keys
......
cat datanode0n.id_rsa.pub>> authorized_keys
scpauthorized_keys datanode的ip地址:/home/njust/.ssh
这时一定要查看一下ssh配置是否成功,查看方式是使用ssh命令:ssh 其他机器ip,如果不需要密码就可以登录,就说明配置成功。如果还需要密码,干脆无法登录,则需要重启电脑。重启之后再次使用ssh命令,如果还需要密码或者无法登录,则需要重新配置一遍。
4. 安装JDK
Namenode节点上新建文件夹/usr/program,下载JDK安装包jdk-6u22-linux-i586.bin,复制到目录/usr/ program下,在命令行进入该目Linux 下,执行命令./ jdk-6u22-linux-i586.bin,命令运行完毕,将在目录下生成文件夹jdk1.6.0_22,安装完毕。 安装完成后,修改/usr/program目录拥有着为njust用户:chown -R njust:njust /usr/program 。
/usr/ program目录需要复制到所有数据节点上。
Java环境变量的配置
命令行中执行命令gedit /etc/profile,并加入以下内容,配置环境变量(注意/etc/profile这个文件很重要,后面Hadoop的配置还会用到)。
# setjava environment
exportJAVA_HOME=/usr/program/jdk1.6.0_22/
export JRE_HOME=/usr/program/jdk1.6.0_22/jre
exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
保存并退出,执行以下命令使配置生效 chmod +x /etc/profile source /etc/profile 配置完毕,在命令行中使用命令”java -version”可以判断是否成功。
在njust下测试java -version
/etc/profile复制到所有数据节点上。
5. 集群配置
在namenode上执行:
下载nutch-1.2,将其解压到/usr/local目录下:
cd /usr/local
tar zxvfnutch-1.2.tar.gz
配置Hadoop的配置文件——与以往版本不同,Nutch-1.2中的配置文件(xxx-site.xml)散落在三处,均在nutch-1.2/conf/目录下:
(a)配置hadoop-env.sh
gedit nutch-1.2/conf/hadoop-env.sh
# set java environment
exportJAVA_HOME=/usr/program/jdk1.6.0_22/
(b)配置其他xml文件
打开core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://njust01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-0.20.2/hadooptmp</value>
</property>
</configuration>
打开hdfs-site.xml
<configuration>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop-0.20.2/data</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop-0.20.2/name</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>副本个数,不配置默认是3,应小于datanode机器数量</description>
</property>
</configuration>
打开mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>njust01:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/usr/local/hadoop-0.20.2/temp</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>40</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>4</value>
</property>
</configuration>
在配置完xml文件之后,需要手动创建目录/usr/local/hadoop-0.20.2,并使用chown –R njust:njust/usr/local/hadoop-0.20.2,赋予njust用户权限。
打开masters文件,加入namenode主机名
njust01
打开slaves文件,加入datanode主机名
njust02
njust03
最后,将/etc/hosts,/etc/profile复制到所有机器的相应位置上;将/usr/program和/usr/local/nutch-1.2这两个目录全部复制到所有机器的相应位置上。
6. 集群启动
在namenode上执行以下命令:
cd nutch所在目录/bin
./hadoop namenode –format
./start-all.sh
Hadoop会依次启动namenode, datanode1,datanode2,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,最后启动tasktracker2。
启动hadoop成功后,在namenode中生成了hadooptmp文件夹,在datanode中生成了hdfs文件夹和mapred文件夹。 namenode上用java自带的小工具jps查看进程 njust@njust01:~/$ jps
8383JobTracker
8733 Jps
8312SecondaryNameNode
8174NameNode
每个datanode上查看进程
njust@njust02:~/$ jps
7636 DataNode
7962 Jps
7749TaskTracker
在namenode上查看集群状态(以下状态信息是抄的配置那份经典配置教程)
bin/hadoopdfsadmin –report
ConfiguredCapacity: 16030539776 (14.93 GB)
PresentCapacity: 7813902336 (7.28 GB)
DFSRemaining: 7748620288 (7.22 GB)
DFS Used:65282048 (62.26 MB)
DFS Used%: 0.84%
Datanodesavailable: 2 (2 total, 0 dead)
Name:10.10.97.142:50010
DecommissionStatus : Normal
ConfiguredCapacity: 8015269888 (7.46 GB)
DFS Used:32641024 (31.13 MB)
Non DFS Used:4364853248 (4.07 GB)
DFSRemaining: 3617775616(3.37 GB)
DFS Used%:0.41%
DFSRemaining%: 45.14%
Last contact:Thu May 13 06:17:57 CST 2010
Name: 10.10.97.144:50010
DecommissionStatus : Normal
ConfiguredCapacity: 8015269888 (7.46 GB)
DFS Used:32641024 (31.13 MB)
Non DFSUsed: 3851784192 (3.59 GB)
DFSRemaining: 4130844672(3.85 GB)
DFS Used%:0.41%
DFSRemaining%: 51.54%
Lastcontact: Thu May 13 06:17:59 CST 2010
Hadoop 的web 方式查看:http:// namenode ip地址:50070
Hadoop查看工作情况: http:// namenode ip地址:50030
7. 开始爬网页
配置Nutch配置文件
(1)配置所有节点上的nutch-1.2/conf/nutch-site.xml文件
nutch-site.xml文件
<?xmlversion="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>http.agent.name</name>
<value>nutch-1.2</value>
<description>爬虫和搜索此参数必须配置</description>
</property>
</configuration>
(2) 配置所有节点上的conf/crawl-urlfilter.txt文件
# skip file:,ftp:, & mailto: urls
-^(file|ftp|mailto):
# skip imageand other suffixes we can't yet parse-/.(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|exe|jpeg|JPEG|bmp|BMP)$
# skip URLscontaining certain characters as probable queries, etc.
-[?*!@=]
# skip URLswith slash-delimited segment that repeats 3+ times, to break loops-.*(/[^/]+)/[^/]+/1/[^/]+/1/
# accepthosts in MY.DOMAIN.NAME
# 允许下载所有
+^
# skipeverything else
-.
在执行爬虫之前,要创建一个本地文件,名为urls:touch /usr/local/nutch-1.2/urls
在文件内写入要爬的网址,如http://blog.sina.com.cn/twocold
执行爬虫命令:
cd /usr/local/nutch-1.2/bin
./hadoop dfs –copyFromLocal /usr/local/nutch-1.2/urlsurls
./nutch crawl urls -dir data -depth 3 -topN 10
注意:
./hadoop dfs –copyFromLocal/usr/local/nutch-1.2/urls urls
该命令中的最后一个参数urls指的是hdfs中的urls文件,也就是说,将本地的某个urls文件复制到hdfs中。该命令执行之后,就会在hdfs中的/user/njust/目录下创建一个名为urls的文件。
./nutch crawl urls -dir data-depth 3 -topN 10
该命令就是以hdfs中的urls文件作为爬虫要爬的入手地址。
如果在爬行过程中出现以下语句:
Generator: 0 records selected for fetching, exiting ...
Stoppingat depth=1 - no more URLs to fetch.
就说明爬虫运行失败。
但是,不是什么情况下都失败。具体为什么会失败,还不清楚。估计是网址不能爬导致的。
我们的需求是,爬论坛,爬博客,爬微博。
比如我试过爬CSDN论坛上的某个人发的一个贴,但是就报上面的错。
但是我爬韩寒的博客,就可以。但是也不是什么都能爬下来,博文的回复就爬不到。
还请大侠指教一二!多谢啦!
关闭整个hadoop:
在namenode中,使用以下命令:
cd /usr/local/nutch-1.2/bin
./stop-all.sh
8. 检索
(1) 命令行下检索
使用Hadoop集群中的一台机器,配置nutch-site.xml文件,配置如下:
<property>
<name>http.agent.name</name> 不可少,否则无搜索结果
<value>nutch-1.0</value>
<description>HTTP 'User-Agent' requestheader.</description>
</property>
<property>
<name>searcher.dir</name>
<value>/user/njust/data</value>
<!—
该值是HDFS中的目录,这里是绝对路径,即爬虫生成的data目录在HDFS中的/user/nutch/data目录下。由Hadoop-site.xml中的fs.default.name参数可以决定它的HDFS绝对路径是:hdfs://gc04vm12:9000/user/nutch/data 对应HDFS中的目录情况如下: hdfs中的目录情况 bin/hadoop dfs -ls drwxr-xr-x -nutch supergroup 0 2010-05-18 17:31 /user/nutch/data
-->
<description>index dir </description>
</property>
使用检索命令:
cd /usr/local/nutch-1.2/bin
./nutchorg.apache.nutch.searcher.NutchBean 要检索的关键字,如中国
如果出现Total hits: 0,则说明没有找到与关键字匹配的内容。这个还要测一下。为什么在tomcat中就可以搜索到内容。在命令行里就搜索不到!
也请大侠指教!
(2) Tomcat下检索
安装tomcat-6.0.29
在官网下载Core版本的apache-tomcat-6.0.29.tar.gz
解压缩到/usr/program目录下:
cd /usr/program
tar zxvf apache-tomcat-6.0.29.tar.gz
配置tomcat环境变量
sudo gedit /etc/profile
在 umask 022 之前添加:
export CATALINA_HOME=/opt/apache-tomcat-6.0.29
重启!重启计算机后,/etc/profile 的改变才会生效。
启动和测试
cd /usr/program/apache-tomcat-6.0.28/bin,可以看见里面有几个bash 脚本,在bin目录下使用
./startup.sh命令就可以开启服务了。
运行$./startup.sh结果应该显示:
Using CATALINA_BASE: /usr/share/tomcat6
Using CATALINA_HOME: /usr/share/tomcat6
Using CATALINA_TMPDIR: /usr/share/tomcat6/temp
Using JRE_HOME: /usr/lib/jvm/java/jdk1.6.0_22
Using CLASSPATH: /usr/share/tomcat6/bin/bootstrap.jar
打开你的浏览器,输入:localhost:8080。出现 tomcat 欢迎界面表示配置成功。
在tomcat中配置nutch
将nutch-1.2目录下的nutch-1.2.war复制到tomcat安装目录下的webapps目录下(***/ tomcat/webapps/)
浏览器中输入http://localhost:8080/nutch-1.2,将自动解压nutch-1.2.war,在webapps下生成nutch-1.2目录。
配置***/tomcat/webapps/nutch-1.2/WEB-INF/classes/目录下的core-site.xml文件
<property>
<name>fs.default.name</name>
<value>hdfs://njust01:9000</value><!-这里njust01是当前机器的主机名-à
<description></description>
</property>
配置***/tomcat/webapps/nutch-1.2/WEB-INF/classes/目录下的nutch-site.xml文件
<property>
<name>http.agent.name</name>不可少,否则无搜索结果
<value>nutch-1.0</value>
<description>HTTP'User-Agent' request header.</description>
</property>
<property>
<name>searcher.dir</name>
<value>/user/njust/data</value>
<!— 该值是HDFS中的目录,这里是绝对路径,即爬虫生成的data目录在HDFS中的/user/njust/data目录下。由Hadoop-site.xml中的fs.default.name参数可以决定它的HDFS绝对路径是: hdfs://njust01:9000/user/njust/data对应HDFS中的目录情况如下:
hdfs中的目录情况bin/hadoop dfs -ls drwxr-xr-x - nutch supergroup 0 2010-05-18 17:31/user/nutch/data -->
<description>index dir </description>
</property>
按照上面的配置之后,启动tomcat,可以成功,但是在使用中文时会发现乱码,因为NUTCH本身页面是unicode, 而TOMCAT给的应该是GBK,所以有这个问题,改一下tomcat/conf/server.xml
<Connector port="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
<Connector port="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding='utf-8'/>
重启tomcat
cd /usr/program/apache-tomcat-6.0.29/bin
./shutdown.sh
./startup.sh
在浏览器中输入http://localhost:8080/nutch-1.2,出现如下页面:
在搜索框中输入中文搜索内容(在此之前tomcat的编码一定要按照上面的方式添加过),如浓烟升起,点击搜索,就可以查看到结果。
版权声明:本文为博主原创文章,未经博主允许不得转载。 |