1.準(zhǔn)備工作
集群包括3個(gè)節(jié)點(diǎn),1個(gè)Namenode、2個(gè)Datanode,其中節(jié)點(diǎn)之間可以相互ping通。節(jié)點(diǎn)IP地址和主機(jī)名如下:
所有節(jié)點(diǎn)均是CentOS系統(tǒng),防火墻均禁用,所有節(jié)點(diǎn)上均創(chuàng)建了一個(gè)Hadoop用戶,用戶主目錄是/home/Hadoop。所有節(jié)點(diǎn)上均創(chuàng)建了一個(gè)目錄/usr/hadoop,并且擁有者是hadoop用戶。因?yàn)樵撃夸浻糜诎惭bhadoop,用戶對(duì)其必須有rwx權(quán)限。(一般做法是root用戶下在/usr下創(chuàng)建hadoop目錄,并修改該目錄擁有者為hadoop(chown –R Hadoop: /usr/hadoop),否則通過(guò)SSH往其他機(jī)器分發(fā)Hadoop文件會(huì)出現(xiàn)權(quán)限不足的提示。
由于Hadoop要求所有機(jī)器上Hadoop的部署目錄結(jié)構(gòu)要求相同(因?yàn)樵趩?dòng)時(shí)按與主節(jié)點(diǎn)相同的目錄啟動(dòng)其它任務(wù)節(jié)點(diǎn)),并且都有一個(gè)相同的用戶名賬戶。參考各種文檔上說(shuō)的是所有機(jī)器都建立一個(gè)hadoop用戶,使用這個(gè)賬戶來(lái)實(shí)現(xiàn)無(wú)密碼認(rèn)證。這里為了方便,分別在三臺(tái)機(jī)器上都重新建立一個(gè)hadoop用戶。
2.環(huán)境搭建
對(duì)于Datanode類型的系統(tǒng),可以先安裝一個(gè)系統(tǒng),然后利用VMWare的克隆功能,克隆多個(gè)相同的系統(tǒng)。如下圖所示。
VMWare下安裝CentOs系統(tǒng)的教程直接在網(wǎng)上找。特別注意的是:所有系統(tǒng)的網(wǎng)絡(luò)選擇為橋接模式,并且由于本機(jī)是在無(wú)線網(wǎng)絡(luò)上進(jìn)行上網(wǎng)的,故還要設(shè)置VMnet0的信息:在編輯->虛擬網(wǎng)絡(luò)編輯器···如下圖:
橋接網(wǎng)絡(luò)是指本地物理網(wǎng)卡和虛擬網(wǎng)卡通過(guò)VMnet0虛擬交換機(jī)進(jìn)行橋接,物理網(wǎng)卡和虛擬網(wǎng)卡在拓?fù)鋱D上處于同等地位,那么物理網(wǎng)卡和虛擬網(wǎng)卡就相當(dāng)于處于同一個(gè)網(wǎng)段,虛擬交換機(jī)就相當(dāng)于一臺(tái)現(xiàn)實(shí)網(wǎng)絡(luò)中的交換機(jī),所以兩個(gè)網(wǎng)卡的IP地址也要設(shè)置為同一網(wǎng)段。
在”橋接到”那一欄里選擇所用的網(wǎng)卡類型。
采用橋接來(lái)連接網(wǎng)絡(luò)(適合有路由、交換機(jī)用戶),配置靜態(tài)IP來(lái)實(shí)現(xiàn)上網(wǎng),局域網(wǎng)內(nèi)通信。
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #描述網(wǎng)卡對(duì)應(yīng)的設(shè)備別名
BOOTPROTO=static #設(shè)置網(wǎng)卡獲得ip地址的方式,為static
HWADDR=”00:23:54:DE:01:69”
ONBOOT=”yes” #系統(tǒng)啟動(dòng)時(shí)是否設(shè)置此網(wǎng)絡(luò)接口,設(shè)置為yes
TYPE=”Ethernet”
USERCTL=no
IPV6INIT=no
PEERDNS=yes
NETMASK=255.255.255.0 #網(wǎng)卡對(duì)應(yīng)的網(wǎng)絡(luò)掩碼
IPADDR=192.168.1.127 #只有網(wǎng)卡設(shè)置成static時(shí),才需要此字段
GATEWAY=192.168.1.1 #設(shè)置為路由器地址,一般都是這個(gè)
DNS1=202.112.17.33 #設(shè)置為本網(wǎng)絡(luò)對(duì)應(yīng)的,或者8.8.8.8 #google域名服務(wù)器
本次操作的配置圖如下所示:
(可以直接在Master機(jī)上設(shè)置好,然后通過(guò)scp命令將該文件傳遞給所有的Slave,然后在Slave中修改相應(yīng)的IPADDR即可,其它不變)
注意:這里需要注意還要改一個(gè)東西,因?yàn)閟cp過(guò)去的硬件地址是一樣的必須修改下:
第一:修改vim /etc//etc/udev/rules.d/ 70-persistent-net.rules
將其中的名為eth0的網(wǎng)卡刪掉。同時(shí)將eth1的網(wǎng)卡名修改為eth0
第二:修改vim /etc/sysconfig/network-scripts/ifcfg-eth0
將HWADDR修改為剛剛看見(jiàn)的eth1的地址。
“/etc/hosts”這個(gè)文件是用來(lái)配置主機(jī)將用的DNS服務(wù)器信息,是記載LAN內(nèi)接續(xù)的各主機(jī)的對(duì)應(yīng)[HostName IP]用的。當(dāng)用戶在進(jìn)行網(wǎng)絡(luò)連接時(shí),首先查找該文件,尋找對(duì)應(yīng)主機(jī)名對(duì)應(yīng)的IP地址。
在進(jìn)行Hadoop集群配置中,需要在”/etc/hosts”文件中添加集群中所有機(jī)器的IP與主機(jī)名,這樣Master與所有的Slave機(jī)器之間不僅可以通過(guò)IP進(jìn)行通信,而且還可以通過(guò)主機(jī)名進(jìn)行通信。
所以在所有的機(jī)器上的”/etc/hosts”文件中都要添加如下內(nèi)容:
192.168.1.127 Master.Hadoop
192.168.1.128 Slave1.Hadoop
192.168.1.129 Slave2.Hadoop
(同樣,可以直接在Master機(jī)上設(shè)置好,然后通過(guò)scp命令將該文件傳遞給所有的Slave)
在Hadoop安裝過(guò)程中需要關(guān)閉防火墻和SElinux,否則會(huì)出現(xiàn)異常。
注意:修改后要重啟系統(tǒng),才能有效。
準(zhǔn)備工作:
1. 在三個(gè)虛擬機(jī)上設(shè)定Hadoop用戶:
adduser Hadoop #在root用戶下
passwd Hadoop #輸入兩次密碼
2. 在Hadoop用戶下建立.ssh文件夾
mkdir ~/.ssh
Hadoop運(yùn)行過(guò)程中需要管理遠(yuǎn)端Hadoop守護(hù)進(jìn)程,在Hadoop啟動(dòng)以后,NameNode是通過(guò)SSH(Secure Shell)來(lái)啟動(dòng)和停止各個(gè)DataNode上的各種守護(hù)進(jìn)程的。這就必須在節(jié)點(diǎn)之間執(zhí)行指令的時(shí)候是不需要輸入密碼的形式,故我們需要配置SSH運(yùn)用無(wú)密碼公鑰認(rèn)證的形式,這樣NameNode使用SSH無(wú)密碼登錄并啟動(dòng)DataName進(jìn)程,同樣原理,DataNode上也能使用SSH無(wú)密碼登錄到 NameNode。
SSH之所以能夠保證安全,原因在于它采用了公鑰加密。過(guò)程如下:
(1)遠(yuǎn)程主機(jī)收到用戶的登錄請(qǐng)求,把自己的公鑰發(fā)給用戶。
(2)用戶使用這個(gè)公鑰,將登錄密碼加密后,發(fā)送回來(lái)。
(3)遠(yuǎn)程主機(jī)用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶登錄。
注意:如果你的Linux沒(méi)有安裝SSH,請(qǐng)首先安裝SSH。
ssh-keygen –t rsa –P ”
運(yùn)行后詢問(wèn)其保存路徑時(shí)直接回車采用默認(rèn)路徑。生成的密鑰對(duì):id_rsa(私鑰)和id_rsa.pub(公鑰),默認(rèn)存儲(chǔ)在”/home/用戶名/.ssh”目錄下。
查看“/home/用戶名/”下是否有“.ssh”文件夾,且“.ssh”文件下是否有兩個(gè)剛生產(chǎn)的無(wú)密碼密鑰對(duì)。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
查看”.ssh”文件夾:
查看下authorized_keys的權(quán)限。(很重要!)
如果權(quán)限不對(duì)則利用如下命令設(shè)置該文件的權(quán)限:
chmod 700 ~/.ssh #注意:這兩條權(quán)限設(shè)置特別重要,決定成敗。
chmod 600 ~/.ssh/authorized_keys
在Master機(jī)器上輸入:ssh localhost 命令測(cè)試一下,看是否能無(wú)密碼登錄自己。
在Master中將公鑰id_rsa.pub通過(guò)scp命令發(fā)到每一個(gè)Slave的同一個(gè)地方(即/home/Hadoop/.ssh文件夾下),并且設(shè)置權(quán)限(非常重要)
scp ~/.ssh/authorized_keys Hadoop@Slave1.Hadoop:~/.ssh/
scp ~/.ssh/authorized_keys Hadoop@Slave2.Hadoop:~/.ssh/
在Slave中設(shè)置權(quán)限(root用戶下設(shè)置):
chown –R Hadoop:Hadoop /home/Hadoop/.ssh
chmod –R 700 /home/Hadoop/.ssh
chmod 600 /home/Hadoop/.ssh/authorized_keys
在Master下輸入:
ssh Slave1.Hadoop
若不用密碼則表示成功!
重點(diǎn):設(shè)置好權(quán)限!?。?
3.軟件安裝及環(huán)境配置
以下的軟件安裝先在Master上安裝,全部安裝完后,再通過(guò)復(fù)制到Slave中即可。
所有的機(jī)器上都要安裝JDK,并且版本要一樣。現(xiàn)在就先在Master服務(wù)器安裝,然后把安裝好的文件傳遞給Slave即可。安裝JDK以及配置環(huán)境變量,需要以”root”的身份進(jìn)行。
tar -zxvf jdk-8u25-linux-x64. gz
查看”/usr/java”下面會(huì)發(fā)現(xiàn)多了一個(gè)名為”jdk1.8.0_65”文件夾,說(shuō)明我們的JDK安裝結(jié)束,刪除安裝包即可,進(jìn)入下一個(gè)”配置環(huán)境變量”環(huán)節(jié)。
# set java environment
export JAVA_HOME=/usr/java/ jdk1.8.0_65/
export JRE_HOME=/usr/java/ jdk1.8.0_65/jre
export CLASSPATH=.:JAVAHOME/lib:JAVAHOME/lib:JRE_HOME/lib:$CLASSPATH
export PATH=JAVAHOME/bin:JAVAHOME/bin:PATH
如下圖所示:
保存并退出,執(zhí)行下面命令使其配置立即生效。
source /etc/profile 或 . /etc/profile
重點(diǎn)說(shuō)明:PATH變量要先把$JAVA_HOME放在第一位置,這樣新安裝的JDK能作為第一選擇,否則,系統(tǒng)還是以原來(lái)的JDK為選擇。
java –version
cd /usr
tar –xzvf hadoop-1.2.1.tar.gz
mv hadoop-1.2.1 hadoop
chown –R hadoop:hadoop hadoop
rm -rf hadoop-1.2.1.tar.gz
# set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=PATH:PATH:HADOOP_HOME/bin
該”hadoop-env.sh”文件位于”/usr/hadoop/conf”目錄下。
在文件中修改下面內(nèi)容:
export JAVA_HOME=/usr/java/ jdk1.8.0_65/
(此處的JAVA_HOME跟之前Java中環(huán)境配置的一樣)
source hadoop-env.sh
hadoop version
cd /usr/hadoop
mkdir tmp
mkdir hdfs
修改Hadoop核心配置文件core-site.xml,這里配置的是HDFS master(即namenode)的地址和端口號(hào)。
(備注:請(qǐng)先在 /usr/hadoop 目錄下建立 tmp 文件夾)
修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
有兩種方案:
(1)第一種
修改localhost為Master.Hadoop
(2)第二種
去掉”localhost”,加入Master機(jī)器的IP:192.168.1.127
為保險(xiǎn)起見(jiàn),啟用第二種,因?yàn)槿f(wàn)一忘記配置”/etc/hosts”局域網(wǎng)的DNS失效,這樣就會(huì)出現(xiàn)意想不到的錯(cuò)誤,但是一旦IP配對(duì),網(wǎng)絡(luò)暢通,就能通過(guò)IP找到相應(yīng)主機(jī)。
vim /usr/hadoop/conf/masters
與配置masters文件類似:
vim /usr/hadoop/conf/slaves
在Master上裝完JDK以及Hadoop以及配置好環(huán)境后,進(jìn)行下步工作:
在Master中輸入:
scp –r /usr/java root@Slave1.Hadoop :/usr/
scp –r /usr/java root@Slave2.Hadoop :/usr/
在Master中輸入:
scp /etc/profile root@Slave1.Hadoop :/etc/
scp /etc/profile root@Slave2.Hadoop :/etc/
在Master中輸入:
scp –r /usr/hadoop root@Slave1.Hadoop :/usr/
scp –r /usr/hadoop root@Slave2.Hadoop :/usr/
將/usr/java,/usr/hadoop的用戶組改為Hadoop用戶,設(shè)置權(quán)限為755。
至此環(huán)境搭建完畢
4.啟動(dòng)及驗(yàn)證
在”Master.Hadoop”上使用普通用戶hadoop進(jìn)行操作。(備注:只需一次,下次啟動(dòng)不再需要格式化,只需 start-all.sh)
hadoop namenode –format
在啟動(dòng)前關(guān)閉集群中所有機(jī)器的防火墻,不然會(huì)出現(xiàn)datanode開(kāi)后又自動(dòng)關(guān)閉。使用下面命令啟動(dòng)。
start-all.sh
stop-all.sh
在Master上用 java自帶的小工具jps查看進(jìn)程。
在Slave1上用 java自帶的小工具jps查看進(jìn)程。
注:上兩幅圖表示成功!
訪問(wèn)JobTracker:http://192.168.1.127:50030
訪問(wèn)NameNode:http://192.168.1.127:50070
5.所遇到的問(wèn)題及解決方法
hadoop安裝完之后敲入hadoop命令時(shí),老是提示這個(gè)警告:
Warning: $HADOOP_HOME is deprecated.
解決方案一:編輯”/etc/profile”文件,去掉HADOOP_HOME的變量設(shè)定,重新輸入hadoop fs命令,警告消失。
解決方案二:編輯”/etc/profile”文件,添加一個(gè)環(huán)境變量,之后警告消失:
export HADOOP_HOME_WARN_SUPPRESS=1
很有可能是因?yàn)闄?quán)限設(shè)置的不對(duì)!
有可能是Master和Slave的防火墻沒(méi)有關(guān)掉。
聯(lián)系客服