之前介紹過(guò)本地模式(偽分布式)安裝運(yùn)行Hadoop,今天介紹一下如何在分布式的環(huán)境下安裝并運(yùn)行Hadoop。
0x00 ? ?介紹
首先說(shuō)一下環(huán)境:一個(gè)NameNode節(jié)點(diǎn),一個(gè)SecondaryNameNode節(jié)點(diǎn),三個(gè)DataNode節(jié)點(diǎn)
NameNode -- hostname:namenode.athrob.com -- IP:192.168.187.128 -- 【NameNode節(jié)點(diǎn)和JobTracker節(jié)點(diǎn)】
SecondaryNameNode -- hostname:snn.athrob.com -- IP:192.168.187.129 -- 【SecondaryNameNode節(jié)點(diǎn)】
DataNode1 -- hostname:dn1.athrob.com -- IP:192.168.187.130 -- 【DataNode和TaskTracker節(jié)點(diǎn)】
DataNode2 -- hostname:dn2.athrob.com -- IP:192.168.187.131 -- 【DataNode和TaskTracker節(jié)點(diǎn)】
DataNode3 -- hostname:dn3.athrob.com -- IP:192.168.187.132 -- 【DataNode和TaskTracker節(jié)點(diǎn)】
0x01 ? ?其他準(zhǔn)備
[1]修改hostname
CentOS修改hostname需要修改兩個(gè)文件:
(1) /etc/sysconfig/network
(2) /etc/hosts
例如,我想修改我的hostname為:snn.athrob.com
一、vi打開(kāi)[1]中的這個(gè)network文件,將HOSTNAME=localhost.localdomain改為HOSTNAME=snn.athrob.com
二、編輯(2)中的這個(gè)hosts文件,將其中l(wèi)ocalhost.localdomain替換為snn.athrob.com
注:保存重啟后生效
[2]修改hosts文件,使前面的hostname和IP地址對(duì)應(yīng)起來(lái)
仍然編輯(2)中的hosts文件,添加:
192.168.187.128? namenode.athrob.com
192.168.187.129? snn.athrob.com
192.168.187.130? dn1.athrob.com
192.168.187.131? dn2.athrob.com
192.168.187.132? dn3.athrob.com
注:使用hostname訪(fǎng)問(wèn),避免使用IP地址訪(fǎng)問(wèn)。
0x02 ? ?配置ssh免密碼登錄
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
(1)在NameNode,SecondaryNameNode,DataNode1,DataNode2,DataNode3上配置如下命令:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
(2)將NameNode上生成的公鑰copy到其他四臺(tái)機(jī)器上:
scp ~/.ssh/id_dsa.pub root@snn.athrob.com:~
注:此命令是將本機(jī)的ssh公鑰上傳到SecondaryNameNode這臺(tái)機(jī)器上。
然后,在SecondaryNameNode上,進(jìn)入root主目錄,ls一下會(huì)看到剛才copy的來(lái)的這個(gè)id_dsa.pub文件
將該文件追加到~/.ssh/authorized_keys文件中:
cat id_dsa.pub >> ~/.ssh/authorized_keys
(3)確認(rèn)免密碼登錄成功
在NameNode上輸入:ssh root@snn.athrob.com
如果能直接登錄到SecondaryNameNode這臺(tái)機(jī)器上,則說(shuō)明免密碼登錄配置成功。
從NameNode上免密碼登錄到其他DataNode節(jié)點(diǎn)上,參考上面步驟。
0x03 ? ?配置JDK
設(shè)置JAVA環(huán)境變量:
cd ~
vi .bash_profile
添加下面三行:
export JAVA_HOME=/opt/jdk1.8.0_92
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
注:其中/opt/jdk1.8.0_92為JDK目錄的路徑,其它機(jī)器配置JAVA環(huán)境變量方法一樣
0x04 ? ?配置Hadoop
假設(shè)我的Hadoop目錄為:/opt/hadoop-1.2.1
cd /opt/hadoop-1.2.1/conf
該目錄下有六個(gè)文件需要修改:
hadoop-env.sh、core-site.xml、hdfs-site.xml、masters、slaves、mapred-site.xml
(1)hadoop-env.sh
修改JAVA_HOME的路徑
找到JAVA_HOME,修改如下:
export JAVA_HOME=/opt/jdk1.8.0_92
(2)core-site.xml
配置NameNode和Hadoop的工作目錄:

(3)hdfs-site.xml
配置Block的副本數(shù):(默認(rèn)為3,不能大于DataNode的個(gè)數(shù))

(4)masters
配置SecondaryNameNode:
將local改為:snn.athrob.com
(5)slaves
配置DataNode:
dn1.athrob.com
dn2.athrob.com
dn3.athrob.com
(6)mapred-site.xml
配置JobTracker:

注:NameNode和SecondaryNameNode不能配置為同一臺(tái)機(jī)器。TaskTracker不用配置,因?yàn)門(mén)askTracker存在DataNode上。
從NameNode上復(fù)制Hadoop這6個(gè)配置文件到相應(yīng)其他節(jié)點(diǎn)上的Hadoop配置目錄
為了省事,也可以直接copy整個(gè)配置目錄
scp /opt/hadoop-1.2.1/conf/* root@snn.athrob.com:/opt/hadoop-1.2.1/conf/
0x05 ? ?啟動(dòng)Hadoop
在NameNode上,進(jìn)入Hadoop目錄下的bin目錄下:
(1)啟動(dòng)前格式化NameNode
./hadoop namenode -format
(2)啟動(dòng)NameNode,SecondaryNameNode,DataNode,JobTracker,TaskTracker
./start-all.sh
0x06 ? ?JobTracker或者其他節(jié)點(diǎn)起不來(lái)
說(shuō)明:有的時(shí)候雖然說(shuō)我們?cè)贜ameNode上執(zhí)行了./start-all.sh,也看到輸出NameNode、SecondaryNameNode、DataNode、JobTracker、TaskTracker啟動(dòng)了。但是jps查看的時(shí)候,就是沒(méi)有相應(yīng)的進(jìn)程!
這個(gè)時(shí)候請(qǐng)關(guān)閉Linux的防火墻再重新啟動(dòng)hadoop,應(yīng)該就可以了!
service iptables ?stop
或ufw disable
下次準(zhǔn)備介紹,在Windows環(huán)境下,使用Eclipse編譯Hadoop中的eclipse插件。
不足之處,請(qǐng)批評(píng)指正。
如有問(wèn)題,請(qǐng)私信聯(lián)系。
謝謝!