Hadoop2.6.0完全分布式的安裝與配置(Centos)

1.Linux安裝前的配置

1.1.關閉防火墻

????? 本站文檔是假定「服務器在防火墻以內」的前提下編纂的,在這個前提下,服務器本身在內部網絡是不需要防火墻的(在需要抵御內部安全威脅的情況下,您也可以用您在iptables方面的相關知識,根據實情設置防火前,并保證服務器端防火墻啟動的狀態)。另外,在一般情況下,我們不需要SELinux復雜的保護,所以也將其設置為無效的狀態。

service iptables stop

1.2.關閉SELinux

用下面命令執行,并修改內容如下所示:

vim /etc/sysconfig/selinux

SELINUX=enforcing

↓修改為

SELINUX=disabled

2.集群部署介紹

2.1.環境說明

????? 集群中包括5個節點:1個Master,4個Salve,節點之間局域網連接,可以相互ping通。節點IP地址分布如下:

機器名稱???????????????????????????????????????? IP地址


Master.Hadoop???????????????????????????????? 70.70.70.120

Slave1.Hadoop????????????????????????????????? 80.80.80.184

Slave2.Hadoop????????????????????????????????? 80.80.80.183

Slave3.Hadoop????????????????????????????????? 80.80.80.182

Slave4.Hadoop????????????????????????????????? 80.80.80.180

四個節點上均是CentOS6.0系統,并且有一個相同的用戶hadoop。Master機器主要配置NameNode和JobTracker的角色,負責總管分布式數據和分解任務的執行;3個Salve機器配置DataNode和TaskTracker的角色,負責分布式數據存儲以及任務的執行。其實應該還應該有1個Master機器,用來作為備用,以防止Master服務器宕機,還有一個備用馬上啟用。后續經驗積累一定階段后補上一臺備用Master機器。

2.2.網絡配置

下面的例子我們將以Master機器為例,即主機名為"Master.Hadoop",IP為"70.70.70.120“進行主機的配置,他的Slave機器以此為依據進行修改。

2.2.1.查看當前機器名稱

命令:

hostname

上圖中,用”hostname"查"Master"機器的名字為“centos1.teacher20”,這是默認機器名,我們進行修改。

2.2.2.修改當前機器名稱

我們的機器的主機名不是我們想要的,通過對"/etc/sysconfig/network"文件修改其中"HOSTNAME"后面的值,改成我們規劃的名稱。

這個"/etc/sysconfig/network"文件是定義hostname和是否利用網絡的不接觸網絡設備的對系統全體定義的文件。

vi /etc/sysconfig/network

通過上面的命令我們從"/etc/sysconfig/network"中找到"HOSTNAME"進行修改,查看內容如下

配置完成之后,我們需要重啟主機,命令:

reboot

2.2.3.配置hosts文件(必須)

"/etc/hosts"這個文件是用來配置主機將用的DNS服務器信息,是記載LAN內接續的各主機的對應[HostName和IP]用的。當用戶在進行網絡連接時,首先查找該文件,尋找對應主機名(或域名)對應的IP地址。

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

vi /etc/hosts

70.70.70.120Master.Hadoop

80.80.80.184Slave1.Hadoop

80.80.80.183Slave2.Hadoop

80.80.80.182Slave3.Hadoop

80.80.80.180Slave4.Hadoop

從上圖中我們已經能用主機名進行ping通了,說明我們剛才添加的內容,在局域網內能進行DNS解析了,那么現在剩下的事兒就是在其余的Slave機器上進行相同的配置。然后進行測試。(備注:當設置SSH無密碼驗證后,可以"scp"進行復制,然后把原來的"hosts"文件執行覆蓋即可。)

2.3.所需軟件

JDK軟件

jdk-7u75-linux-x64

Hadoop軟件

hadoop-2.6.0.tar

2.4.創建用戶組和用戶 hadoop

創建hadoop用戶組:

groupadd hadoop

創建hadoop用戶:

useradd –g hadoop hadoop

為hadoop用戶添加密碼:

passwd hadoop

使得hadoop用戶獲得sudo權限。

vi /etc/sudoers

我們這里設置hadoop的密碼都是hadoop

