溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

發(fā)布時間:2021-12-10 14:08:46 來源:億速云 閱讀:176 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Hadoop多節(jié)點(diǎn)集群怎么安裝配置”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Hadoop多節(jié)點(diǎn)集群怎么安裝配置”吧!

1、集群部署介紹

1.1 Hadoop簡介

HadoopApache軟件基金會旗下的一個開源分布式計算平臺。以Hadoop分布式文件系統(tǒng)HDFS(Hadoop Distributed Filesystem)和MapReduceGoogle MapReduce的開源實現(xiàn))為核心Hadoop為用戶提供了系統(tǒng)底層細(xì)節(jié)透明的分布式基礎(chǔ)架構(gòu)。

對于Hadoop的集群來講,可以分成兩大類角色:MasterSalve。一個HDFS集群是由一個NameNode和若干個DataNode組成的。其中NameNode作為主服務(wù)器,管理文件系統(tǒng)的命名空間和客戶端對文件系統(tǒng)的訪問操作;集群中的DataNode管理存儲的數(shù)據(jù)。MapReduce框架是由一個單獨(dú)運(yùn)行在主節(jié)點(diǎn)上的JobTracker和運(yùn)行在每個從節(jié)點(diǎn)的TaskTracker共同組成的。主節(jié)點(diǎn)負(fù)責(zé)調(diào)度構(gòu)成一個作業(yè)的所有任 務(wù),這些任務(wù)分布在不同的從節(jié)點(diǎn)上。主節(jié)點(diǎn)監(jiān)控它們的執(zhí)行情況,并且重新執(zhí)行之前的失敗任務(wù);從節(jié)點(diǎn)僅負(fù)責(zé)由主節(jié)點(diǎn)指派的任務(wù)。當(dāng)一個Job被提交時,JobTracker接收到提交作業(yè)和配置信息之后,就會將配置信息等分發(fā)給從節(jié)點(diǎn),同時調(diào)度任務(wù)并監(jiān)控TaskTracker的執(zhí)行。

從上面的介紹可以看出,HDFSMapReduce共同組成了Hadoop分布式系統(tǒng)體系結(jié)構(gòu)的核心。HDFS在集群上實現(xiàn)分布式文件系統(tǒng),MapReduce在集群上實現(xiàn)了分布式計算和任務(wù)處理。HDFSMapReduce任務(wù)處理過程中提供了文件操作和存儲等支持,MapReduceHDFS的基礎(chǔ)上實現(xiàn)了任務(wù)的分發(fā)、跟蹤、執(zhí)行等工作,并收集結(jié)果,二者相互作用,完成了Hadoop分布式集群的主要任務(wù)。

1.2 環(huán)境說明

我的環(huán)境是在虛擬機(jī)中配置的,Hadoop集群中包括4個節(jié)點(diǎn):1Master,2Salve,節(jié)點(diǎn)之間局域網(wǎng)連接,可以相互ping通,節(jié)點(diǎn)IP地址分布如下:

虛擬機(jī)系統(tǒng)

機(jī)器名稱

IP地址

Ubuntu 13.04

Master.Hadoop

192.168.1.141

Ubuntu 9.11

Salve1.Hadoop

192.168.1.142

Fedora 17

Salve2.Hadoop

192.168.1.137

Master機(jī)器主要配置NameNodeJobTracker的角色,負(fù)責(zé)總管分布式數(shù)據(jù)和分解任務(wù)的執(zhí)行;3Salve機(jī)器配置DataNode TaskTracker的角色,負(fù)責(zé)分布式數(shù)據(jù)存儲以及任務(wù)的執(zhí)行。其實應(yīng)該還應(yīng)該有1Master機(jī)器,用來作為備用,以防止Master服務(wù)器宕機(jī),還有一個備用馬上啟用。后續(xù)經(jīng)驗積累一定階段后補(bǔ)上一臺備用Master機(jī)器(可通過配置文件修改備用機(jī)器數(shù))。

    注意:由于hadoop要求所有機(jī)器上hadoop部署目錄結(jié)構(gòu)要求相同(因為在啟動時按與主節(jié)點(diǎn)相同的目錄啟動其它任務(wù)節(jié)點(diǎn)),并且都有一個相同的用戶名賬戶。參考各種文檔上說的是所有機(jī)器都建立一個hadoop用戶,使用這個賬戶來實現(xiàn)無密碼認(rèn)證。這里為了方便,分別在三臺機(jī)器上都重新建立一個hadoop用戶。

