虚拟机VirtualBox 中 ubuntu13.04 安装Hadoop 集群

最近在捣鼓云计算的东西,在虚拟机中装完OpenStack又捣鼓Hadoop,搞了半天,写下以方便后人吧。

1. 安装环境:

宿主机:MacOS(这个没什么要紧,windows一样可以完成)

虚拟机软件:VirtualBox

操作系统: 全部都为ubuntu13.04

网络环境:

   主机名    IP
   cloud       192.168.3.1(内网,使用VirtualBOX inet)
                     192.168.1.201(外网,桥接无线网卡)
                       master机器(主要的控制机器)
    network   192.168.3.2 (内网,使用VirtualBOX inet)
                        192.168.1.200(外网,桥接无线网卡)
                         slave机器(1)
    compute   192.168.3.3(内网,使用VirtualBOX inet)
                        slave机器(2)

这样原因是之前OpenStack建立的环境,懒得弄了,就使用原有网络环境了。所有的ip均为静态ip。

2. 安装java环境

    之前看到别人写的都是sudo apt-get install sun-java6-....,事实上现在不好使了,因为sun被oracle收购了。

    因此,前往http://www.oracle.com/technetwork/java/javase/downloads/index.html, 将java的jdk环境下下来。

    可以在虚拟机内直接wget,也可以放到宿主机上再copy进去。Anyway, as you wish.

    下下来后,我的文件名为:jdk-7u25-linux-x64.tar.gz, 存储在/home/username/jdk-7u25-linux-x64.tar.gz

     接下来:

sudo mkdir /usr/lib/jvm
sudo cp /home/username/jdk-7u25-linux-x64.tar.gz /usr/lib/jvm/
sudo cd /usr/lib/jvm/
sudo tar zxvf jdk-7u25-linux-x64.tar.gz
      这时候,/usr/lib/jvm/下就有了jdk的相关java环境文件,文件夹名: jdk1.7.0_25

设置JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25
export JRM_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:$PATH
将以上语句,放到/etc/profile 文件的最后。

运行 java -version,出现以下,则环境安装好了。

java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

Note: ubuntu 的java环境,可能是openjdk,需要进行卸载。如果java -version出现错误,可以重启一下,即可。

2. 安装ssh

    为什么要安装ssh?

    事实上,Hadoop是一个集群运行环境,因此,需要多个机器同时运行来完成任务。这时候就需要有一台机器能够控制其他所有的机器。ssh成为了最好的工具。

    但平常ssh的连接,总是会提示需要密码之类,因此,我们在这里需要为master机器和slave机器来配置连接的秘钥,保证机器之间的ssh顺畅无需密码之类。

     2.1 建立公共帐户 hadoop以及其文件夹

sudo useradd hadoop
sudo mkdir /home/hadoop
sudo chown hadoop -R /home/hadoop
sudo chgrp hadoop -R /home/hadoop

     2.2 安装ssh

     这里由于我在安装ubuntu时候,已经选择了安装openSSH Server, 因此ssh已经安装好。

     没有的可以 sudo apt-get install ssh 来安装

      2.3 建立配对的钥匙

     这里我们使用hadoop用户,来创建钥匙

sudo su hadoop
cd ~
ssh-keygen  -t  rsa
      然后按照提示,一路回车,就会在/home/hadoop/.ssh/ 下声称密钥对:
id_rsa,id_rsa.pub

      然后master机器上:

cp /home/hadoop/.ssh/id_rsa.pub authorized_keys
    如果本机上已经存在authorized_keys文件,则将id_rsa.pub的内容添加到authorized_keys最后。

    接下来,将master机器上的authorized_keys, 复制到两台slave机器上:

前提:两台slave机器上,已经执行了2.1,2.2和2.3的以上步骤。

scp /home/hadoop/.ssh/authorized_keys 192.168.3.2:/home/hadoop/.ssh/authorized_keys
scp /home/hadoop/.ssh/authorized_keys 192.168.3.3:/home/hadoop/.ssh/authorized_keys
     测试一下连接:

ssh localhost
    第一次连接会出现:

The authenticity of host ‘cloud (192.168.3.1)’ can’t be established.
RSA key fingerprint is *****:******.
Are you sure you want to continue connecting (yes/no)?
     这是第一次连接,需要存储一下known_hosts, 输入yes,未来就不会再询问。

     同理可以测试一下2台slave机器的ssh连接:

ssh 192.168.3.2
ssh 192.168.3.3
    如果未要求输入密码,则ssh安装成功。

Note:

    测试ssh连接时,一定记得在hadoop用户下进行,即执行过sudu su hadoop来切换用户。


3. 安装Hadoop

    前往http://hadoop.apache.org/ 下载一个Hadoop版本。

    目前Hadoop的版本管理稍微显得有些混乱,建议如果会在生产环境下使用的话,使用Hadoop1.2.x版本来测试和搭建。

    我下载后的版本是:hadoop-1.2.0-bin.tar.gz

    以下在master 机器上操作:

    3.1 解压Hadoop

   Hadoop用户下操作:

cp /home/username/hadoop-1.2.0-bin.tar.gz /home/hadoop/
cd /home/hadoop/
tar zxvf hadoop-1.2.0-bin.tar.gz
mv hadoop-1.2.0 hadoop
    即:将解压后的hadoop文件夹命名为hadoop.

    3.2 增加Hadoop_HOME 环境变量

export HADOOP_HOME=/home/hadoop/hadoop
export PATH=${HADOOP_HOME}/bin:${JAVA_HOME}/bin:$PATH
将以上语句放到/etc/profile中。注意PATH行是修改。

    3.3 配置hosts环境

修改/etc/hosts, 增加:

192.168.3.1 cloud
192.168.3.2 network
192.168.3.3 compute
请在两台slave机器上同样增加hosts设置


4. 配置Hadoop

    现在可以开始配置Hadoop的几个配置文件了,所有的配置文件都在/home/hadoop/hadoop/conf 中

    4.1 core-site.xml







  
    fs.default.name
    hdfs://192.168.3.1:49000
  
  
    hadoop.tmp.dir
    /home/hadoop/hadoop/tmp
  



    4.2 mapred-site.xml







  
    mapred.job.tracker
    192.168.3.1:49001
  


    4.3 hdfs-site.xml







  
    dfs.replication
    2   
  
  
    dfs.name.dir
    /home/hadoop/name1,/home/hadoop/name2
    Nothing
  
  
    dfs.data.dir
    /home/hadoop/data1,/home/hadoop/data2
    Nothing At All
  

    4.4 hadoop-env.sh

该文件,主要是设置JAVA_HOME.

虽然在/etc/profile里已经设置过,但这里也需要有。

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25

    4.5 masters

    该文件,指定master机的ip或者主机名。

192.168.3.1

    4.6 slaves

    该文件,指定slaves机的ip或者主机名

192.168.3.2
192.168.3.3


    一行一个。

至此,就基本完成了Hadoop在master机器上的配置。

那么接下来,将所有的东西从master机器上放到slave机器上

scp -r /home/hadoop/hadoop 192.168.3.2:/home/hadoop
scp -r /home/hadoop/hadoop 192.168.3.3:/home/hadoop


这样,在slave机上就有相同配置了。


5. 启动Hadoop

    5.1 初始化namenode

cd /home/hadoop/hadoop
bin/hadoop namenode -formate

如果看到类似以下输出,则正确:

12/02/06 00:46:50 INFO namenode.NameNode:STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = ubuntu/127.0.1.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.20.203.0
STARTUP_MSG:   build =http://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-203-r 1099333; compiled by 'oom' on Wed May 4 07:57:50 PDT 2011
************************************************************/

12/02/0600:46:50 INFO namenode.FSNamesystem: fsOwner=root,root
12/02/06 00:46:50 INFO namenode.FSNamesystem:supergroup=supergroup
12/02/06 00:46:50 INFO namenode.FSNamesystem:isPermissionEnabled=true
12/02/06 00:46:50 INFO common.Storage: Imagefile of size 94 saved in 0 seconds.
12/02/06 00:46:50 INFO common.Storage: Storagedirectory /opt/hadoop/hadoopfs/name1 has been successfully formatted.
12/02/06 00:46:50 INFO common.Storage: Imagefile of size 94 saved in 0 seconds.
12/02/06 00:46:50 INFO common.Storage: Storagedirectory /opt/hadoop/hadoopfs/name2 has been successfully formatted.
12/02/06 00:46:50 INFO namenode.NameNode:SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode atv-jiwan-ubuntu-0/127.0.0.1
************************************************************/

    5.2 启动Hadoop

cd /home/hadoop/hadoop
bin/start-all.sh
如果看到以下信息,则正常启动:

starting namenode, logging to /home/hadoop/hadoop/libexec/../logs/hadoop-hadoop-namenode-cloud.out
192.168.3.3: starting datanode, logging to /home/hadoop/hadoop/libexec/../logs/hadoop-hadoop-datanode-compute.out
192.168.3.2: starting datanode, logging to /home/hadoop/hadoop/libexec/../logs/hadoop-hadoop-datanode-Network.out
192.168.3.1: starting secondarynamenode, logging to /home/hadoop/hadoop/libexec/../logs/hadoop-hadoop-secondarynamenode-cloud.out
starting jobtracker, logging to /home/hadoop/hadoop/libexec/../logs/hadoop-hadoop-jobtracker-cloud.out
192.168.3.2: starting tasktracker, logging to /home/hadoop/hadoop/libexec/../logs/hadoop-hadoop-tasktracker-Network.out
192.168.3.3: starting tasktracker, logging to /home/hadoop/hadoop/libexec/../logs/hadoop-hadoop-tasktracker-compute.out
如果有问题,可以在以上提供的.log文件中查找问题所在。

使用 java的jps命令,可以在master机器上看到:

16032 NameNode
16325 SecondaryNameNode
16415 JobTracker

说明守护进程已开启。在slave机上也可以看到tasknode和datatracker守护进程在运行。


好了,就这么愉快的结束了。





你可能感兴趣的:(虚拟机VirtualBox 中 ubuntu13.04 安装Hadoop 集群)