在虚拟机中安装的Ubuntu系统下搭建Hadoop集群时首先要解决的问题是将宿主机的文件拷贝到虚拟机上。采用的简单方法是宿主机使用Serv-U建立一个FTP然后在虚拟机上登录将文件拷出来。
要先熟悉Linux的基本概念和操作,如:cd、ls、tar、cat、ssh、scp、cp、rm、sudo、su、apt-get等操作。
一.实践环境:
Ubuntu 10.04+jdk1.6+hadoop-0.20.1
机器名 IP 作用 Master 192.168.128.2 Namenode、master、jobtracker Slave1 192.168.128.3 Datanode、slave、tasktracker Slave2 192.168.128.4 Datanode、slave、tasktracker
二. 安装步骤:
1. 在虚拟机上安装Ubuntu10.04。这个很简单可以上网参考基本上是一直“下一步”就行。注意两个地方:一个是出现选择存储空间时直接选择使用整个磁盘就行,不要进行手动分区。第二个就是我才用的上网方法是NAT技术。配置详情在11.30日的日志里。
2. 对三台虚拟机做一下更新。$sudo apt-get update 。后面要安装软件时,如果没有更新,在安装所需软件时,可能会说找不到软件,安装不上。注意选择软件源时不要仅仅是一个网站,建议使用 “中国 的服务器”。
3. 修改机器名和hosts文件。
IP为 192.168.128.2 的虚拟机做namenode 机器名叫 master。
IP为 192.168.128.3和192.168.128.4的虚拟机做datanode 机器名分别叫slave1,slave2
第一步:修改三台虚拟机的机器名。
对master
$ vi /etc/hostname
进入文件后将机器名改成master
对slave
$ vi /etc/hostname
进入文件后机器名改成 slave1
$ vi /etc/hostname
第二步:修改三台虚拟机的/etc/hosts文件。
对master和slave
vi /etc/hosts
进入文件后原内容删除加入如下内容。
127.0.0.1 localhost
192.168.128.2 master master
192.168.128.3 slave1 slave1
192.168.128.4 slave2 slave2
4.在三台虚拟机上分别新建一个名字为jsj的用户。
第一步:root@:~$ adduser jsj
第二步:提示你要求你填写一些信息,可以直接回车。
第三步:设置jsj这个用户的密码(尽量简单一致)。
第四步:root@:~/home$ chown -R jsj:jsj jsj
//将jsj文件夹的所用者改成jsj用户的。否则我们用adduser jsj创建了jsj用户后,jsj用户不能在自己的主目录下创建文件夹,(如:$ mkdir .ssh)提示没有权限创建文件夹。
5. 在三台虚拟机上分别配置ssh无密码登录。
第一步:root@:~$ sudo apt-get install ssh //开启ssh服务。
第二步:root@:~$ mkdir .ssh
在三台虚拟机的/home/jsj目录下都用jsj用户建立一个.ssh目录
第三步:root@:~/.ssh/$ ssh-keygen –t dsa –P ‘’ –f ~/.ssh/id_dsa
//这个命令将为masters上的jsj用户生成其密钥对,生成的密钥对id_dsa,id_dsa.pub,默认存储在/home/jsj/.ssh目录下。
第四步:root@:~/.ssh/$ cat id_dsa.pub >> authorized_keys。
//把id_dsa.pub 追加到授权key 里面(当前并没有authorized_keys文件是你也可以直接使用cp 命令)。至此无密码登录到本机已经配置好了。可以使用 $ ssh localhost 命令测试一下。第一次登录时要输入yes,之后就不用了。
第五步:root@:~/.ssh/$ scp id_dsa.pub jsj@slave1:/home/jsj/.ssh/
//将id_dsa.pub 文件传送到slave1 这台虚拟机上。slave2 同理。
第六步:到slave1 这台虚拟机上执行第四步的操作。slave2 同理。至此master就可以无密码登录到slave1 和slave2 上了。如果想要slave1 和slave2 都可以无密码登录到master上必须在slave1 和salve2 上也操作第三部生成自己的密钥对而且要将密钥对追加到三台机器的authorized_keys文件里。
至此各个机器上的SSH配置已经完成,可以测试一下了,比如master向slave1发起ssh连接
jsj@mater:~/.ssh$ ssh slave1
如果ssh配置好了,就会出现以下提示信息
The authenticity of host [dbrg-2] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候你会发现不需要输入密码就可以建立ssh连接了,恭喜你,配置成功了。不过,别忘了测试本机ssh localhost (因为后面的Hadoop命令受到这一步的影。注意如果你没有成功记住删除“~/.ssh/know_hosts”文件就可以重新开始。
6. 在三台虚拟机上分别安装jdk1.6
第一步:将jdk-6u13-linux-i586.bin拷到/home/jsj目录下
第二步:root@:~/home/jsj$ chmod u+x jdk-6u13-linux-i586.bin
//将bin文件修改成可执行文件。
第三步:root@:~/home/jsj/$ ./jdk-6u13-linux-i586.bin
//运行安装文件
第四步:root@:~/$ gedit /etc/profile
在文件里面加入如下信息。
export JAVA_HOME=/home/jsj/jdk1.6.0_13
export JRE_HOME=/home/jsj/jdk1.6.0_13/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
然后root@:~/$ source /etc/profile 是文件内容生效。