1.3 環(huán)境配置

Hadoop集群要按照1.2小節(jié)表格所示進(jìn)行配置,下面介紹如何修改機(jī)器名稱和配置hosts文件,以方便使用。

注意:我的虛擬機(jī)都采用NAT方式連接網(wǎng)絡(luò),IP地址是自動分配的,所以這里就使用自動分配的IP地址而未特地修改為某些IP地址。

1)修改當(dāng)前機(jī)器名稱

假定我們發(fā)現(xiàn)我們的機(jī)器的主機(jī)名不是我們想要的。

1)Ubuntu下修改機(jī)器名稱

修改文件/etc/hostname里的值即可,修改成功后用hostname命令查看當(dāng)前主機(jī)名是否設(shè)置成功。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

      另外為了能正確解析主機(jī)名,最好也修改/etc/hosts文件里對應(yīng)的主機(jī)名 
      Hadoop多節(jié)點(diǎn)集群怎么安裝配置

2)Fedora下修改機(jī)器名稱

通過對"/etc/sysconfig/network"文件修改其中"HOSTNAME"后面的值,改成我們規(guī)定的名稱。

命令:vi /etc/sysconfig/network,修改如下: 
    
Hadoop多節(jié)點(diǎn)集群怎么安裝配置 
        Hadoop多節(jié)點(diǎn)集群怎么安裝配置

    同樣為了能正確解析主機(jī)名,最好也修改/etc/hosts文件里對應(yīng)的主機(jī)名。

2)配置hosts文件(必須)

"/etc/hosts"這個文件是用來配置主機(jī)將用的DNS服務(wù)器信息,是記載LAN內(nèi)接續(xù)的各主機(jī)的對應(yīng)[HostName  IP]用的。當(dāng)用戶在進(jìn)行網(wǎng)絡(luò)連接時,首先查找該文件,尋找對應(yīng)主機(jī)名對應(yīng)的IP地址。

我們要測試兩臺機(jī)器之間知否連通,一般用"ping 機(jī)器的IP",如果想用"ping 機(jī)器的主機(jī)名"發(fā)現(xiàn)找不見該名稱的機(jī)器(這也就是為什么在修改主機(jī)名的同時最好修改該文件中對應(yīng)的主機(jī)名),解決的辦法就是修改"/etc/hosts"這個文件,通過把LAN內(nèi)的各主機(jī)的IP地址和HostName一一對應(yīng)寫入這個文件的時候,就可以解決問題。

例如:機(jī)器為"Master.Hadoop:192.168.1.141"對機(jī)器為"Salve1.Hadoop:192.168.1.142"用命令"ping"記性連接測試。測試結(jié)果如下: 
    
Hadoop多節(jié)點(diǎn)集群怎么安裝配置

從上圖中的值,直接對IP地址進(jìn)行測試,能夠ping通,但是對主機(jī)名進(jìn)行測試,發(fā)現(xiàn)沒有ping通,提示"unknown host——未知主機(jī)",這時查看"Master.Hadoop""/etc/hosts"文件內(nèi)容會發(fā)現(xiàn)里面沒有"192.168.1.142  Slave1.Hadoop"內(nèi)容,故而本機(jī)器是無法對機(jī)器的主機(jī)名為"Slave1.Hadoop" 解析。

在進(jìn)行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有機(jī)器的IP與主機(jī)名,這樣Master與所有的Slave機(jī)器之間不僅可以通過IP進(jìn)行通信,而且還可以通過主機(jī)名進(jìn)行通信。所以在所有的機(jī)器上的"/etc/hosts"文件中都要添加如下內(nèi)容:

192.168.1.141 Master.Hadoop

192.168.1.142 Slave1.Hadoop

192.168.1.137 Slave2.Hadoop

命令:vi /etc/hosts,添加結(jié)果如下: 
Hadoop多節(jié)點(diǎn)集群怎么安裝配置

現(xiàn)在我們在進(jìn)行對機(jī)器為"Slave1.Hadoop"的主機(jī)名進(jìn)行ping通測試,看是否能測試成功。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

從上圖中我們已經(jīng)能用主機(jī)名進(jìn)行ping通了,說明我們剛才添加的內(nèi)容,在局域網(wǎng)內(nèi)能進(jìn)行DNS解析了,那么現(xiàn)在剩下的事兒就是在其余的Slave機(jī)器上進(jìn)行相同的配置。然后進(jìn)行測試。

1.4 所需軟件

