[hadoop]hadoop2.6完全分散式環境搭建

風痕影默發表於2015-01-28

在經過幾天的環境搭建,終於搭建成功,其中對於hadoop的具體設定倒是沒有碰到很多問題,反而在hadoop各節點之間的通訊遇到了問題,而且還反覆了很多遍,光虛擬機器就重新安裝了4、5次,但是當明白了問題之後才發現這都是無用功,有了問題應該找具體的解決方案,並不是完全的重灌,這樣不會明白問題是怎麼解決的,除了費時費力沒有多大的用處,接下來就把搭建的過程詳細敘述一下。

環境配置:
        計算機:
                CPU-I7 2630QM
                6G記憶體
                256G SSD
        虛擬機器:
                vmware workstation 11
        系統:
                ubuntu 14.04 LTS
        節點:
                192.168.1.150    master
                192.168.1.151    slave1
                192.168.1.151    slave2
參考:
  http:
//www.aboutyun.com/thread-7684-1-1.html
  http://my.oschina.net/u/2285247/blog/354449
  http://www.aboutyun.com/thread-5738-1-1.html
  http://www.aboutyun.com/thread-6446-1-1.html
安裝步驟:
1、安裝虛擬機器系統(安裝1個即可,其餘的可以通過克隆),並進行準備工作
2、安裝JDK,並配置環境變數 3、克隆虛擬機器系統,並修改hosts、hostname
4、配置虛擬機器網路,使虛擬機器系統之間以及和host主機之間可以通過相互ping通。
5、配置ssh,實現節點間的無密碼登入 
6、master配置hadoop,並將hadoop檔案傳輸到slave節點
7、配置環境變數,並啟動hadoop,檢查是否安裝成功

1、安裝虛擬機器系統,並進行準備工作

  安裝虛擬機器系統不用贅述,安裝vmware——新建虛擬機器——典型——選擇映象——設定賬戶密碼——安裝位置——配置——安裝。

  當虛擬機器安裝成功後,預設的是nat模式,不要立即將網路模式切換到橋接模式下,這時nat模式下應該可以聯網,先安裝幾個軟體,以後需要用到,當然在橋接模式下也可以聯網,但是橋接模式是要設定成靜態IP的,侷限性比較大,下載安裝完以後,接下來就不用聯網了。

#切換到root模式下
#剛開始root是預設不開啟的,可以利用如下命令對root密碼進行設定
sudo passwd root
#現在在root模式先安裝vim,命令如下:
apt-get install vim
#安裝ssh
apt-get install ssh
#這個步驟是可選的,用於更新,以及將ssh相關都安裝
apt-get install openssh*
apt-get update

2、安裝jdk,並配置環境變數

1)從oracle下載jdk安裝包,並將安裝包拖入到虛擬機器當中

2)通過cd命令進入到安裝包的當前目錄,利用如下命令進行解壓縮。

tar -zxvf jdk.....(安裝包名稱)

3)利用如下命令將解壓後的資料夾移到/usr目錄下 

#注意,這樣移動到/usr以後就沒有jdk1.8...這個目錄了,是將這個目錄下的所有檔案全部移動到/usr/java下,
mv jdk1.8...(資料夾名稱) /usr/java

4)配置環境變數

#切換到root模式下
su - root
#利用vim編輯/etc/profile(這個是對全體使用者都起作用的)
vim /etc/profile
#將一下兩句加入到其中,並儲存退出
export PATH=$PATH:/usr/java/bin:/usr/java/jre/bin
export CLASSPATH=.:/usr/java/lib:/usr/java/jre/lib
#然後使profile生效
source /etc/profile
#試驗java、javac、java -version

3、克隆虛擬機器並修改三個虛擬機器的hosts、hostname

1)克隆虛擬機器時要注意一定要選擇完整克隆

2)修改hosts(三個虛擬機器都要改)

#root下用vim開啟hosts
vim /etc/hosts
#將以下內容新增到hosts中
192.168.1.150    master
192.168.1.151    slave1
192.168.1.152    slave2

如圖:

3)修改hostname(三個虛擬機器都要改)

#root下開啟hostname
vim /etc/hostname
#分別將每個虛擬機器改成對應的name(master、slave1、slave2)

4、配置虛擬機器網路

  在安裝好虛擬機器後,虛擬機器有三種模式分別是nat模式、僅主機模式、橋接模式,此處對於此三種模式進行簡單介紹:

    nat模式:這是通nat地址轉換共享主機Ip的模式,在安裝好虛擬機器後會發現有vmnet8虛擬網路卡,這個網路卡預設是nat模式,這時nat模式下的虛擬機器相當於又組成一個區域網,而vmnet8相當於這個區域網的閘道器,在這種模式下,虛擬機器之間可以相互ping通,但是不能與主機通訊,因為主機與虛擬機器之間有有一個vmnet8網路卡。當然通過配置vmnet8網路卡可以實現通訊。

    僅主機模式:這種模式沒有地址轉換能力,各個虛擬機器之間是相互獨立的,不能相互訪問,每個虛擬機器只能與主機通訊。

    橋接模式:這種模式是將虛擬網路卡直接繫結到物理網路卡上,可以繫結多個地址,這裡是將網路卡設定成混雜模式,然後實現可以收發多個地址的訊息。

  本人搭建環境採用的是橋接模式,這種模式擬真性更強一些,雖然有些麻煩。

  注意:要將三個虛擬機器的ip與主機都處於同一個網段,然後實驗是否可以Ping通

