Hadoop2.6.4集羣環境搭建全記錄

折騰了兩天,總算把環境搭起來了,由於很多資料都是基於Hadoop1.0的,而目前的2.0以上的Hadoop架構發生變化,因此一些老舊的資料就已經不再適用,而我又實在是不喜歡看官方文檔,所以整理出這篇攻略給同樣不喜歡看英文文檔的你(如果你喜歡看還會百度中文的資料麼;-)

目標:組成一個由四臺電腦構成的簡單集羣,其中一臺爲master,餘下三臺爲slave。

環境:Ubuntu 14.04 LTS 64bit + JDK1.8.0u74 + Hadoop2.6.4


一、創建Hadoop集羣用戶組

1.分別在四臺主機上創建一個新用戶,名爲hadoop,所屬羣組爲hadoop,並設置新用戶密碼:

sudo adduser hadoop

2.檢查hadoop是否擁有sodu權限

sudo cat /etc/group|grep sudo

回車之後會顯示擁有sodu權限的用戶,類似於:

sudo:x:27:tangyeah,hadoop

3.如果hadoop用戶沒有列出,需手動將hadoop加入到sudo用戶組:

sudo /usr/sbin/usermod -G 27 hadoop

這樣新建的hadoop用戶就可以使用sudo命令臨時獲取root權限了。


二、修改主機名

四臺主機的規劃如下:

ip地址 主機名 用途
9.119.131.131 master NameNode
9.119.131.56 slave1 DataNode
9.119.133.213 slave2 DataNode
9.119.133.99 slave3 DataNode

使用如下命令查看本機ip地址:

hadoop@pc1:~$ ifconfig

1.分別更改4臺主機的主機名,此處僅以NameNode爲例:

sudo nano /etc/hostname

將其內容改爲master,保存並關閉。


2.分別配置四臺主機的hosts文件:

sudo nano /etc/hosts

將以下代碼加入到hosts中:

9.119.131.131 master
9.119.131.56 slave1
9.119.133.213 slave2
9.119.133.99 slave3

保存並關閉,注意一式四份,每臺都要配。


三、設置ssh免密碼驗證

1.安裝必要的組件

sudo apt-get install rsync
sudo apt-get install openssh-client
sudo apt-get install openssh-server

2.使用hadoop用戶登陸master,生成公鑰、私鑰對

hadoop@master:~$ sudo ssh-keygen -t rsa -p''

3.將id_rsa.pub加入到授權的key中

hadoop@master:~$ sudo cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

4.在本機上測試一下,自己連自己:

hadoop@master:~$ ssh master

第一次連接需要輸入yes確認,若仍需要輸入密碼則需要提高authorized_keys的權限:

hadoop@master:~$ sudo chmod 600 .ssh/authorized_keys

至此,第一臺機器就搞定了。


5.hadoop用戶分別登陸其餘slave機,分別如上生成密鑰對。


6.將3臺slave的id_rsa.pub複製到master上:

slave1:

hadoop@slave1:~$ scp /home/hadoop/.ssh/id_rsa.pub hadoop@master:/home/hadoop/.ssh/slave1

slave2:

hadoop@slave2:~$ scp /home/hadoop/.ssh/id_rsa.pub hadoop@master:/home/hadoop/.ssh/slave2

slave3:

hadoop@slave3:~$ scp /home/hadoop/.ssh/id_rsa.pub hadoop@master:/home/hadoop/.ssh/slave3

7.將三臺slave的密鑰加入到授權的key中

hadoop@master:~$ sudo cat ~/.ssh/slave1 >> ~/.ssh/authorized_keys
hadoop@master:~$ sudo cat ~/.ssh/slave2 >> ~/.ssh/authorized_keys
hadoop@master:~$ sudo cat ~/.ssh/slave3 >> ~/.ssh/authorized_keys

至此,三臺slave登入master就應該可以免密碼登入了。


8.將master的授權公鑰複製到所有的slave機器上

hadoop@master:~$ scp /home/hadoop/.ssh/authorized_keys hadoop@slave1:/home/hadoop/.ssh/authorized_keys
hadoop@master:~$ scp /home/hadoop/.ssh/authorized_keys hadoop@slave2:/home/hadoop/.ssh/authorized_keys
hadoop@master:~$ scp /home/hadoop/.ssh/authorized_keys hadoop@slave3:/home/hadoop/.ssh/authorized_keys

至此,master登入三臺slave也可以免密碼登入了,可以在任意一臺電腦上登陸任意其他電腦或自己測試一下。

hadoop@master:~$ ssh slave2
hadoop@slave2:~$ ssh slave2
hadoop@slave2:~$ ssh slave3
hadoop@slave3:~$ ssh master

四、下載安裝JDK和Hadoop鏡像

先在master上安裝配置好,然後複製到slave上。

1.JDK的下載和安裝
略,參考http://blog.csdn.net/jasonty/article/details/50936982


