VirtualBox环境下基于多台ubuntu虚拟机的Hadoop分布式计算环境搭建

 

VirtualBox环境下基于多台ubuntu虚拟机的Hadoop分布式计算环境搭建(http://blog.csdn.net/beginner_lee/article/details/6429146)


VirtualBox环境下基于多台ubuntu虚拟机的Hadoop分布式计算环境搭建

 

作者:李磊 beginner_Lee

完成时间:2011-5-23 12:15

版本:v2.0

摘要:本文介绍了在VirtualBox下安装3ubuntu虚拟机,并搭建Hadoop环境的基本步骤,最后运行了Hadoop自带example中的wordcount例程,可以作为初学者的入门教材。

备注:原创作品,首发blog.csdn.net/beginner_Lee,如有转载敬请注明。

环境:

主机:ubuntu11.04

VirtualBox版本:4.0.6 r71344

ubuntu虚拟机版本:ubuntu11.04

ubuntu虚拟机jdk版本:jdk-1.6.0_25

ubuntu虚拟机hadoop版本:hadoop-0.20.2

 

关键词:Hadoopwordcountssh

 

  • 总体概述
    要在单独的一台计算机上实现Hadoop多节点分布式计算,需要通过虚拟机建立多个主机,鉴于VirtualBox的大小只是VMware的十分之一,我选择了前者。依次完成新建虚拟机、安装ssh、配置密钥实现无密码访问、安装jdk、安装hadoop并配置后,就可以运行wordcount来见识一下了不起的东西了!

  • 详细步骤

  1. 安装虚拟机
    首先要在vbox中建立ubuntu系统,无论主机的操作系统是windows还是linux都没关系,我们之后进行的所有操作都只在虚拟机的ubuntu中进行。由于是在虚拟机中安装,就没有硬盘安装ubuntu那样麻烦了。上官网把ubuntu10.04LTS.iso下好,放在本地文件夹中,启动vbox,新建一个子os,选项都很简单,网卡设置为host-only,从之前下载的iso镜像启动。启动后的安装步骤在这里不再赘述,如有疑问请参照我之前的一篇文章。当第一个虚拟机建好后,不要使用同样的方法建立第二个ubuntu系统,vbox为我们提供了简便的复制方法,在Terminal中输入
    sudo vboxmanage clonevdi [source.vdi] [destination.vdi];
    就可以完全克隆一个os,之后new一个os,在选择硬盘那里找到刚clonedestination.vdi作为硬盘即可。我们用这种方法建立3台虚拟机,分别命名为UB01UB02UB03,它们的用户名必须一致,这里设置为vbox,为了简单,密码也统一设定为vbox。进行到这里,可以用ifconfig看三台虚拟机的ip地址,正常的话它们的ip各不相同,且相互之间可以ping通,到这里就完成了第一步。

  2. 安装配置ssh
    仅仅能ping通还是不够的,为了完成分布式计算系统,需要三台机器相互之间可以无密码访问(或者是master可以无密码访问2slave)。首先在三台虚拟机上安装ssh-openserver
    sudo apt-get install ssh rsync
    完成后,在个人目录/home/vbox/下新建.ssh文件夹,在.ssh中执行
    ssh-keygen -t rsa
    系统会问你一些配置,由于是初次实验,不需要这些内容,点回车继续下去即可。完成后会在.ssh/下生成id_rsaid_isa.pub两个文件,三台机器做同样处理。忘了一件事,需要配置三台机器的别名,这样就不用通过ip互访了,打开/etc/hosts,清空里面的内容,写入
    127.0.0.1 localhost localhost.localdomain localhost
    192.168.56.101 UB01 UB01.localdomain UB01
    192.168.56.102 UB02
    192.168.56.103 UB03
    对于UB01按如上书写,对于UB02如下,UB03则可一并推出(这里的每一个ip地址都应该是ifconfig后看到的,因机而异)
    127.0.0.1 localhost localhost.localdomain localhost
    192.168.56.101 UB01
    192.168.56.102 UB02 UB02.localdomain UB02
    192.168.56.103 UB03
    设置完别名,可以相互ping一下看看是否生效,这里ping的对象就不是ip地址而是别名了。接下来把它们的密钥相互交换,如在UB01中执行
    scp ~/.ssh/id_isa.pub 
    vbox@UB02:/home/vbox/.ssh/id_isa.pub.UB01
    scp ~/.ssh/id_isa.pub 
    vbox@UB03:/home/vbox/.ssh/id_isa.pub.UB01
    这样做的目的是把UB01的密钥交给UB02UB03,对UB02UB03做同样处理,完成后每一个机器的/.ssh/中应该有3个密钥,一个是自己的,另两个是别人的,把自己的密钥连同别人的两个密钥加到授权密钥中(对UB01
    cat id_isa.pub >> authorized_keys;
    cat id_isa.pub.UB02 >> authorized_keys;
    cat id_isa.pub.UB03 >> authorized_keys;
    对其它两台机器做同样处理。接下来检验相互之间是否可以通过ssh实现无密码访问,在终端输入(对UB01
    ssh UB02;
    ssh UB03;
    访问成功会现实欢迎信息,初次访问需要yes,之后就可以不直接访问了。

  3. 安装jdk
    ubuntu系统中安装jdk的方法我只简述一下,有困难者请google之,网络上资源多多。首先下载对应版本的jdk,下载完成后把.bin包移动到个人目录/home/vbox/,执行
    chmod u+x jdk-a.b.c.bin;
    sudo -s ./jdk-a.b.c.bin;
    等待安装完成,会在当前路径生成jdk目录,接下来设置环境变量,在/etc/profile/中添加JAVA_HOMEJRE_HOMECLASSPATHPATH的值,reboot后在Terminal输入java -version会看到版本信息,证明安装成功。
    为了备忘,环境变量的配置还是写在下边吧
    JAVA_HOME=/home/vbox/jdk1.6.0_25
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    expoet PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

  4. 安装hadoop
    将下载到的hadoop-0.20.2.tar.gz移动到个人目录/home/vbox/,执行安装操作
    tar -xzvf hadoop-0.20.2.tar.gz
    会在当前路径生成hadoop文件夹,接着修改文件夹所有者
    chown vbox:vbox hadoop-0.20.2
    随后把hadoop的环境变量加入到/etc/profile中,添加如下内容
    export HADOOP_HOME=/home/vbox/hadoop-0.20.2
    export PATH=$HADOOP_HOME/bin:$PATH
    接下来需要修改hadoop/conf/目录下的配置文件,共有6个文件需要修改,分别是mastersslavescore-site.xmlmapred-site.xmlhdfs-site.xmlhadoop-env.sh,修改如下
    文件masters
    UB01
    文件slaves
    UB02
    UB03
    文件core-site.xml


    hadoop.tmp.dir
    /home/vbox/tmp
    As you like




    fs.default.name
    hdfs://UB01:9000


    文件mapred-site.xml


    mapred.job.tracker
    UB01:9001


    文件hdfs-site.xml


    dfs.replication
    1


    文件hadoop-env.sh在末尾添加
    export JAVA_HOME=/home/vbox/jdk1.6.0_25
    说明几个地方,以上几个文件中具体的版本号、路径与ip地址要根据各自虚拟机信息区别配置,不要把我的ip抄到你的文件里,没用的。注意hdfs-site.xml中设定为1value是最小节点数,之前为3,会出现2slave运行不能的情况,以上配置信息对UB01UB02UB03完全一致。

  5. 执行wordcount例程
    进入/home/vbox/hadoop/目录,格式化文件系统并启动所有服务
    hadoop namenode -format;
    start-all.sh
    编写输入文件,建立input输入并将文件写入input
    echo “It is such a boring thing” > input_test_01;
    echo “But I like it” > input_test_02;
    hadoop fs -mkdir input;
    hadoop fs 
    copyFormatLocal input_test_0* input;
    执行wordcount并察看计数结果
    hadoop jar hadoop-0.20.2-examples.jar wordcount input output;
    hadoop fs -cat output/part-r-00000;
    会在Terminal中看到如下wordcount信息
    5 1
    Damn! 1
    NAT 1
    ...
    注意,在第一次执行wordcount后,inputoutput文件依旧存在,若再次执行wordcount会出现无法响应的错误,需要通过以下的命令删除inputoutput,系统才会正常工作。使用xxxxxx命令关闭防火墙。
    hadoop dfs -rmr input output

  6. 观察运行结果,有三种方式
    通过web方式 http://UB01:50070
    通过java方式Terminal输入jps
    监测HDFS方式 Terminal输入hadoop dfsadmin -report

  • 过程截图

  • 常用hadoop命令
    hadoop namenode -format
    格式化节点
    start-all.sh
    开启所有服务
    hadoop dfsadmin -report
    察看报告
    hadoop fs -mkdire input
    新建输入目录
    hadoop fs -ls/
    列出文件系统
    hadoopfs -put conf input
    conf目录putinput目录
    hadoop fs -rmr output
    删除output目录
    hadoop jar hadoop-0.20.2-examples.jar wordcount input output
    运行wordcount
    hadoop fs -get ouput /home/output
    拷贝到本地
    home/cat otuput/*
    显示
    hadoop fs -copyToLocal input /home/vbox
    拷贝,同fs -get

  • Some tips

Qdatanode个数为0或者小于预设值

A:删除各个/home/vbox/tmp文件夹

Q:将各个节点的id_rsa.pub相互追加后无法实现ssh无密码互访

A:先搞二个互访,再一个一个加上去

Q3ubuntu11.04的虚拟机慢死了
A
:换成
10.04


主要是自己想小结如下,所以在仅收藏时又手痒转载:

用Vbox下Ubuntu虚拟操作系统下搭建Hadoop集群步骤由上为:

1、下载并安装虚拟机VirtualBox

2、安装Ubuntu相应版本,由上及个人体会,觉得:如果自己主机配置低且担心客户机运行很慢时,那就装Ubuntu较低版吧,甚至服务器版(少了对图形界面的支持需要,就少了一些累赘,运行更快)

3、安装SSH,尤其是ssh-openserever

4、安装JDK,因为Hadoop是Google的MapReduce的Java实现,自然需要JDK才能运行喽!安装JDK之后,配置好JAVA_HOME、JRE_HOME、CLASSPATH、PATH等,注意Linux下,各路径是由冒号隔开的(而不是像Windows下由分号隔开),同时,在修改PATH环境变量时,千万不要漏掉"$"符号,变成export PATH=……:PATH,这样的话,会造成Ubuntu关机后再开机就开不了了

5、下载Hadoop相应版本并解压到正确的路径下,修改相应配置并正确配置后即可。

6、说实话:在这个过程中,完全按照作者的来碰到了很多问题——真是让自己吐血,在这里我将这些问题及其解决方法在这里分享出来,我觉得更有意义:

           如果在某个节点(这里我说法错了,因为本应该就只是在master结点处,更确切地说法应该是namenode处执行即可,为什么?因为初始化实质是通过创建存储目录和命名节点的初始版本来创建一个命名空间,而命名空间是由namenode来管理,而datanode却是动态地加入加出的,详见《Hadoop:The definitive Guide》的附录A——page569)处执行hadoop namenode -format,出现"unkonow hosts ..."问题时,即格式化并没有成功,那么,我们先别忙着马上就去Google\百度,先看看${HADOOP_HOME}/logs中的log,一般会提示错误在namespace ID incomptible...,这个表明相应的结点与namenode的结点不一致,这里有两种解决办法,其一,是直接清空hadoop.tmp.dir所指的地方的目录,当然,这只能适用于当初步建立起集群时的情况,另一种情况是改变VERSION中的相应namespaceID,使各结点保持一致。http://blog.csdn.net/wh62592855/article/details/5752199

          由于我的客户机系统用的是Ubuntu 10.04,而Hadoop-0.22.0,版本与Hadoop-0.20.0不同,在执行Hadoop示例程序时,开始我也是按照作者的命令start-all.sh后,紧接着就开始hadoop jar hadoop-mapred-examples-0.22.0.jar wordcount input output,结果出现call to master ....connection to master,refused connection,开始也经过Google、百度搜索相应问题,找不到解决办法,然后试着按照相应的解决办法,执行start-mapred.sh后,再执行hadoop jar hadoop-mapred-examples-0.22.0.jar wordcount input output,结果正确了

          当然,也要注意文档中:

          127.0.0.1 localhost localhost.domain localhost

          192.168.123.101 UB01 UBO1.localdomain UB01

          192.168.123.102  UB02

          192.168.123.103  UB03

         这里,相应的第一行应为localhost.domain应直接为domain,另外,别忘了第二行或其它相应结点中相应行不要落下任何内容,否则,会同样出现同样的"call to master ....connection to master,refused connection"问题

(注意:我这里将顺序与作者博客写的顺序作了调整,原因在于:将上述步骤完成一个Ubuntu客户机的配置后——当然,涉及到多台客户机的配置先放置之不理,再将这个客户机克隆,并完成涉及到多台客户机的配置,这样,比起作者博客中所写顺序,还要节约大量劳力)

你可能感兴趣的:(HDFS)