5、配置ssh,實現節點間的無密碼登入 (注意關閉防火牆 ufw disable)

1)產生金鑰
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

2)匯入authorized_keys

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

3)試驗看是否安裝成功

#檢視是否有sshd程式
ps -e | grep ssh
#嘗試登入本地
ssh localhost

4)遠端無密碼登入

#進入master的.ssh目錄
scp authorized_keys u0@slave1:~/.ssh/authorized_keys_master
#u0是我的使用者名稱
#進入slave1、slave2的.ssh目錄
cat authorized_keys_master  >>  authorized_keys

注意:第四步要在slave上重複,要使三者都能夠無密碼相互登入,重複完後可以利用如下命令試驗,第一次需要輸入密碼繫結

ssh salve1(slave2)

注意:我的主機是連線的路由無線網路,我遇到了一個問題,就是在虛擬機器網路重連後master可以登入slave2,但是過一會後就發現老是connection refused,就因為這個問題我還重新安裝了幾次,網路上的方法都試了也不管用,後來發現,原來是我的虛擬機器ip與路由區域網中的其他機器Ip衝突,千萬要保證區域網內的Ip不要和虛擬機器的ip衝突

6、master配置hadoop,並將hadoop檔案傳輸到slave節點 

1)解包移動

#解壓hadoop包
tar -zxvf hadoop...
#將安裝包移到/usr目錄下
mv hadoop... /usr/hadoop

2)新建資料夾

#在/usr/hadoop目錄下新建如下目錄(root)
mkdir /dfs
mkdir /dfs/name
mkdir /dfs/data
mkdir /tmp

3)配置檔案:hadoop-env.sh(檔案都在/usr/hadoop/etc/hadoop中)

修改JAVA_HOME值(export JAVA_HOME=/usr/java)
4)配置檔案:yarn-env.sh

修改JAVA_HOME值(export JAVA_HOME=/usr/java

5)配置檔案:slaves

將內容修改為:

slave1
slave2

6)配置檔案:core-site.xml

<configuration>
       <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:8020</value>
       </property>
       <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>
       <property>
               <name>hadoop.tmp.dir</name>
               <value>file:/usr/hadoop/tmp</value>
               <description>Abase for other temporary   directories.</description>
       </property>
        <property>
               <name>hadoop.proxyuser.u0.hosts</name>
               <value>*</value>
       </property>
       <property>
               <name>hadoop.proxyuser.u0.groups</name>
               <value>*</value>
       </property>
</configuration>

7)配置檔案:hdfs-site.xml

<configuration>
       <property>
                <name>dfs.namenode.secondary.http-address</name>
               <value>master:9001</value>
       </property>
     <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/usr/hadoop/dfs/name</value>
       </property>
      <property>
              <name>dfs.datanode.data.dir</name>
              <value>file:/usr/hadoop/dfs/data</value>
       </property>
       <property>
               <name>dfs.replication</name>
               <value>3</value>
        </property>
        <property>
                 <name>dfs.webhdfs.enabled</name>
                  <value>true</value>
         </property>
</configuration>

8)配置檔案:mapred-site.xml

<configuration>
          <property>                                                                  
        <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration>

9)配置檔案:yarn-site.xml

<configuration>
        <property>
               <name>yarn.nodemanager.aux-services</name>
               <value>mapreduce_shuffle</value>
        </property>
        <property>                                                                
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
               <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
        <property>
               <name>yarn.resourcemanager.address</name>
               <value>master:8032</value>
       </property>
       <property>
               <name>yarn.resourcemanager.scheduler.address</name>
               <value>master:8030</value>
       </property>
       <property>
            <name>yarn.resourcemanager.resource-tracker.address</name>
             <value>master:8031</value>
      </property>
      <property>
              <name>yarn.resourcemanager.admin.address</name>
               <value>master:8033</value>
       </property>
       <property>
               <name>yarn.resourcemanager.webapp.address</name>
               <value>master:8088</value>
       </property>
</configuration>

10)將hadoop傳輸到slave1和slave2根目錄

 scp -r /usr/hadoop u0@slave1:~/
7、配置環境變數,並啟動hadoop,檢查是否安裝成功
1)配置環境變數
#root模式編輯/etc/profile
vim /etc/profile
#以上已經新增過java的環境變數,在後邊新增就可以
export PATH=$PATH:/usr/java/bin:/usr/java/jre/bin:/usr/hadoop/bin:/usr/hadoop/sbin

2)啟動hadoop

#注意最後單詞帶‘-’
hadoop namenode -format
start-all.sh

3)檢視啟動程式

相關文章