目前我们使用的是hadoop的核心功能,在hadoop的网站上就是hadoop-core,里面包括两个部分,一个是HDFS,也就是hadoop distributed filesysem.一个是mapred,一个map/reduce的框架。
在hadoop的架构中,对于hdfs,存在一个namenode,多个datanode,namenode存储的是各个datanode的元数据,比如他所在的服务器地址,存储了那些数据块等。当客户端访问hdfs时,他首先和namenode交互,得到他要的具体的datanode的信息,然后就可以和datanode进行交互了。也就相当于namenode是个路由表一样的情况。对于mapred,存在一个jobtracker,多个tasktracker,jobtracker的客户端组装job,描述map任务,reduce任务,输入输出的类型,最后把这个job提交给jobtracker。jobtracker会和namenode沟通,了解要操作的数据所在的位置,尽量的让任务在数据所在的服务器上执行。现在配置的服务器有3台,IP地址分别为192.168.16.107, 192.168.16.108,192.168.16.109.其中107这台会同时作为namenode和jobtracker,而108和109作为datanode和tasktracker.
下面我们开始配置分布式的hadoop,一,首先给几台服务器取名,这里107取名为m1,108为s1,109为s2.107上修改为
192.168.16.107 m1
192.168.16.108 s1
192.168.16.109 s2运行命令hostname m1测试一下,确定ping m1,ping s1,ping s2都能ping到。中间可能需要重启服务器。108上修改为
192.168.16.107 m1
192.168.16.108 s1运行命令hostname s1
测试一下,确定ping m1,ping s1都能ping到。中间可能需要重启服务器。109上修改为
192.168.16.107 m1
192.168.16.109 s2运行命令hostname s2
测试一下,确定ping m1,ping s2都能ping到。中间可能需要重启服务器。二,配置ssh证书,保证m1在执行ssh s1,ssh s2这样的命令时不需要输入密码。在m1服务器上执行ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys拷贝id_dsa.pub到s1服务器上,执行cat id_dsa.pub >> ~/.ssh/authorized_keys
拷贝id_dsa.pub到s2服务器上,执行cat id_dsa.pub >> ~/.ssh/authorized_keys
执行上面的命令时如果没有相应目录,则先创建测试一下,第一次执行ssh s1,ssh s2需要确认一下,是为了增加known host。三,修改nutch/conf下的几个配置文件,1)master的内容修改为
m1,2)salves的内容修改为
s1
s23)hadoop-env.sh,
export JAVA_HOME=/opt/java/latest
export HADOOP_HOME=/root/nutch_bin
export HADOOP_CONF_DIR=/root/nutch_bin/conf4)修改hadoop-site.xml<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://m1:9000</value>
</property><property>
<name>mapred.job.tracker</name>
<value>m1:9001</value>
</property><property>
<name>hadoop.tmp.dir</name>
<value>/root/nutch_bin/tmp</value>
</property><property>
<name>dfs.name.dir</name>
<value>/root/nutch_bin/filesystem/name</value>
</property><property>
<name>dfs.data.dir</name>
<value>/root/nutch_bin/filesystem/data</value>
</property><property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>5)如3所示,nutch_bin目录在/root下。cd到root目录下,运行scp -r nutch_bin s1:/root/.再scp -r nutch_bin s2:/root/.6)运行nutch使用分布式的hadoopbin/start-all.sh
bin/hadoop namenode -format
bin/hadoop dfs -put urls urls
bin/nutch crawl urls -dir crawl
7)修改tomcat下的nutch.war,使其使用hdfs<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://m1:9000</value>
</property>
<property>
<name>searcher.dir</name>
<value>crawl</value>
</property>
</configuration>
ITeye推荐