上面的步骤,确认了单机能够执行Hadoop的伪分布执行,真正的分布式执行无非也就是多几台slave机器而已,配置方面的有一点点区别,配置起来就很是简单了。node
192.168.56.101nginx 192.168.56.102ubuntu 192.168.56.103服务器 |
在每台机器的/etc/hosts中都将ip及hostname给映射上:ssh
192.168.56.101 nginx1分布式 192.168.56.102 nginx2oop 192.168.56.103 nginx3字体 |
其中192.168.56.101为前面配置的那台服务器,用于作为namenode及jobtracker,另外两台用于作slaves,用于执行datanode及tasktracker。spa
要使某台服务器成为namenode,必须在要core-site.xml中指定它;要使某个节点成为jobtracker,必须在mapred-site.xml指定它,这个参见第5点中的core-site.xml以及mapred-site.xml的配置。.net
对Hadoop来讲,从hdfs的角度来看有namenode及datanode,namenode只可以有一个,而datanode能够有多个,namenode存放的是datanode中文件的元数据,客户端经过namenode获取datanode中文件的信息;从jobtracker角度来讲看有jobtracker及tasktracker,jobtracker只可以有一个,而tasktracker能够有多外,tasktracker经过jobtracker来调度。
在本例中使用192.168.56.101作为namenode及jobtracker,使用192.168.56.102作为secondarynamenode、datanode以及tasktracker,使用192.168.56.103作为datanode以及tasktracker,详情参见下面的配置。
1)、JDK的路径必须相同;
2)、操做Hadoop的用户必须相同;
3)、Hadoop的存放路径必须相同;
Slave机器上的hadoop可直接将namenode上面的hadoop拷贝过去,不用作任何修改,只要路径放置就能够了;
4)、每台机器~/.ssh目录下存放相同的id_rsa及authorized_keys
将namenode的机器上的~/.ssh/id_rsa及authorized_keys拷贝到每台slave机器上的~/.ssh中,固然slave机器中也必须是安装了ssh的了,而后在每台机器上都经过ssh访问一下其它的两台机器,确保都是能够不输入密码访问的。
5)、三台机器的/etc/profile中的内容相同;
这个文件存放的是全部datanode的IP或者机器名,每行指定一个。咱们这里使用nginx2及nginx3来作为datanode,所以slaves文件的配置以下:
nginx2 nginx3 |
masters文件中放置的是secondarynamenode的机器名,其中默认的内容为“localhost”,可是在生产环境中,确定不会将namenode和secondarynamenode放置在同一台服务器上,在此例中我就将secondarynamename设置在第二台服务器上,那么此时文件中的内容应该以下:
#这里只使用一台作为secondarynamenode nginx2 #nginx3 |
只须要作简单的修改就能够了,不一样点以红色字体标识出。
core-site.xml:
<configuration> <property> <!-- 用于设置Hadoop的文件系统,由URI指定,value对应的服务器就是namenode所在的服务器及端口,secondarynamenode经过在masters这个文件中指定 --> <name>fs.default.name</name> <value>hdfs://nginx1:9000</value> </property> <property> <!-- 配置Hadoop的临时目录,默认在/tmp目录下,可是/tmp上面可能会被系统自动清理掉。--> <name>hadoop.tmp.dir</name> <!-- 目录若是不存在,须要手动建立 --> <value>/home/fenglibin/hadoop_tmp</value> <description>A base for other temperary directory</description> </property> </configuration> |
mapred-site.xml:
<configuration> <property> <!-- value对应的值为jobtracker所在的服务器及端口,tasktracker在slaves中指定 --> <name>mapred.job.tracker</name> <value>nginx1:9001</value> </property> </configuration> |
hdfs-site.xml:
<configuration> <property> <!-- 指定其副本数,value的值表示副本的数量 --> <name>dfs.replication</name> <!-- 这里有两台datanode --> <value>2</value> </property> </configuration> |
DataNode都是经过NameNode启动起来的,于是启动的时候只须要在NameNode上执行start-all.sh就能够了,此时咱们查看各服务器中的进程。
Nginx1(NameNode)所在服务器:
fenglibin@ubuntu1110 :/usr/local/hadoop-1.2.1$ jps 2834 NameNode 3011 JobTracker 3108 Jps |
Ngnix2:
fenglibin@ubuntu11102:~$ jps 984 DataNode 1075 TaskTracker 919 SecondaryNameNode 1420 Jps |
Ngnix3:
fenglibin@ubuntu11103:~$ jps 1374 Jps 1021 TaskTracker 846 DataNode |
从上面的进程信息,能够看到nginx1中启动了namenode及jobtracker,,nginx2和nginx3都分别启动了DataNode及TaskTracker,只是nginx2中比nginx3中多启动了一个SecondaryNameNode,这也是咱们但愿的结果。
经过以下命令:
hadoop dfsadmin -report |
可获得以下输出:
Warning: $HADOOP_HOME is deprecated.
Safe mode is ON Configured Capacity: 15283421184 (14.23 GB) Present Capacity: 10592149504 (9.86 GB) DFS Remaining: 10591629312 (9.86 GB) DFS Used: 520192 (508 KB) DFS Used%: 0% Under replicated blocks: 20 Blocks with corrupt replicas: 0 Missing blocks: 0
------------------------------------------------- Datanodes available: 2 (2 total, 0 dead)
Name: 192.168.56.102:50010 Decommission Status : Normal Configured Capacity: 7641710592 (7.12 GB) DFS Used: 307200 (300 KB) Non DFS Used: 2733502464 (2.55 GB) DFS Remaining: 4907900928(4.57 GB) DFS Used%: 0% DFS Remaining%: 64.23% Last contact: Sun Jun 15 15:46:39 CST 2014
Name: 192.168.56.103:50010 Decommission Status : Normal Configured Capacity: 7641710592 (7.12 GB) DFS Used: 212992 (208 KB) Non DFS Used: 1957769216 (1.82 GB) DFS Remaining: 5683728384(5.29 GB) DFS Used%: 0% DFS Remaining%: 74.38% Last contact: Sun Jun 15 15:46:39 CST 2014 |
查看namenode的状态
namenode是布署在192.168.56.101上,只须要输入:
便可查看namenode的状态,以下图所示:
查看jobtracker的状态
因jobtracker和namenode是布署在同一台机器上的,输入:
便可查看jobtracker的状态,以下图所示:
查看secondarynamenode的状态
Secondarynamenode是布署在192.168.56.102上面,输入:
便可查看其状态,以下:
查看192.168.56.102上面的tasktracker的状态,打入:
查看状态,以下:
从上面能够看出,监控的服务,都是以“500*”端口对外提供服务,不过这里发现一个问题,同为datanode以及tasktracker的192.168.56.103上面却没有开启一个“500*”这样的端口,而192.168.56.102上却开启除secondarynamenode以外的其它4个“500*”这样的端口:
192.168.56.102:
其中端口50090是secondarynamenode的监控端口,而50060是tasktracker的监控端口,而50010、50075以及50020都是datanode使用的端口。
而在192.168.56.103上,却只开了两个端口:
分别与namenode以及jobtracker相连着的。
为何在192.168.56.103上面tasktracker以及datanode的监控呢?