1JDK軟件

    下載地址:http://www.Oracle.com/technetwork/java/javase/index.html

    JDK版本:jdk-7u25-linux-i586.tar.gz

2Hadoop軟件

    下載地址:http://hadoop.apache.org/common/releases.html

    Hadoop版本:hadoop-1.1.2.tar.gz

2、SSH無密碼驗證配置

Hadoop運(yùn)行過程中需要管理遠(yuǎn)端Hadoop守護(hù)進(jìn)程,在Hadoop啟動以后,NameNode是通過SSHSecure Shell)來啟動和停止各個DataNode上的各種守護(hù)進(jìn)程的。這就必須在節(jié)點(diǎn)之間執(zhí)行指令的時候是不需要輸入密碼的形式,故我們需要配置SSH運(yùn)用無密碼公鑰認(rèn)證的形式,這樣NameNode使用SSH無密碼登錄并啟動DataName進(jìn)程,同樣原理,DataNode上也能使用SSH無密碼登錄到 NameNode。

注意:如果你的Linux沒有安裝SSH,請首先安裝SSH

Ubuntu下安裝sshsudo apt-get install openssh-server

Fedora下安裝sshyum install openssh-server

2.1 SSH基本原理和用法

1)SSH基本原理

    SSH之所以能夠保證安全,原因在于它采用了公鑰加密。過程如下:

(1)遠(yuǎn)程主機(jī)收到用戶的登錄請求,把自己的公鑰發(fā)給用戶。

(2)用戶使用這個公鑰,將登錄密碼加密后,發(fā)送回來。

(3)遠(yuǎn)程主機(jī)用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶登錄。

2SSH基本用法

    假如用戶名為java,登錄遠(yuǎn)程主機(jī)名為linux,如下命令即可:

    $ ssh java@linux

    SSH的默認(rèn)端口是22,也就是說,你的登錄請求會送進(jìn)遠(yuǎn)程主機(jī)的22端口。使用p參數(shù),可以修改這個端口,例如修改為88端口,命令如下:

    $ ssh -p 88 java@linux

    注意:如果出現(xiàn)錯誤提示:ssh: Could not resolve hostname linux: Name or service not known,則是因為linux主機(jī)未添加進(jìn)本主機(jī)的Name Service中,故不能識別,需要在/etc/hosts里添加進(jìn)該主機(jī)及對應(yīng)的IP即可:

    linux    192.168.1.107

2.2 配置Master無密碼登錄所有Salve

1SSH無密碼原理

MasterNameNode | JobTracker)作為客戶端,要實現(xiàn)無密碼公鑰認(rèn)證,連接到服務(wù)器SalveDataNode | Tasktracker)上時,需要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,而后將公鑰復(fù)制到所有的Slave上。當(dāng)Master通過SSH連接Salve時,Salve就會生成一個隨機(jī)數(shù)并用Master的公鑰對隨機(jī)數(shù)進(jìn)行加密,并發(fā)送給MasterMaster收到加密數(shù)之后再用私鑰解密,并將解密數(shù)回傳給Slave,Slave確認(rèn)解密數(shù)無誤之后就允許Master進(jìn)行連接了。這就是一個公鑰認(rèn)證過程,其間不需要用戶手工輸入密碼。

2)Master機(jī)器上設(shè)置無密碼登錄

a. Master節(jié)點(diǎn)利用ssh-keygen命令生成一個無密碼密鑰對。

Master節(jié)點(diǎn)上執(zhí)行以下命令:

ssh-keygen –t rsa –P ''

運(yùn)行后詢問其保存路徑時直接回車采用默認(rèn)路徑。生成的密鑰對:id_rsa(私鑰)和id_rsa.pub(公鑰),默認(rèn)存儲在"/home/用戶名/.ssh"目錄下。 
    
Hadoop多節(jié)點(diǎn)集群怎么安裝配置

查看"/home/用戶名/"下是否有".ssh"文件夾,且".ssh"文件下是否有兩個剛生產(chǎn)的無密碼密鑰對。

    Hadoop多節(jié)點(diǎn)集群怎么安裝配置

b. 接著在Master節(jié)點(diǎn)上做如下配置,把id_rsa.pub追加到授權(quán)的key里面去。

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

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

查看下authorized_keys的權(quán)限,如果權(quán)限不對則利用如下命令設(shè)置該文件的權(quán)限:

chmod 600 authorized_keys

c. root用戶登錄修改SSH配置文件"/etc/ssh/sshd_config"的下列內(nèi)容。

檢查下面幾行前面”#”注釋是否取消掉:

RSAAuthentication yes # 啟用 RSA 認(rèn)證

PubkeyAuthentication yes # 啟用公鑰私鑰配對認(rèn)證方式

AuthorizedKeysFile  %h/.ssh/authorized_keys # 公鑰文件路徑 
    
Hadoop多節(jié)點(diǎn)集群怎么安裝配置

設(shè)置完之后記得重啟SSH服務(wù),才能使剛才設(shè)置有效。

    Hadoop多節(jié)點(diǎn)集群怎么安裝配置   

退出root登錄,使用普通用戶驗證是否設(shè)置成功。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置 

從上圖中得知無密碼登錄本級已經(jīng)設(shè)置完畢,接下來的事兒是把公鑰復(fù)制

Slave機(jī)器上。

    注意:有時候在測試時可能會出現(xiàn)錯誤: Agent admitted failure to sign using the key.解決辦法是:ssh-add  ~/.ssh/id_rsa ,如下所示:

  Hadoop多節(jié)點(diǎn)集群怎么安裝配置

    d.使用ssh-copy-id命令將公鑰傳送到遠(yuǎn)程主機(jī)上(這里以Slave1.Hadoop為例)。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

e. 測試是否無密碼登錄其它機(jī)器成功。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

到此為止,我們經(jīng)過5步已經(jīng)實現(xiàn)了從"Master.Hadoop""Slave1.Hadoop"SSH無密碼登錄,下面就是重復(fù)上面的步驟把剩余的兩臺(Slave2.HadoopSlave3.HadoopSlave服務(wù)器進(jìn)行配置。這樣,我們就完成了"配置Master無密碼登錄所有的Slave服務(wù)器"。

接下來配置所有Slave無密碼登錄Master,其Master無密碼登錄所有Slave原理一樣,就是把Slave的公鑰追加Master".ssh"文件夾下的"authorized_keys"中,記得是追加(>>。

注意:期間可能會出現(xiàn)一些問題如下:

1)如果在ssh連接時出現(xiàn)錯誤“sshconnect to host port 22 Connection refused”,如下圖所示: 
Hadoop多節(jié)點(diǎn)集群怎么安裝配置

則可能是因為遠(yuǎn)程登錄的那臺機(jī)器沒有安裝ssh服務(wù)或安裝了沒有開啟ssh服務(wù),下面到Slave3.Hadoop主機(jī)進(jìn)行測試: 
Hadoop多節(jié)點(diǎn)集群怎么安裝配置

為了一勞永逸,設(shè)置系統(tǒng)啟動時開啟服務(wù):# systemctl enable sshd.service 
Hadoop多節(jié)點(diǎn)集群怎么安裝配置

(2)如果在用命令ssh-copy-id時發(fā)現(xiàn)找不到該命令“ssh-copy-idCommand not found”,則可能是ssh服務(wù)的版本太低的原因,比如若你的機(jī)器是RedHat系統(tǒng)就可能該問題,解決辦法是:手動復(fù)制本地的pubkey內(nèi)容到遠(yuǎn)程服務(wù)器,命令如下:

 cat ~/.ssh/id_rsa.pub | ssh hadoop@Master.Hadoop 'cat >> ~/.ssh/authorized_keys'

該命令等價于下面兩個命令:

①在本地機(jī)器上執(zhí)行:scp ~/.ssh/id_rsa.pub hadoop@Master.Hadoop:/~

②到遠(yuǎn)程機(jī)器上執(zhí)行:cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

3、Java環(huán)境安裝

所有的機(jī)器上都要安裝JDK,現(xiàn)在就先在Master服務(wù)器安裝,然后其他服務(wù)器按照步驟重復(fù)進(jìn)行即可。安裝JDK以及配置環(huán)境變量,需要以"root"的身份進(jìn)行。

3.1 安裝JDK

首先用root身份登錄"Master.Hadoop"后在"/usr"下創(chuàng)建"java"文件夾,再將"jdk-7u25-linux-i586.tar.gz"復(fù)制到"/usr/java"文件夾中,然后解壓即可。查看"/usr/java"下面會發(fā)現(xiàn)多了一個名為"jdk1.7.0_25"文件夾,說明我們的JDK安裝結(jié)束,刪除"jdk-7u25-linux-i586.tar.gz"文件,進(jìn)入下一個"配置環(huán)境變量"環(huán)節(jié)。

3.2 配置環(huán)境變量

1)編輯"/etc/profile"文件

    編輯"/etc/profile"文件,在后面添加Java"JAVA_HOME""CLASSPATH"以及"PATH"內(nèi)容如下:

