折騰了兩天,總算把環境搭起來了,由於很多資料都是基於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/ (不情願的@_@)