我们首先在主控结点 homer06 上安装和配置好 Hadoop,安装过程可以参考本系列文章的第一篇。假定我们把 Hadoop 安装在 /home/caoyuz/hadoop-0.16.0目录中,并且 JRE 1.5 安装在 /home/caoyuz/jre 目录下。
在其中设置 JAVA_HOME 环境变量:export JAVA_HOME=”/home/caoyuz/jre”
在本系列文章的第一篇中,我们通过修改此文件,配置了 Hadoop 的伪分布式运行模式。现在,我们同样可以通过配置此文件,配置 Hadoop 的真实的分布式运行环境。请参照代码清单 2 修改 conf/hadoop-site.xml:
代码清单2
<configuration> <property> <name>fs.default.name</name> <value>homer06.austin.ibm.com:9000</value> <description>The name of the default file system. Either the literal string "local" or a host:port for DFS.</description> </property> <property> <name>mapred.job.tracker</name> <value>homer06.austin.ibm.com:9001</value> <description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task.</description> </property> <name>dfs.name.dir</name> <value>/home/caoyuz/hadoopfs/name</value> <description>Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy. </description> </property> <property> <name>dfs.data.dir</name> <value>/home/caoyuz/hadoopfs/data</value> <description>Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored.</description> </property> <property> <name>dfs.replication</name> <value>2</value> <description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.</description> </property> </configuration>
参数 fs.default.name 指定 Name Node 的 IP 地址和端口号,此处我们将其设定为 homer06 及 9000 端口,参数 mapred.job.tracker 指定 JobTracker 的 IP 地址和端口号,此处我们将其设定为 homer06 及 9001 端口。 参数 dfs.name.dir 指定 Name Node 相关数据在本地文件系统上的存放位置, 此处我们将其设定为 /home/caoyuz/hadoopfs/name ,参数 dfs.data.dir 指定 Data Node 相关数据在本地文件系统上的存放位置,此处我们将其设定为 /home/caoyuz/hadoopfs/data 。注意, Hadoop 会自动创建这两个目录,无需事先创建。
更多的参数配置,可以参考 conf/hadoop-default.xml 文件,并在 conf/hadoop-site.xml 文件中设置。
修改 conf/masters 文件,将其中的 localhost 改为 homer06 ,修改 conf/slaves 文件, 删掉其中的 localhost, 将我们的另两台机器 homer07, homer08 加入, 注意每个机器一行。
至此, 我们已经在 homer06 上安装和配置好了 hadoop 和 jre, 现在需要将其部署到其它机器上去,通过 scp 命令即可完成,如代码清单 3 所示:
代码清单3
homer06: $ scp -r /home/caoyuz/hadoop-0.16.0 homer07:/home/caoyuz/hadoop-0.16.0 homer06: $ scp -r /home/caoyuz/jre homer07:/home/caoyuz/jre homer06: $ scp -r /home/caoyuz/hadoop-0.16.0 homer08:/home/caoyuz/hadoop-0.16.0 homer06: $ scp -r /home/caoyuz/jre homer08:/home/caoyuz/jre
其中用 scp 拷贝 jre 目录到其它机器上去不是必须的。你只需保证你的所有机器上均安装了 JRE1.5 以上版本,并且都是安装在同一目录。
如代码清单 4 所示:
代码清单4
homer06: $ cd /home/caoyuz/hadoop-0.16.0 homer06: $ bin/hadoop namenode -format
如代码清单5所示:
代码清单5
homer06: $ cd /home/caoyuz/hadoop-0.16.0 homer06: $ bin/start-all.sh
启动完成之后,运行 ps -ef 命令应该可以看到 homer06 上启动了 3 个新的 java 进程 (namenode, secondary namenode, jobtracker), 同时,我们可以到 homer07, homer08 两台机器上用 ps –ef 查看,这两台机器上应该已经自动启动了 2 个新的 java 进程 (datanode, tasktracker)