# set java environment

export JAVA_HOME=/usr/java/jdk1.7.0_25/

export JRE_HOME=/usr/java/jdk1.7.0_25/jre

export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

或者

# set java environment

export JAVA_HOME=/usr/java/jdk1.7.0_25/

export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

以上兩種意思一樣,那么我們就選擇1來進(jìn)行設(shè)置。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

2)使配置生效

保存并退出,執(zhí)行下面命令使其配置立即生效。

source /etc/profile  . /etc/profile

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

3.3 驗證安裝成功

配置完畢并生效后,用下面命令判斷是否成功。

java -version

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

從上圖中得知,我們確定JDK已經(jīng)安裝成功。

3.4 安裝剩余機(jī)器

這時用普通用戶hadoop通過scp命令格式把"/usr/java/"文件復(fù)制到其他Slave上面,剩下的事兒就是在其余的Slave服務(wù)器上按照上圖的步驟配置環(huán)境變量和測試是否安裝成功,這里以Slave1.Master為例:

scp -r /usr/java seed@Slave1.Master:/usr/ 

注意:有的機(jī)器庫函數(shù)版本較低,可能安裝不了高版本的JDK,比如有些Redhat9,此時不可以選擇較低版本的JDK進(jìn)行安裝,因為所有集群中的JDK版本必須相同(經(jīng)過測試),有兩種方法可解決:一是放棄該機(jī)器,選用另一臺能裝該版本的JDK的機(jī)子;二是選擇低版本的JDK,在所有機(jī)器上重新安裝。

4、Hadoop集群安裝

所有的機(jī)器上都要安裝hadoop,現(xiàn)在就先在Master服務(wù)器安裝,然后其他服務(wù)器按照步驟重復(fù)進(jìn)行即可。安裝和配置hadoop需要以"root"的身份進(jìn)行。

4.1 安裝hadoop

首先用root用戶登錄"Master.Hadoop"機(jī)器,將下載的"hadoop-1.1.2.tar.gz"復(fù)制到/usr目錄下。然后進(jìn)入"/usr"目錄下,用下面命令把"hadoop-1.1.2.tar.gz"進(jìn)行解壓,并將其重命名為"hadoop",把該文件夾的讀權(quán)限分配給普通用戶hadoop,然后刪除"hadoop-1.0.0.tar.gz"安裝包。

cd /usr

tar –xzvf hadoop-1.1.2.tar.gz

mv hadoop-1.1.2 hadoop

chown –R hadoop:hadoop hadoop #將文件夾"hadoop"讀權(quán)限分配給hadoop普通用戶

rm -rf hadoop-1.1.2.tar.gz

最后在"/usr/hadoop"下面創(chuàng)建tmp文件夾,并把Hadoop的安裝路徑添加到"/etc/profile"中,修改"/etc/profile"文件,將以下語句添加到末尾,并使其生效(. /etc/profile)

# set hadoop path

export HADOOP_HOME=/usr/hadoop

export PATH=$PATH :$HADOOP_HOME/bin

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

4.2 配置hadoop

1)配置hadoop-env.sh

"hadoop-env.sh"文件位于"/usr/hadoop/conf"目錄下。

在文件中修改下面內(nèi)容:

export JAVA_HOME=/usr/java/jdk1.7.0_25

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

Hadoop配置文件在conf目錄下,之前的版本的配置文件主要是Hadoop-default.xmlHadoop-site.xml。 由于Hadoop發(fā)展迅速,代碼量急劇增加,代碼開發(fā)分為了core,hdfsmap/reduce三部分,配置文件也被分成了三個core- site.xmlhdfs-site.xml、mapred-site.xml。core-site.xmlhdfs-site.xml是站在 HDFS角度上配置文件;core-site.xmlmapred-site.xml是站在MapReduce角度上配置文件。

 (2)配置core-site.xml文件

修改Hadoop核心配置文件core-site.xml,這里配置的是HDFS master(即namenode)的地址和端口號。

    

        hadoop.tmp.dir

        /usr/hadoop/tmp

        備注:請先在 /usr/hadoop 目錄下建立 tmp 文件夾)

        A base for other temporary directories.

    

    

        fs.default.name

       hdfs://192.168.1.141:9000

    