編輯好,退出時,wq!(加嘆號)

2.5.上傳本地JDK和hadoop安裝包到主機

使用rz命令。

我們在hadoop根目錄中上傳,并且使用hadoop用戶。

[hadoop@Master ~]$ rz

3.SSH無密碼驗證配置

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

3.1.安裝和啟動SSH協議

rpm –qa | grep openssh

rpm –qa | grep rsync

通過以上命令,我們主機上沒有安裝rsync(遠程數據同步工具)

安裝SSH協議(這個已經安裝,我們機器不需要再次安裝)!!!

yum install ssh???????????????????????????????????????? #(這個已經安裝,我們機器不需要再次安裝)

安裝rsync(rsync是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件)

yum install rsync

service sshd restart???????????????????????????????? #重啟服務

確保所有的服務器都安裝,上面命令執行完畢,各臺機器之間可以通過密碼驗證相互登。

3.2.配置Master無密碼登錄所有Salve

3.2.1.SSH無密碼原理

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

3.2.2.Master機器上生成密碼對

在Master節點上執行以下命令:

[hadoop@master ~]$ ssh-keygen -t rsa -P ''

這條命令是生成其無密碼密鑰對,詢問其保存路徑時直接回車采用默認路徑。生成的密鑰對:id_rsa和id_rsa.pub,默認存儲在"/home/hadoop/.ssh"目錄下。

查看"/home/hadoop/"下是否有".ssh"文件夾,且".ssh"文件下是否有兩個剛生產的無密碼密鑰對。

[hadoop@Slave4~]$ ll -a | grep .ssh

接著在Master節點上做如下配置,把id_rsa.pub追加到授權的key里面去。

[hadoop@Slave4.ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

在驗證前,需要做兩件事兒。第一件事兒是修改文件"authorized_keys"權限(權限的設置非常重要,因為不安全的設置安全設置,會讓你不能使用RSA功能),另一件事兒是用root用戶設置"/etc/ssh/sshd_config"的內容。使其無密碼登錄有效。

1)修改文件"authorized_keys"

[hadoop@Slave4 .ssh]$ chmod 600~/.ssh/authorized_keys

備注:如果不進行設置,在驗證時,扔提示你輸入密碼,在這里花費了將近半天時間來查找原因。

2)設置SSH配置

用root用戶登錄服務器修改SSH配置文件"/etc/ssh/sshd_config"的下列內容。

[root@Slave4 .ssh]# vi /etc/ssh/sshd_config

下面是文件修改好的。

設置完之后記得重啟SSH服務,才能使剛才設置有效。

[root@Slave4 .ssh]# service sshd restart

退出root登錄,使用hadoop普通用戶驗證是否成功。

[hadoop@Slave4 .ssh]$ ssh localhost

從上圖中得知無密碼登錄本級已經設置完畢,接下來的事兒是把公鑰復制所有的Slave機器上。

再往下做之前,把其他四臺的公鑰私鑰全部產生,參照以上步驟。

使用下面的命令格式進行復制公鑰:

scp ~/.ssh/id_rsa.pub遠程用戶名@遠程服務器IP:~/

例如:

[hadoop@Master .ssh]$ scp? ? ~/.ssh/id_rsa.pub hadoop@80.80.80.183:~/

3.2.3.把Master.Hadoop上的公鑰復制到Slave1.Hadoop上