2.Hadoop2.6.4的下載和安裝
Hadoop2.6.4官方下載鏈接:http://hadoop.apache.org/releases.html
選擇2.6.4對應的binary點擊下載(source是未編譯的源代碼,需要另搭環境重新編譯),解壓縮並移至/usr文件夾下,重命名爲hadoop

hadoop@master:~$ tar -zxvf /home/tangyeah/Downloads/hadoop-2.6.4.tar.gz
hadoop@master:~$ sudo cp -r /home/tangyeah/hadoop-2.6.4 /usr
hadoop@master:~$ sudo mv /usr/hadoop-2.6.4 /usr/hadoop

3.更改環境變量

hadoop@master:~$ sudo nano /etc/profile

添加如下代碼:

export JAVA_HOME=/usr/java
export HADOOP_HOME=/usr/hadoop
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存關閉,並使之生效:

hadoop@master:~$ source /etc/profile

五、修改Hadoop配置文件

共有7個文件需要配置,列出清單如下:

/usr/hadoop/etc/hadoop/hadoop-env.sh
/usr/hadoop/etc/hadoop/yarn-env.sh
/usr/hadoop/etc/hadoop/core-site.xml
/usr/hadoop/etc/hadoop/hdfs-site.xml
/usr/hadoop/etc/hadoop/yarn-site.xml
/usr/hadoop/etc/hadoop/mapred-site.xml
/usr/hadoop/etc/hadoop/slaves

1.hadoop-env.sh

# The java implementation to use.
export JAVA_HOME=/usr/java
# Assuming your installation directory is /usr/local/hadoop  
export HADOOP_PREFIX=/usr/hadoop

2.yarn-env.sh

export JAVA_HOME=/usr/java

3.core-site.xml

<configuration>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
</property>

<property>
  <name>hadoop.tmp.dir</name>
  <value>/home/hadoop/tmp</value>
</property>

<property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
</property>
</configuration>

/home/hadoop/tmp需手動創建

4.hdfs-site.xml

<configuration>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>/usr/hadoop/names</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>/usr/hadoop/data</value>
</property>
<property> 
    <name>dfs.replication</name> 
    <value>3</value> 
</property> 
<property>
    <name>dfs.datanode.ipc.address</name>
    <value>0.0.0.0:50020</value>
</property>
<property>
    <name>dfs.datanode.http.address</name>
    <value>0.0.0.0:50075</value>
</property>
</configuration>

/usr/hadoop/names
/usr/hadoop/data
這兩個目錄也需要手動創建

5.yarn-site.xml

<configuration>
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services</name> 
    <value>mapreduce_shuffle</value> 
</property>
</configuration>

6.mapred-site.xml

如果該文件不存在,手動創建之。

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
</configuration>

7.slaves

slave1
slave2
slave3

六、Hadoop的啓動與關閉

1.關閉防火牆

sudo /etc/init.d/iptables status
sudo /etc/init.d/iptables stop

2.NameNode初始化,僅在第一次啓動的時候執行。

hadoop@master:~$ cd /usr/hadoop/bin
hadoop@master:/usr/hadoop/bin$ ./hadoop namenode -format

3.啓動

hadoop@master:~$ cd /usr/hadoop/sbin
hadoop@master:/usr/hadoop/sbin$ start-dfs.sh
hadoop@master:/usr/hadoop/sbin$ start-yarn.sh

4.驗證

hadoop@master:~$ jps
8918 SecondaryNameNode
7562 Jps
8701 NameNode
9438 ResourceManager
hadoop@slave1:~$ jps
10322 Jps
4836 ResourceManager
6804 DataNode
4693 SecondaryNameNode
6923 NodeManager

5.關閉

hadoop@master:~$ stop-all.sh

七、在瀏覽器中驗證

在瀏覽器中輸入:

master:8088

這裏寫圖片描述

master:50070

這裏寫圖片描述

寫在最後

需要從master複製到slave的文件清單:
/usr/java
/usr/hadoop
/etc/profile
/etc/hosts

增減DataNode需要更改的文件:
/usr/hadoop/etc/hadoop/hdfs-site.xml
/usr/hadoop/etc/hadoop/slaves
/etc/hosts

另外如果新加入節點,需要更新集羣內所有節點的公鑰,以便互相之間可以無密碼訪問。


如果你完全參照本文步驟卻不能實現環境的搭建,多半是某些文件的權限問題,比如/usr/hadoop/log等,仔細查看終端報錯的信息,會發現大部分都是permission denied,個人建議把你需要使用的文件的所有者都變成hadoop,這是種笨辦法而且會造成不安全的問題,但對於解決問題有立竿見影的效果。
其次,本文作爲一篇速食文檔只是記錄我自己配置的過程,實際情況可能依賴於環境和版本而有所差別,如果想真正系統的掌握Hadoop,還是得去摳官方文檔:http://hadoop.apache.org/ (不情願的@_@)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章