備注:如沒有配置hadoop.tmp.dir參數(shù),此時系統(tǒng)默認(rèn)的臨時目錄為:/tmp/hadoo-hadoop。而這個目錄在每次重啟后都會被刪掉,必須重新執(zhí)行format才行,否則會出錯。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

3)配置hdfs-site.xml文件

修改HadoopHDFS的配置,配置的備份方式默認(rèn)為3

    

        dfs.replication

        1

        (備注:replication 是數(shù)據(jù)副本數(shù)量,默認(rèn)為3salve少于3臺就會報錯)

    

 Hadoop多節(jié)點(diǎn)集群怎么安裝配置

4)配置mapred-site.xml文件

修改HadoopMapReduce的配置文件,配置的是JobTracker的地址和端口。

    

        mapred.job.tracker

        http://192.168.1.141:9001

    

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

5)配置masters文件

有兩種方案:

    1)第一種

    修改localhostMaster.Hadoop

    2)第二種

    去掉"localhost",加入Master機(jī)器的IP192.168.1.141

為保險起見,啟用第二種,因為萬一忘記配置"/etc/hosts"局域網(wǎng)的DNS失效,這樣就會出現(xiàn)意想不到的錯誤,但是一旦IP配對,網(wǎng)絡(luò)暢通,就能通過IP找到相應(yīng)主機(jī)。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

6)配置slaves文件(Master主機(jī)特有

    有兩種方案:

    1)第一種

    去掉"localhost",每行添加一個主機(jī)名,把剩余的Slave主機(jī)名都填上。

    例如:添加形式如下:

Slave1.Hadoop

Slave2.Hadoop

    2)第二種

    去掉"localhost",加入集群中所有Slave機(jī)器的IP,也是每行一個。

    例如:添加形式如下

192.168.1.142

192.168.1.137

原因和添加"masters"文件一樣,選擇第二種方式。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

現(xiàn)在在Master機(jī)器上的Hadoop配置就結(jié)束了,剩下的就是配置Slave機(jī)器上的Hadoop。

最簡單的方法是 Master上配置好的hadoop所在文件夾"/usr/hadoop"復(fù)制到所有的Slave"/usr"目錄下(實際上Slave機(jī)器上的slavers文件是不必要的, 復(fù)制了也沒問題)。用下面命令格式進(jìn)行。(備注:此時用戶可以為普通用戶也可以為root   

scp -r /usr/hadoop root@服務(wù)器IP:/usr/

例如:從"Master.Hadoop""Slave1.Hadoop"復(fù)制配置Hadoop的文件。

scp -r /usr/hadoop root@Slave1.Hadoop:/usr/

root用戶進(jìn)行復(fù)制,當(dāng)然不管是用戶root還是普通用戶,雖然Master機(jī)器上的"/usr/hadoop"文件夾用戶hadoop有權(quán)限,但是Slave1上的hadoop用戶卻沒有"/usr"權(quán)限,所以沒有創(chuàng)建文件夾的權(quán)限。所以無論是哪個用戶進(jìn)行拷貝,右面都是"root@機(jī)器 IP"格式。因為我們只是建立起了普通用戶的SSH無密碼連接,所以用root進(jìn)行"scp"時,扔提示讓你輸入"Slave1.Hadoop" 服務(wù)器用戶root的密碼。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

    查看"Slave1.Hadoop"服務(wù)器的"/usr"目錄下是否已經(jīng)存在"hadoop"文件夾,確認(rèn)已經(jīng)復(fù)制成功。查看結(jié)果如下:

Hadoop多節(jié)點(diǎn)集群怎么安裝配置 

從上圖中知道,hadoop文件夾確實已經(jīng)復(fù)制了,但是我們發(fā)現(xiàn)hadoop權(quán)限是root,所以我們現(xiàn)在要給"Slave1.Hadoop"服務(wù)器上的用戶hadoop添加對"/usr/hadoop"讀權(quán)限。

root用戶登錄"Slave1.Hadoop",執(zhí)行下面命令。

chown -R hadoop:hadoop用戶名:用戶組 hadoop文件夾

接著在"Slave1 .Hadoop"上修改"/etc/profile"文件,將以下語句添加到末尾,并使其有效(source /etc/profile):

# set hadoop environment

export HADOOP_HOME=/usr/hadoop

export PATH=$PATH :$HADOOP_HOME/bin

如果不知道怎么設(shè)置,可以查看前面"Master.Hadoop"機(jī)器的"/etc/profile"文件的配置,到此為止在一臺Slave機(jī)器上的Hadoop配置就結(jié)束了。剩下的事兒就是照葫蘆畫瓢把剩余的幾臺Slave機(jī)器進(jìn)行部署Hadoop

4.3 啟動及驗證

1)格式化HDFS文件系統(tǒng)