[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.184:~/

依據以上方式,分別復制到其他四太主機的根目錄下。

[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.183:~/

[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.182~/

[hadoop@Master .ssh]$ scp ~/.ssh/id_rsa.pubhadoop@80.80.80.180~/

從其他四臺slave.adoop上可以用ls –a查看確實存在id_rsa.pub這個文件。

3.2.4.在其他四太Slave.Hadoop上,將公鑰添加到授權密鑰文件authorized_keys內。

[hadoop@Slave1 ~]$ cat ~/id_rsa.pub>> ~/.ssh/authorized_keys

…slave2….

…slave3…

依次,等等。

最后記得把"/home/hadoop/"目錄下的"id_rsa.pub"文件刪除掉。

[hadoop@Slave3 .ssh]$ rm ~/id_rsa.pub

3.3.配置所有Slave無密碼登錄Master

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

思想:分別在其他四臺Slave上使用

[hadoop@Slave1 ~]$ scp ~/.ssh/id_rsa.pubhadoop@70.70.70.120:~/

將Slave上的公鑰發到Master上去,然后每發送一個。在Master上,使用

[hadoop@Master ~]$ cat ~/id_rsa.pub>> ~/.ssh/authorized_keys

將Slave的公鑰添加到Master的授權文件中。然后把傳過來的公鑰文件刪除。。。。

到此為止。我們驗證一下ssh可以Master和Slave之間的無密碼相互登陸(因為我們是在hadoop用戶設置的,所以我們必須是切換到hadoop用戶下去驗證)。

等等。

4.Java環境安裝

????? 所有的機器上都要安裝JDK,現在就先在Master服務器安裝,然后其他服務器按照步驟重復進行即可。安裝JDK以及配置環境變量,需要以"root"的身份進行。

4.1.安裝JDK

首先用root身份登錄"Master.Hadoop"后在"/usr"下創建"java"文件夾,再把用“rz命令”上傳到"/home/hadoop/"下的"jdk-7u75-linux-x64.rpm"復制到"/usr/java"文件夾中。

[root@Masterusr]# mkdir /usr/java

[root@Masterusr]# cp /home/hadoop/jdk-7u75-linux-x64.rpm /usr/java

演示截圖:

創建java文件夾,cp??? JDK包

確認查看已經復制過來:

接著進入"/usr/java"目錄通過下面命令使其JDK獲得可執行權限,并安裝JDK。

[root@Masterjava]# chmod 755 jdk-7u75-linux-x64.rpm

[root@Masterjava]# rpm -i jdk-7u75-linux-x64.rpm

演示截圖:

按照上面幾步進行操作,最后點擊"Enter"鍵開始安裝,安裝完會提示你按"Enter"鍵退出,然后查看"/usr/java"下面會發現多了一個名為"jdk1.7.0_75"文件夾,說明我們的JDK安裝結束,刪除"jdk-7u75-linux-x64.rpm"文件,進入下一個"配置環境變量"環節。

4.2.配置環境變量

編輯"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"內容。

4.2.1.編輯"/etc/profile"文件

[root@Masterjava]# vi /etc/profile

3.2.2.添加Java環境變量

在"/etc/profile"文件的尾部添加以下內容:

# set java environment

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

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

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

4.2.3.使配置生效

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

[root@Master java]# source /etc/profile

[root@Slave1 java]# echo $JAVA_HOME

驗證截圖

從上圖中得知,我們以確定JDK已經安裝成功。

4.3.安裝剩余機器

這時用普通用戶hadoop通過下面命令格式把"Master.Hadoop"文件夾"/home/hadoop/"的JDK復制到其他Slave的"/home/hadoop/"下面,剩下的事兒就是在其余的Slave服務器上按照上圖的步驟安裝JDK。

scp /home/hadoop/jdk-6u31-linux-i586.bin遠程用戶名@遠程服務器IP:~/

或者

scp ~/jdk-6u31-linux-i586.bin遠程用戶名@遠程服務器IP:~/

備注:"~"代表當前用戶的主目錄,當前用戶為hadoop,所以"~"代表"/home/hadoop"。

例如:把JDK從"Master.Hadoop"復制到"Slave1.Hadoop"的命令如下。

[hadoop@Master ~]$ scp~/jdk-7u75-linux-x64.rpmhadoop@80.80.80.184:~/


然后查看"Slave1.Hadoop"的"/home/hadoop"查看是否已經復制成功了。

從上圖中得知,我們已經成功復制了,現在我們就用最高權限用戶root進行安裝了。其他的與這個一樣。

5.Hadoop集群安裝

所有的機器上都要安裝hadoop,現在就先在Master服務器安裝,然后其他服務器按照步驟重復進行即可。安裝和配置hadoop需要以"root"的身份進行。

5.1.安裝hadoop

首先用root用戶登錄"Master.Hadoop"機器,查看我們之前用FTP上傳至"/home/Hadoop"上傳的"hadoop-2.6.0.tar.gz "。

接著把"hadoop-1.0.0.tar.gz"復制到"/usr"目錄下面。

[root@Masterhadoop]# cp /home/hadoop/hadoop-2.6.0.tar.gz /usr

下一步進入"/usr"目錄下,用下面命令把"hadoop-2.6.0.tar.gz"進行解壓,并將其命名為"hadoop",把該文件夾的讀權限分配給普通用戶hadoop,然后刪除"hadoop-2.6.0.tar.gz"安裝包。

cd /usr?????????????? #進入"/usr"目錄

tar -zxvfhadoop-2.6.0.tar.gz??????????????? #解壓"hadoop-2.6.0.tar.gz "安裝包

[root@Masterusr]# mv hadoop-2.6.0 hadoop??????? #將"hadoop-2.6.0"文件夾重命名"hadoop"

首先在/usr/hadoop創建“tmp”文件夾

mkdir /usr/hadoop/tmp

然后

[root@Master]# chown -R hadoop:hadoop hadoop ?? #將文件夾"hadoop"讀權限分配給hadoop用戶

[root@Masterusr]# rm -rf hadoop-2.6.0.tar.gz??? #刪除"hadoop-2.6.0.tar.gz "安裝包


》》配置"/etc/profile"

vim /etc/profile

#set hadoop path

exportHADOOP_HOME=/usr/hadoop

export PATH=$PATH:$HADOOP_HOME/bin

配置后的文件如下:

》》重啟”/etc/profile”

source/etc/profile

5.2.配置hadoop文件

這里要涉及到的配置文件有7個:

usr/hadoop-2.6.0/etc/hadoop/hadoop-env.sh

usr/hadoop-2.6.0/etc/hadoop/yarn-env.sh

usr/hadoop-2.6.0/etc/hadoop/slaves

usr/hadoop-2.6.0/etc/hadoop/core-site.xml

usr/hadoop-2.6.0/etc/hadoop/hdfs-site.xml

usr/hadoop-2.6.0/etc/hadoop/mapred-site.xml

usr/hadoop-2.6.0/etc/hadoop/yarn-site.xml

目錄開始切換到/usr/hadoop-2.6.0/etc/hadoop(hadoop安裝目錄)

5.2.1.配置文件1:hadoop-env.sh

修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.7.0_75)

命令:[hadoop@masterhadoop]$ vi hadoop-env.sh

保存退出!

5.2.2.配置文件2:yarn-env.sh

修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.7.0_75)

命令:[hadoop@masterhadoop]$ vi yarn-env.sh

5.2.3.配置文件3:slaves(這個文件里面保存所有slave節點)

[hadoop@master hadoop]$ vi slaves

寫入以下內容:

slave1

slave2

slave3

slave4


5.2.4.配置文件4:core-site.xml

命令:[hadoop@master hadoop]$ vi core-site.xml

5.2.5.配置文件5:hdfs-site.xml

命令:[hadoop@master hadoop]$ vi hdfs-site.xml

5.2.6.配置文件6:mapred-site.xml

[hadoop@master hadoop]$ vi mapred-site.xml

5.2.7.配置文件7:yarn-site.xml

命令:[hadoop@master hadoop]$ vi yarn-site.xml

5.3.master上配置好的hadoop2.6.0目錄scp復制到其他slave節點(為節約時間)

上面配置完畢,我們基本上完成了90%了剩下就是復制。我們可以把整個hadoop復制過去:使用如下命令:

sudo scp -r /usr/hadoop hadoop@slave1:~/

這里記得先復制到home/hadoop目錄下面,然后在轉移到/usr下面。

后面我們會經常遇到問題,經常修改配置文件,所以修改完一個配置文件后,其他節點都需要修改,這里附上腳本操作方便:

6.啟動驗證

在root用戶下關閉所有主機的防火墻:

sudo service iptables stop

6.1.啟動hadoop

格式化namenode:

hdfs namenode –format

或則使用下面命令:

hadoop namenode format

啟動hdfs:

start-dfs.sh

啟動yarn:

start-yarn.sh

2.2.結果進程展示:

master有如下進程:

Slave上有以下進程:

瀏覽器進入8080端口:ip為服務器ip



此時hadoop集群已全部配置完成!!!@老男孩 (wzhj361@gmail.com)


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容