博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Hadoop安装完全攻略

Posted on 2012-03-06 03:05  Hadoop-scutmstcSIG  阅读(582)  评论(0编辑  收藏  举报

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>
      7、修改masters文件
/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就彻底安装好了,可以好好休息一下,看看电影、玩玩游戏神马的了~~