"Master.Hadoop"上使用普通用戶hadoop進(jìn)行操作。(備注:只需一次,下次啟動不再需要格式化,只需 start-all.sh

hadoop namenode -format

Hadoop多節(jié)點(diǎn)集群怎么安裝配置 

從上圖中知道我們已經(jīng)成功格式化了,但是美中不足就是出現(xiàn)了一個警告,從網(wǎng)上得知這個警告并不影響hadoop執(zhí)行,但是也有辦法解決,詳情看后面的"常見問題FAQ"。

2)啟動hadoop

在啟動前關(guān)閉集群中所有機(jī)器的防火墻,不然會出現(xiàn)datanode開后又自動關(guān)閉。使用下面命令啟動。

start-all.sh

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

可以通過以下啟動日志看出,首先啟動namenode 接著啟動datanode1datanode2,,然后啟動secondarynamenode。再啟動jobtracker,然后啟動tasktracker1,tasktracker2。

啟動 hadoop成功后,在 Master 中的 tmp 文件夾中生成了 dfs 文件夾,在Slave 中的 tmp 文件夾中均生成了 dfs 文件夾和 mapred 文件夾。

3)驗證hadoop

1)驗證方法一:用"jps"命令

Master上用 java自帶的小工具jps查看進(jìn)程。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

Slave2上用jps查看進(jìn)程。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

如果在查看Slave機(jī)器中發(fā)現(xiàn)"DataNode""TaskTracker"沒有起來時,先查看一下日志的,如果是"namespaceID"不一致問題,采用"常見問題FAQ6.2"進(jìn)行解決,如果是"No route to host"問題,采用"常見問題FAQ6.3"進(jìn)行解決。

2)驗證方式二:用"hadoop dfsadmin -report"

用這個命令可以查看Hadoop集群的狀態(tài)。

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

 

 

 

4.4 網(wǎng)頁查看集群

1)訪問"http://192.168.1.141:50030"

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

2)訪問"http://192.168.1.142:50070"

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

5、常見問題FAQ

5.1 關(guān)于 Warning: $HADOOP_HOME is deprecated.

hadoop安裝完之后敲入hadoop命令時,是提示這個警告:

    Warning: $HADOOP_HOME is deprecated.

經(jīng)查hadoop-1.1.2/bin/hadoop腳本和"hadoop-config.sh"腳本,發(fā)現(xiàn)腳本中對HADOOP_HOME的環(huán)境變量設(shè)置做了判斷,其實根本不需要設(shè)置HADOOP_HOME環(huán)境變量。

解決方案一:編輯"/etc/profile"文件,去掉HADOOP_HOME的變量設(shè)定,重新輸入hadoop fs命令,警告消失。

解決方案二:編輯"/etc/profile"文件,添加一個環(huán)境變量,之后警告消失:

    export HADOOP_HOME_WARN_SUPPRESS=1

5.2 解決"no datanode to stop"問題

當(dāng)我停止Hadoop時發(fā)現(xiàn)如下信息:

   no datanode to stop

原因:每次namenode format會重新創(chuàng)建一個namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的數(shù)據(jù),但是沒有清空datanode下的數(shù)據(jù),導(dǎo)致啟動時失敗,有兩種解決方案:

第一種解決方案如下:

1)先刪除"/usr/hadoop/tmp"

rm -rf /usr/hadoop/tmp

2)創(chuàng)建"/usr/hadoop/tmp"文件夾

mkdir /usr/hadoop/tmp

3)刪除"/tmp"下以"hadoop"開頭文件

rm -rf /tmp/hadoop*

4)重新格式化hadoop

 

hadoop namenode -format

5)啟動hadoop

start-all.sh

使用第一種方案,有種不好處就是原來集群上的重要數(shù)據(jù)全沒有了。假如說Hadoop集群已經(jīng)運(yùn)行了一段時間。建議采用第二種。

第二種方案如下:

1)修改每個SlavenamespaceID使其與MasternamespaceID一致。

  或者

2)修改MasternamespaceID使其與SlavenamespaceID一致。

"namespaceID"位于"/usr/hadoop/tmp/dfs/name/current/VERSION"文件中,前面藍(lán)色的可能根據(jù)實際情況變化,但后面紅色一般是不變的。

例如:查看"Master"下的"VERSION"文件

Hadoop多節(jié)點(diǎn)集群怎么安裝配置

本人建議采用第二種,這樣方便快捷,而且還能防止誤刪。

5.3 Slave服務(wù)器中datanode啟動后又自動關(guān)閉

查看日志發(fā)下如下錯誤。

    ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Call to ... failed on local exception: java.net.NoRouteToHostException: No route to host

解決方案是:關(guān)閉防火墻

5.4 從本地往hdfs文件系統(tǒng)上傳文件

出現(xiàn)如下錯誤:

INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.IOException: Bad connect ack with firstBadLink

INFO hdfs.DFSClient: Abandoning block blk_-1300529705803292651_37023

WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: Unable to create new block.

解決方案是:

1)關(guān)閉防火墻

2)禁用selinux

    編輯 "/etc/selinux/config"文件,設(shè)置"SELINUX=disabled"

5.5 安全模式導(dǎo)致的錯誤

出現(xiàn)如下錯誤:

org.apache.hadoop.dfs.SafeModeException: Cannot delete ..., Name node is in safe mode

在分布式文件系統(tǒng)啟動的時候,開始的時候會有安全模式,當(dāng)分布式文件系統(tǒng)處于安全模式的情況下,文件系統(tǒng)中的內(nèi)容不允許修改也不允許刪除,直到安全模式結(jié)束。安全模式主要是為了系統(tǒng)啟動的時候檢查各個DataNode上數(shù)據(jù)塊的有效性,同時根據(jù)策略必要的復(fù)制或者刪除部分?jǐn)?shù)據(jù)塊。運(yùn)行期通過命令也可以進(jìn)入安全模式。在實踐過程中,系統(tǒng)啟動的時候去修改和刪除文件也會有安全模式不允許修改的出錯提示,只需要等待一會兒即可。

解決方案是:關(guān)閉安全模式

hadoop dfsadmin -safemode leave

5.6 解決Exceeded MAX_FAILED_UNIQUE_FETCHES

出現(xiàn)錯誤如下:

Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out

程序里面需要打開多個文件,進(jìn)行分析,系統(tǒng)一般默認(rèn)數(shù)量是1024,(用ulimit -a可以看到)對于正常使用是夠了,但是對于程序來講,就太少了。

解決方案是:修改2個文件。

1"/etc/security/limits.conf"

    vi /etc/security/limits.conf

加上:

    soft nofile 102400

    hard nofile 409600

2"/etc/pam.d/login"

    vim /etc/pam.d/login

添加:

    session required /lib/security/pam_limits.so

針對第一個問題我糾正下答案:

這是reduce預(yù)處理階段shuffle時獲取已完成的map的輸出失敗次數(shù)超過上限造成的,上限默認(rèn)為5。引起此問題的方式可能會有很多種,比如網(wǎng)絡(luò)連接不正常,連接超時,帶寬較差以及端口阻塞等。通??蚣軆?nèi)網(wǎng)絡(luò)情況較好是不會出現(xiàn)此錯誤的。

5.7 解決"Too many fetch-failures"

出現(xiàn)這個問題主要是結(jié)點(diǎn)間的連通不夠全面。

解決方案是:

1)檢查"/etc/hosts"

要求本機(jī)ip 對應(yīng)服務(wù)器名

要求要包含所有的服務(wù)器ip +服務(wù)器名

2)檢查".ssh/authorized_keys"

要求包含所有服務(wù)器(包括其自身)的public key

5.8 處理速度特別的慢

出現(xiàn)map,但是reduce,而且反復(fù)出現(xiàn)"reduce=0%"。

解決方案如下:

結(jié)合解決方案5.7,然后修改"conf/hadoop-env.sh"中的"export HADOOP_HEAPSIZE=4000"

5.9 解決hadoop OutOfMemoryError問題

出現(xiàn)這種異常,明顯是jvm內(nèi)存不夠得原因。

解決方案如下:要修改所有的datanodejvm內(nèi)存大小。

    Java –Xms 1024m -Xmx 4096m

一般jvm的最大內(nèi)存使用應(yīng)該為總內(nèi)存大小的一半,我們使用的8G內(nèi)存,所以設(shè)置為4096m,這一值可能依舊不是最優(yōu)的值。

到此,相信大家對“Hadoop多節(jié)點(diǎn)集群怎么安裝配置”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI