Written by Hao C., Hadoop Special Interest Group.
环境:Virtual Box 4.1.8 + Ubuntu 11.10 Server i386 + Hadoop 1.0.0
虚拟机参数:
内存:128M
虚拟硬盘格式:vdi
网络:Bridged Adapter
关于Ubuntu
1、语言最好选择English,否则会出现乱码,到头来还是要把界面暂时改回英文。
对于还是执意安装中文(简体)的童鞋们,可以在安装完Ubuntu后,用下面的方法解决乱码问题:
hao@HadoopMaster:~$ sudo vim /etc/default/locale
/*
*将
*zh_CN.UTF-8
*zh_CN:zh
*分别修改为:
*en_US.UTF-8
*en_US:en
*好像还有第三种形式,依葫芦画瓢地改就行了
*/
hao@HadoopMaster:~$ sudo locale-gen
hao@HadoopMaster:~$ sudo reboot
2、出现【软件选择】界面时,务必安装【OpenSSH server】(注意空格键才是选择,回车是继续)。
3、如果童鞋们的网络也是几百块钱一个学期,却只能上上QQ、玩玩三国杀、浏览浏览八卦新闻,却死活浏览不了“叫欲网”之外那些很好的学习资源,那你想在Ubuntu上install什么东西,update一下,额……简直是做梦。至少我想安装VirtualBox的增强功能都是奢侈至极,这份河蟹真是让我的心中一片温暖……咳,扯多了,继续~
所以必须更新Ubuntu的源,可以参考这里,我选择了中国科技大学的源(update过程在更新http://security.ubuntu.com oneiric-security时卡了很久,后面也出现了一些Err和Fail,不过似乎没什么影响)。
4、Ubuntu安装完成后安装增强功能(为了能够在虚拟机和主机之间共享文件),如下图所示单击【设备】菜单下【安装增强功能】,然后执行下面的命令。
hao@HadoopMaster:~$ sudo mount /dev/cdrom /media/cdrom/
hao@HadoopMaster:~$ sudo /media/cdrom/VBoxLinuxAdditions.run
//安装过程中显示make和gcc没装,导致安装失败,sudo apt-get install两者后在执行上述命令
//最后一项Installing the Window System drivers …fail! 可以直接无视,好像跟图形界面有关
5、设置虚拟机和主机之间的共享目录。
如下图的【设备】菜单下面有个【分配数据空间】,点击后出现下图。【数据空间位置】对应着主机下的共享目录,同时勾选【Automount】和【固定分配】,确定后重启Ubuntu,此时虚拟机对应的共享目录为/media/sf_vbshare。不过由于这个目录权限的限制,连敲个ls也要sudo一下,所以就稍微修改一下它的权限吧(不是我不想改,是怎么也改不了……没有任何错误信息,就是权限动都不动一下)。还是把当前用户加进vboxsf这个组里吧,额,又得重启才生效(exit一下应该也可以,不过我没试)。
hao@HadoopMaster:~$ sudo usermod –a –G vboxsf $USER
6、如果没有安装java就把装上吧,这个就不细说了,从网上应该可以搜到蛮多的,安装方法、环境变量的设置等等。所谓一招被蛇咬,十年怕草绳(开源的软件之间的依赖关系似乎非常严重,版本之间的差异有时也能整死一两个想拼命学习的孩纸),我先声明我用的是sun的jdk-6u22-linux-i586.bin~O(∩_∩)O~。
配置Hadoop前的准备
1、拷贝hadoop-1.0.0.tar.gz到主机的共享目录下(我这里是D:\vbshare),然后解压到虚拟机的/opt目录下。
hao@HadoopMaster:~$ cd /opt/
hao@HadoopMaster:/opt$ sudo tar zxvf /media/sf_vbshare/hadoop-1.0.0.tar.gz
2、修改/opt/hadoop-1.0.0的权限,hao这个账号(我当前的用户名)在实际中只用做管理比较好,其它新建账号则添加进hadoopers用户组,这样其它账户就只能修改文件,而不能添加或删除文件。然后将hao的当前有效组改为hadoopers,这样可以使新添加的文件都将属于hadoopers组。
hao@HadoopMaster:/opt$ sudo groupadd hadoopers
hao@HadoopMaster: /opt$ sudo chown -Rvf hao:hadoopers hadoop-1.0.0/
//如果只改变当前会话的有效组执行下面的命令
hao@HadoopMaster: /opt$ newgrp hadoopers
//如果希望登录后默认有效组就是hadoopers,修改/etc/passwd的第四个字段
hao@HadoopMaster: /opt$ cat /etc/group | grep hadoopers
hadoopers:x:1002:
//根据上面的输出结果可知hadoopers的组ID为1002,在/etc/passwd中找到以当前用户名开头的一行,如
//hao:x:1000:1000:Hao,,,:/home/hao:/bin/bash,将第四个字段修改为1002。然后执行exit重新登录。
3、如果阅读过hadoop的一些相关文章的话,应该会对hadoop的三种安装模式有所了解:单机模式、伪分布模式(通常用于开发和测试)和完全分布模式(部署阶段)。为了在不同的模式之间更加灵活的切换,可以采用软连接(相当于windows下的快捷方式)的方式实现。首先将默认的配置文件(core-site.xml、hdfs-site.xml和mapred-site.xml)替换conf目录下的对应文件(如果替换,那么在配置分布模式的时候,只需找到对应的项,修改其value值即可,这只是为了方便记住每个参数及其作用;当然也可以不用替换,那么只需将配置写入配置文件中即可,其它未写的参数自会取默认值),并修改conf/hadoop-env.sh,然后拷贝三份,分别对应hadoop的三种模式,最后再将原conf目录删除。
/opt$ cd hadoop-1.0.0/
/opt/hadoop-1.0.0$ vim conf/hadoop-env.sh
//找到export JAVA_HOME一行,去掉前面的井号,并根据实际安装位置修改等号后面的值。
/opt/hadoop-1.0.0$ cp src/core/core-default.xml conf/core-site.xml
/opt/hadoop-1.0.0$ cp src/hdfs/hdfs-default.xml conf/hdfs-site.xml
/opt/hadoop-1.0.0$ cp src/mapred/mapred-default.xml conf/mapred-site.xml
/opt/hadoop-1.0.0$ cp -r conf conf.standalone
/opt/hadoop-1.0.0$ cp -r conf conf.pseudo
/opt/hadoop-1.0.0$ cp -r conf conf.cluster
/opt/hadoop-1.0.0$ rm -rf conf
/opt/hadoop-1.0.0$ ln -s conf.standalone conf
单机模式不需要配置,执行下面的命令测试一下下载的hadoop包是否正常即可。
/opt/hadoop-1.0.0$ mkdir test_input
/opt/hadoop-1.0.0$ echo "hello world"> test_input/1.txt
/opt/hadoop-1.0.0$ echo "hello hadoop"> test_input/2.txt
$ bin/hadoop jar hadoop-examples-1.0.0.jar wordcount test_input test_output
输出一堆信息后,如果没有抛出异常,查看test_output目录中的结果
/opt/hadoop-1.0.0$ cat test_output/*
hadoop 1
hello 2
world 1
伪分布模式
1、修改软连接conf(直接使用ln命令只会在conf所指目录下建立一个新的软连接,而不是覆盖当前这个链接,不知道为什么,所以目前只能先删除再重建了)。
/opt/hadoop-1.0.0$ rm conf
/opt/hadoop-1.0.0$ ln -s conf.pseudo conf
2、修改配置文件core-site.xml
/opt/hadoop-1.0.0$ vim conf/core-site.xml
/*需要手动创建hadoopers文件夹,同样最好设置为hao:hadoopers*/
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoopers/pseudo-tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9110</value>
</property>
3、修改配置文件hdfs-site.xml
/opt/hadoop-1.0.0$ vim conf/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
4、修改配置文件mapred.site.xml
/opt/hadoop-1.0.0$ vim conf/mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>localhost:9120</value>
</property>
<property>
<name>mapred.child.tmp</name>
<value>/home/hadoopers/tmp</value>
</property>
5、配置ssh无密码登陆,格式化分布式文件系统(HDFS),并启动hadoop
/opt/hadoop-1.0.0$ ssh-keygen –t rsa
//一路回车即可
/opt/hadoop-1.0.0$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
/opt/hadoop-1.0.0$ bin/hadoop namenode -format
/opt/hadoop-1.0.0$ bin/start-all.sh
6、将本地文件夹拷贝到HDFS
/opt/hadoop-1.0.0$ bin/hadoop dfs -put test_input test_in
7、测试伪分布模式是否正常(由于所有hadoop的五个进程在同一台机子上运行,所以需要把虚拟机的内存暂时分配的大一些,我分配了256M,有还是有任务在第一次执行时由于内存不够失败了,不过最后还是执行成功了,这也算体验了一把hadoop的容错呢~)。
$ bin/hadoop jar hadoop-examples-1.0.0.jar wordcount test_in test_out
/opt/hadoop-1.0.0$ bin/hadoop dfs -cat test_out/*
hadoop 1
hello 2
world 1
/opt/hadoop-1.0.0$ bin/stop-all.sh
完全分布模式
1、下面用到的主机名HadoopMaster、HadoopSlave1、HadoopSlave2、HadoopSlave3分别为四台虚拟机的主机名,后面会创建剩下的三台虚拟机。为了能够解析主机名为ip地址,在/etc/hosts文件中添加下面几行。(一定要删除127.0.1.1这一行,否则DN打死了也连不到NN,足够把你给活活气死)。
192.168.1.220UbuntuMaster
192.168.1.221HadoopSlave1
192.168.1.222HadoopSlave2
192.168.1.223HadoopSlave3
2、将HadoopMaster的ip地址改成静态ip。
/opt/hadoop-1.0.0$ sudo vim /etc/network/interfaces
//从iface eth0 inet dhcp一行开始修改为
iface eth0 inet static
address 192.168.1.220
gateway 192.168.1.1
netmask 255.255.255.0
/opt/hadoop-1.0.0$ sudo /etc/init.d/networking restart
3、修改软连接conf
/opt/hadoop-1.0.0$ rm conf
/opt/hadoop-1.0.0$ ln -s conf.cluster conf
4、修改core-site.xml
/opt/hadoop-1.0.0$ vim conf/core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoopers/cluster-tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://HadoopMaster:8888</value>
</property>
5、修改hdfs-site.xml
/opt/hadoop-1.0.0$ vim conf/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
6、修改mapred-site.xml
/opt/hadoop-1.0.0$ vim conf/mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>HadoopMaster:9999</value>
</property>
/usr/hadoop-1.0.0$ vim conf/masters
//修改为
HadoopMaster
8、修改slaves文件
/usr/hadoop-1.0.0$ vim conf/slaves
//修改为
HadoopSlave1
HadoopSlave2
HadoopSlave3
9、关掉虚拟机,准备克隆其它三台,可以采用VirtualBox自带的clone功能,也可以自己ctrl+c然后ctrl+v,我试下了结果其实都一样,需要重新配置的内容也差不多。我宁愿自己动手,至少可以把所有虚拟硬盘放在我想放的地方(各有所好啦)。如果是clone的,那么下面这一小段就可以直接跳过啦。
=============================================================================
新建虚拟机没什么可说的,就是选择虚拟硬盘时,选择【使用现有的虚拟硬盘】,并选择新拷贝的虚拟硬盘。但是选择后会出现一个错误,这是因为虚拟硬盘的id重复了。解决方法参见这里第一条。
=============================================================================
10、参照这里第二、三条,根据上面给出的映射关系修改主机名和ip。
确保四台虚拟机互相可以ping通,网络均设为Bridge Adapter。重新生成三台Slave的密钥对(执行ssh-keygen覆盖),并配置ssh无密码登陆。
//在HadoopMaster上执行命令
/opt/hadoop-1.0.0$ scp ~/.ssh/authorized_keys hao@HadoopSlave1:~/.ssh
/opt/hadoop-1.0.0$ scp ~/.ssh/authorized_keys hao@HadoopSlave2:~/.ssh
/opt/hadoop-1.0.0$ scp ~/.ssh/authorized_keys hao@HadoopSlave3:~/.ssh
11、格式化分布式文件系统(HDFS),启动hadoop以及将本地文件夹拷贝到HDFS上并测试集群是否正常,这些操作和伪分布模式的测试方法完全相同,不再赘述。
至此,hadoop就彻底安装好了,可以好好休息一下,看看电影、玩玩游戏神马的了~~