virtualbox 虛擬3台虛擬機搭建hadoop集群


 用了這么久的hadoop,只會使用streaming接口跑任務,各種調優還不熟練,自定義inputformat , outputformat, partitioner 還不會寫,於是干脆從頭開始,自己搭一個玩玩,也熟悉一下整體架構。

整體環境:

主機Win7 i5 4核 8G內存 筆記本;

虛擬機(客戶機)采用Centos5.9 ( 用這個的原因是不想用圖形界面,並且以后還想試着裝一下ICE)


3台互聯的虛擬機搭建Hadoop集群:

    1. 選用virtualbox V4.2.18 + Centos 5.9 

        virtualbox V4.2.18 下載地址:http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/VirtualBox-4.2.18-88781-Win.exe

        Centos 5.9 下載地址(共9個iso文件):http://mirror.bit.edu.cn/centos/5.9/isos/x86_64/

    2. 安裝virtualbox 和 Centos5.9

    3. hadoop集群用3台機器,拓撲如下:

         master:  ip:192.168.56.120

                            機器名:  master

                            啟動NameNode

                            啟動JobTracker

         slave1:   ip: 192.168.56.121

                            機器名:slave1

                            啟動SecondaryNameNode

                            啟動DataNode

                            啟動TaskTracker

 

 

         slave2:   ip: 192.168.56.122

                            機器名:slave2

                            啟動DataNode

                            啟動TaskTracker


    4. 配置Centos5.9 

        要求: 在任何環境下主機和客戶機都要能夠聯通,正常工作。包括:筆記本插網線;筆記本不插網線;筆記本聯通無線網絡;筆記本完全沒有網絡等情況。

        最復雜的情況是筆記本既沒有有線網也沒有無線網絡且沒有插網線的情況,這種情況下必須采用host-only的方式。具體原因不細說,因為我也不清楚這四種網絡設置的區別到底有哪些 -_-!!!

        配置方式參考:http://www.douban.com/group/topic/15558388/    也可以google搜索  "virtualbox host-only unplug cable" 

       還是要說一下我對host-only 方式配置的理解:virtualbox安裝好之后在windows的”網絡和共享中心“ (XP系統叫做網上鄰居)中會出現一個新的虛擬網卡"VirtualBox Host-Only Network"。當虛擬機配置為host-only方式的時候,主機和虛擬機通過這個虛擬網卡進行通訊,因此無論主機的外部網絡如何,都能和虛擬機聯通。因此需要將虛擬機的ip設置到此虛擬網卡的網段內。

       我的配置:

             VirtualBox Host-Only Network  ipv4設置: ip地址: 192.168.56.1

                                                                                        子網掩碼:255.255.255.0

             centos ip設置:    參考:http://os.51cto.com/art/201001/177909.htm

                                             執行:【vi /etc/sysconfig/network】

 

NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=master
GATEWAY=192.168.56.1

 

                                            執行:【vi /etc/sysconfig/network-scripts/ifcfg-eth0】

 

DEVICE=eth0
BOOTPROTO=static
NM_CONTROLLED=yes
TYPE=Ethernet
IPADDR=192.168.56.120
HWADDR=08:00:27:XX:XX:XX
NETMASK=255.255.255.0
NETWORK=192.168.56.0
ONBOOT=yes

 

                                            執行:【vi /etc/resolv.conf】添加dns     

 

nameserver 192.168.56.1


                                            執行:【vi  /etc/hosts】  設置本機名和靜態域名解析

 

 

127.0.0.1       master localhost
::1             master6 localhost6
#hadoop
192.168.56.120 master
192.168.56.121 slave1
192.168.56.122 slave2

 

                                            執行:【vi /etc/hostname】  設置本機名

 

master

            設置完成后運行:【service network restart】  重啟網絡服務以使設置生效。       

            測試設置是否成功: a) 從主機ping虛擬機 和 從虛擬機ping主機都要通。如果不通則需要關閉主機和虛擬機的防火牆。

                                               b) 如果還不通則檢查virtualbox設置,如下圖紅圈的地方需要特別注意。



注意: 上面對機器的ip和機器名設置非常重要,因為hadoop的master與slave的連接是通過機器名來做的

      5. 安裝ssh服務(比較簡單,google)

          安裝完成后執行:【ps -ef | grep ssh】 
          看到有一個進程名為 sshd 的則安裝成功。
          測試ssh, 執行:【ssh localhost】需要輸入密碼  

      6. 為虛擬機添加hadoop賬戶

          以root賬戶登陸:執行 【useradd  hadoop】
                                                  【passwd   hadoop】
          測試賬戶,執行:【su   -   hadoop】

      7. 安裝jdk1.6 (據說1.7有些問題) 

             (此步如果centos自帶了1.6的jdk的話,可以省略,但是要找到java的安裝路徑,因為后面配置環境變量要用)

               下載jdk1.6  :  http://download.oracle.com/otn-pub/java/jdk/6u35-b10/jdk-6u35-linux-x64-rpm.bin?AuthParam=1381058664_954e59f9391e5a0cf7ae446c5e0c7813
               得到文件: jdk-6u35-linux-x64-rpm.bin
               以 root賬戶登錄
               執行:【mkdir /usr/java】  (當然也可以是其他目錄,此目錄將作為java的安裝目錄,即為JAVA_HOME)
               執行:【cd  /usr/java】        
       執行:【rz -be】  #選擇jdk文件上傳到    /usr/java   目錄下
               執行:【./jdk-6u35-linux-x64-rpm.bin】   
               此時雖然安裝完成了jdk,但是如果centos自帶的java沒有被卸載掉的話,使用java -version 還是會檢測到老版本java, 因為還沒有配置環境變量。
 

      8. 安裝hadoop

          下載hadoop安裝包:http://mirrors.ustc.edu.cn/apache/hadoop/common/stable/hadoop-1.2.1-bin.tar.gz 
           得到文件:hadoop-1.2.1-bin.tar.gz
           執行: 【su - hadoop】
           執行:【cd   】           #切換到hadoop賬戶的根目錄
           執行:【tar -zxvf  hadoop-1.2.1-bin.tar.gz】     # 解壓,解壓后會出現 hadoop-1.2.1 目錄

      9. 配置hadoop

          執行:【cd  hadoop-1.2.1/conf】
          執行:【vi  hadoop-env.sh】
                      找到JAVA_HOME那一行,取消注釋並配置為:export JAVA_HOME=/usr/java/jdk1.6.0_35
           執行:【mkdir /home/hadoop/hadoop_tmp】 為下一步做准備
           執行:【vi core-site.xml】   配置NameNode節點運行在master上的9000端口和hadoop臨時目錄
                    
<configuration>
	<property>
		<name>fs.default.name</name>
		<value>hdfs://master:9000</value>
	</property>
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop/hadoop_tmp/</value>
	</property>
</configuration>
           執行:【vi mapred-site.xml】 配置 JobTracker運行在master上的9001端口
<configuration>
        <property>
                <name>mapred.job.tracker</name>
                <value>master:9001</value>
        </property>

</configuration>
           執行:【vi hdfs-site.xml】 配置hdfs 備份數量(不能超過機器數)
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>

</configuration>
           執行:【vi  masters】 配置SecondaryNameNode;指定SecondaryNameNode運行在slave1上。
slave1
           執行:【vi  slaves】  配置DataNode 和   TaskTracker
slave1
slave2

      10. 配置環境變量 

           設置環境變量HADOOP_HOME,並將 $HADOOP_HOME/bin加入PATH
           執行:【cd  】 #切換到hadoop賬戶的根目錄
           執行:【vi .bashrc】設置環境變量
       
#配置java相關的環境變量
export JAVA_HOME=/usr/java/jdk1.6.0_35
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
#配置hadoop相關環境變量
export HADOOP_HOME=/home/hadoop/hadoop-1.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/hadoop-core-1.2.1.jar 
        

      11. 克隆兩台虛擬機(使用鏈接復制即可)並設置主機名和ip

          ( 放在這里進行克隆是因為hadoop集群中的所有機器的java 和 hadoop的安裝路徑必須都一樣)
            以root 身份分別登陸到克隆得到的2台虛擬機上。
            

            執行:【vi /etc/sysconfig/network】

            修改:HOSTNAME=slave1   和  HOSTNAME=slave2)

      /etc/sysconfig/network-scripts/ifcfg-eth0     (修改:IPADDR=192.168.56.121  和 IPADDR=192.168.56.122)
      /etc/hosts    (對slave1修改:127.0.0.1       master localhost    --> 127.0.0.1       slave1 localhost
                                     ::1             master6 localhost6  --> ::1             slave16 localhost6 ) 
                     (對slave2修改:127.0.0.1       master localhost    --> 127.0.0.1       slave2 localhost
                                     ::1             master6 localhost6  --> ::1             slave26 localhost6 ) 
       /etc/hostname  (修改: master  -->  slave1  和 slave2 )

      12. 配置master  ssh無密碼登陸到所有機器(包括本機)

          在master上用hadoop賬戶登錄。
          執行:【ssh -keygen -t rsa】 會在.ssh目錄下生成  id_rsa  id_rsa.pub  known_hosts  三個文件。
          執行:【cd  .ssh】
          執行:【cp  id_rsa.pub  authorized_keys】
          測試是否可以無密碼登錄:
          執行:【ssh  hadoop@master】 第一次運行時會有一個選擇,填yes, 如果不需要輸入密碼則成功。
          執行:【scp  authorized_keys  hadoop@slave1:~/.ssh】
          執行:【scp  authorized_keys  hadoop@slave2:~/.ssh】
          測試是否可以從master無密碼登錄到slave1 和 slave2上:
          執行:【ssh hadoop@slave1】 若有個選項則填yes, 如果不需要輸入密碼則表示成功。

     

      13. 測試

          OK, 到此為止所有配置都已完成,來測試一下是否可以啟動hadoop集群。
          以hadoop登錄到master
          執行:【hadoop  namenode  -format】 # 此步只需執行一次即可,不需要每次啟動都執行
          執行:【start-all.sh】
          執行:【jps】 查看java進程得到結果:
8192 Jps
6438 NameNode
6614 JobTracker

          執行:【ssh  hadoop@slave1】
          執行:【jps】
4606 DataNode
4692 SecondaryNameNode
5980 Jps
4784 TaskTracker
 
         
          執行:【ssh  hadoop@slave1】
          執行:【jps】
4283 TaskTracker
5437 Jps
4190 DataNode
          執行:【hadoop fs -ls /】
drwxr-xr-x   - hadoop supergroup          0 2013-10-07 22:14 /home

Oh my god!  終於完成了!!!




 
        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM