对于每一台虚拟机hosts的设置如下:
127.0.0.1 localhost
192.168.158.102 Ubuntu1.localdomain ubuntu1
192.168.158.103 ubuntu2.localdomain ubuntu2
192.168.158.101 caodh
最后一行是为了能ping通宿主机。同时在宿主机上也按上面进行配置。重新启动两台机器的网络:
sudo /etc/init.d/networking restart
执行结果显示,ubuntu1重新启动成功,而ubuntu2重新启动失败,报得错误很奇怪:
eth0: ERROR while getting interface flags: No such device
这个执行结果一度让我打了退堂鼓,想重新再装虚机来创建slaves,但是上网搜了一下,还真有这个错误的解决办法!看来我遇到的问题前人都已经解决了,原来是这样的,新克隆的虚拟机镜像的网卡mac地址已经变更。打开虚拟机的.vmx文件,ethernet0.generatedAddress项记录了该虚拟机的mac地址。查看所有适配器信息
ifconfig -a发现除了原来的eth0外,Ubuntu已经将新网卡命名为eth1。
Ubuntu保存网卡mac地址和设备名的配置文件在/etc/udev/rules.d/70-persistent-net.rules网卡的网络配置保存在/etc/network/interfaces该配置文件中只有原来eth0的配置信息。由于我在家里的虚机是dhcp的,因此,我决定删除/etc/udev/rules.d/70-persistent-net.rules。命令如下:
sudo rm /etc/udev/rules.d/70-persistent-net.rules
重新启动ubuntu2,成功获取了一个新的IP,多虚拟机配置成功!
对于每一个虚机你要指定Hadoop的节点信息,我把ubuntu1设置成master,ubuntu2设置成slave,相应地修改/home/cdh/hadoop-0.19.0/conf/masters和slaves,把其中的localhost删除,分别设置上ubuntu1和ubuntu2,注意,slaves中可以设置多个slave的,主机名一行一个。
这些配置文件,每一个虚机的都是一样的,只有辛苦一点手动设置上去了。也可以偷懒一下,利用ssh的scp来各个虚机进行copy,命令如下:
scp -r hadoop-0.19.0 cdh@ubuntu2:/home/cdh/hadoop-0.19.0
这样也可以保证每个虚机的部署完全一致。
然后,我准备启动hadoop,首先格式化dfs,命令是:
cd /home/cdh/hadoop-0.19.0
bin/hadoop namenode -format,执行结果,抱错!想来想去是不是那地方配置不对?感觉也不是呀,打开来配置文件仔细看,也没有看出问题,后来恍然大悟,linux下文本文件和windows下的文本文件中对于换行符的定义不一致,于是用vi打开hadoop-site.xml,仔细看,发现的确文件中多出了很多的^M字符,删除之!保存,再次格式化,创建log目录都permission denied!这就是我上面所说过的问题,/home/cdh/hadoop-0.19.0/目录的所有者是root,如果按照我上面所讲的,改成了cdh所有,那么就没这个问题了。再次执行格式化,格式化成功!
启动hadoop,是用命令:bin/start-all.sh,又报错,告诉我无法连接上slave,而且告诉我ubuntu2,Deprecated,我百思不得其解,翻看了几个关于hadoop的文章,都没有讲,仔细阅读了hadoop-default.xml文件才知道,
<property>
<name>fs.default.name</name>
<value>ubuntu1:9000</value>
<description>/description>
</property>
中,ubuntu1前面一定要加上hdfs://,即:
<property>
<name>fs.default.name</name>
<value>hdfs://ubuntu1:9000/</value>
<description>/description>
</property>
于是乎我的完整的配置如下:
启动hadoop命令:bin/start-all.sh,启动成功!ubuntu1上namenode,secondary namenode,jobtracker进程,ubuntu2上datanode, tasktracker进程。