搭建集群環境(CentOS7+Hadoop2.6.1+SSH)


        本篇介紹如何使用虛擬機搭建Hadoop集群,此例搭建1個master和2個slave,如要更多的slave,方法如此類推。

        現在已經有安裝了一台虛擬機,

1、查看虛擬機的虛擬網絡,設置為NAT模式:

編輯——>虛擬網絡編輯器

進入到虛擬網絡編輯器界面后,單擊VMnet8,

這里可以查看網關IP,默認是192.168.112.2,這個很重要,因為等下配置ifcfg-ens33文件時會用到。

2、自動獲取IP功能初始化

        VMWare需要用到自動獲取IP的服務,所以需要對其進行初始化。而初始化是使用橋接模式:

在VMWare右下角位置,右擊圖標——>設置:

確定之后,待機器執行完成,重復同樣的操作,不過要選擇NAT模式,這樣子,自動獲取IP服務的功能已經初始化。

3、配置ifcfg-ens33文件

        虛擬機上網的相關配置都在這個文件里面配置:

輸入指令:

vim /etc/sysconfig/network-scripts/ifcfg-ens33

        修改ifcfg-ens33文件需要root權限,可以在Linux輸入命令su,然后輸入密碼,再次進入ifcfg-ens33文件,上網的IP地址隨便設置,一般我們都會將網關IP的最后一位修改一下;網關IP就是第一步查看的那個網關IP;DNS1則是提供上網的服務地址,這個地址需要查看本機到底是連了那個網絡服務地址,步驟:本機打開cmd窗口,輸入ipconfig命令,下圖框框所示就是提供網絡服務的地址,

HWADDR則是網卡地址(不一定需要填寫編輯),查看網卡地址則需要退出ifcfg-ens33文件進行查看,退出操作:按esc結束編輯,按shift + :,輸入命令wq(wq表示保存修改並退出,q!表示不保存修改,直接退出),按enter,在Linux終端輸入命令ifconfig:

配置好之后,可以進行網絡測試

4、網絡測試

重啟網絡,輸入命令:

/etc/init.d/network restart

上圖所示,表示重啟網絡成功,但還是要測試一下是否可以上網:

輸入命令:

curl www.baidu.com

可以正常上網。那么這里,就將192.168.112.10作為本次集群的master節點。

5、創建slave節點

        創建slave節點比較簡單,首先關閉master節點(這個很重要),找到該節點的鏡像所在的文件夾位置,對其整個鏡像進行復制,粘貼。

復制、粘貼,修改文件夾名字:

新建兩個虛擬機,分別為slave1和slave2,首先分別輸入ifconfig查看是否顯示正常,

 

有時候並沒有像上圖那樣顯示,有可能少了ens33或者某些信息,輸入命令“/etc/init.d/network restart”時,出現“Failed to start LSB:Bring up/down networking”的報錯,這時要確定是否關閉NetWorkManager服務,因為剛創建的slave和master容易出現NetWorkManager服務沖突,這時master和slave都要關閉NetWorkManager服務,並禁止開機啟動該服務,輸入命令:

service NetworkManager stop
chkconfig NetworkManager off

執行命令后,重啟虛擬機,之后就可以正常使用。

6、關閉防火牆

        無論系統防火牆(指Linux),還是內核防火牆都要關閉。而且Master和slave都要操作。

(1)關閉系統防火牆

#查看防火牆狀態,輸入命令:

firewall-cmd --state

如果出現“not running”字樣,說明防火牆已經關閉,如果不是這樣的字樣,則以下操作:

#停止防火牆,臨時關閉,輸入命令:

systemctl stop firewalld.service

#禁止防火牆開機啟動,永久關閉,輸入命令:

systemctl disable firewall.service

(2)關閉內核防火牆

#清空系統防火牆,輸入命令:

iptable -F

如果沒有iptable命令,可以執行下面命令下載,如果有,就忽略:

yum -y install iptable -services

#保存防火牆配置

service iptables save

#臨時關閉內核防火牆,輸入命令:

setenforce 0

#永久關閉內核防火牆:

vim /etc/selinux/config

添加語句:SELINUX=disabled

7、配置slave1和slave2的ifcfg-ens33文件

        參考步驟3,slave1和slave2都需要配置,需要修改的地方有IPADDR,HWADDR(按實際情況修改),根據實際情況而修改,配置好,同樣的重啟一下網絡。

將slave1的IPADDR修改為:192.168.112.11

將slave2的IPADDR修改為:192.168.112.12

8、安裝JDK

        默認情況下,CentOS7會自動安裝了openjdk1.7和jdk1.8,但它們並不是我們想要的,所以要卸載它們。

#查看安裝的JDK版本,輸入命令:

rpm -q|grep jdk

#卸載原裝的Open JDK,輸入命令:

yum -y remove java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
yum -y remove java-1.8.0-openjdk-headless-1.7.0.65-3.b17.el7.x86_64

#安裝JDK

去到Oracle官網下載Linux版本的JDK,

將壓縮包導入到虛擬機里面,導入外部文件有好多種方法,這里介紹兩種:(1)沒有可視化界面的虛擬機,可以通過命令:rz,然后選擇相應的壓縮包文件,如下圖:

(2)有可視化界面的虛擬機,直接將壓縮包文件復制粘貼到虛擬機的桌面:如下圖

這里使用了第二種方法。

導入壓縮文件后,進入到桌面路徑下,將導入的壓縮包通過命令的方式,復制到指定的路徑下(目的是方便管理),

進入虛擬機桌面路徑,輸入命令:

cd ~
cd ./Desktop

#復制壓縮包到指定路徑

復制壓縮包到/usr/local/src文件夾下,在當前Desktop目錄下輸入命令:

cp jdk-8u201-linux-x64.tar.gz /usr/local/src/

#解壓壓縮包

進入/usr/local/src目錄下,輸入命令:cd /usr/local/src,解壓jdk壓縮包,輸入命令:

tar -zxvf jdk-8u201-linux-x64.tar.gz

#配置環境變量

解壓成功后,輸入命令:

vim ~/.bashrc

新增以下參數,並用“wq”進行保存退出:

export JAVA_HOME= /usr/local/src/jdk1.8.0_201 export JRE_HOME=$JAVA_HOME/jre

export CALSSPATH=.$CLASSPATH:$JAVA_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin

#生效配置文件

配置完,使文件生效,輸入命令:

source ~/.bashrc

#驗證

都配置好了就驗證一下,看一下jdk版本,輸入命令:

java -version

可以用同樣的操作方法,將slave1和slave2的JDK也安裝好。

9、配置SSH

#修改映射關系,輸入命令:

vim /etc/hosts/

新增以下內容(slave1和slave2也要加):

192.168.112.10 master

192.168.112.11 slave1

192.168.112.12 slave2

#修改主機名字,輸入命令:

vim /etc/sysconfig/network

新增以下內容:

NETWORKING=yes

HOSTNAME=master

#設置臨時主機名稱,輸入命令:

hostname master

輸入驗證命令:

hostname

在slave1和slave2也要設置,各自將“master”改為各自機器名

#永久設置hostname名稱為xxx(每個機器都要設置):

在master節點

vim /etc/hostname

添加內容

master

在slave1和slave2也要設置,各自將“master”改為各自機器名

#生成ssh密鑰

輸入命令(每個節點都要生成一次):

ssh-keygen -t rsa

在slave1和slave2分別查看id_rsa.pub文件,並將文件內容復制到mastaer中的authorized_keys里,輸入命令:

cd ~
cd .ssh
vim ./authorized_keys

復制完就是下面截圖這樣:

然后通過遠程的方式,將authorized_keys文件覆蓋到slave1和slave2中(或者用同樣的方式在slave1和slave2中操作),輸入命令:

scp authorized_keys root@slave1:~/.ssh/
scp authorized_keys root@slave2:~/.ssh/

#驗證

最后在每台機器上分別驗證,各自輸入命令:

ssh slave1
ssh slave2
ssh master

拿master做例子:

首先,輸入:ssh slave1,


此時機器已經轉到slave1節點上,使用hostname命令驗證,證明master可以訪問slave1,然后再輸入命令:ssh master,使得機器再次回到master節點,

 

執行成功,說明slave1節點可以訪問master;用同樣的方法測試master->slave2:

退出命令:exit

10、配置Hadoop2.6.1

#解壓

同步驟8一樣,復制hadoop壓縮包到/usr/local/src/目錄中,並解壓。

#配置相關文件(這里給出master節點的,slave1和slave2的通過將master的相關文件遠程復制過去)

進入hadoop路徑,所有操作都在該文件夾路徑下操作:

cd /usr/local/src/hadoop-2.6.1/etc/hadoop

(1)為hadoop配置jdk環境

vim hadoop-env.sh

添加內容:export JAVA_HOME=/usr/local/src/jdk1.8.0_201

(2)為分布式資源管理系統配置jdk環境

vim yarn-env.sh

添加內容:export JAVA_HOME=/usr/local/src/jdk1.8.0_201

(3)配置hadoop其他節點名稱

vim slaves

添加內容:

slave1

slave2

(4)配置Hadoop Core

 

vim core-site.xml

添加內容:

<configuration>
<!--指定namenode的地址-->
     <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
<!--用來指定使用hadoop時產生文件的存放目錄-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/src/hadoop-2.6.1/tmp</value>
    </property>
</configuration>

(5)配置Hadoop hdfs

vim hdfs-site.xml

添加內容:

<configuration>
<!--配置namenode.secondary地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>
<!--指定hdfs中namenode的存儲位置-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/src/hadoop-2.6.1/dfs/name</value>
    </property>
 <!--指定hdfs中datanode的存儲位置-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/src/hadoop-2.6.1/dfs/data</value>
    </property>
<!--指定hdfs保存數據的副本數量-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

(6)配置Hadoop mapper

注意:hadoop2.x沒有mapred-site.xml,所以先拷貝並創建這個文件,輸入命令:

cp mapred-site.xml.template mapred-site.xml

進入mapreduce配置文件:

vim mapred-site.xml

編輯文件:

<configuration>
<!--告訴hadoop以后MR(Map/Reduce)運行在YARN上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

(7)配置Hadoop yarn

vim yarn-site.xml

添加內容:

<configuration>
<!--nomenodeManager獲取數據的方式是shuffle-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
<!--配置shuffle,因為map和reduce之間有個shuffle過程,-->
        <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
<!--為每個rm-id設置主機:端口用來提交作業。-->
        <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8032</value>
    </property>
<!--調度器接口的地址。-->
        <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
<!--對每個rm-id設置NodeManager連接的host-->
        <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8035</value>
    </property>
<!--對每個rm-id指定管理命令的host-->
        <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
<!--對每個rm-id,指定RM webapp對應的host-->
        <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
<!-- 關閉虛擬內存檢查-->
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

#創建臨時目錄和文件目錄

mkdir /usr/local/src/hadoop-2.6.1/tmp

mkdir -p /usr/local/src/hadoop-2.6.1/dfs/name

mkdir -p /usr/local/src/hadoop-2.6.1/dfs/data

#配置Hadoop的環境變量(master、slave1和slave2都要配置)

vim ~/.bashrc

添加內容:

HADOOP_HOME=/usr/local/src/hadoop-2.6.1
export PATH=$PATH:$HADOOP_HOME/bin

#重新啟動資源文件

source ~/.bashrc

這個時候可以將上面再master節點下的hadoop文件下的配置文件copy到slave1和slave2里,輸入命令:

scp -f /usr/local/src/hadoop-2.6.1/ root@slave1:usr/local/src/
scp -f /usr/local/src/hadoop-2.6.1/ root@slave2:usr/local/src/

11、啟動集群

#初始化Namenode,只在master節點操作,

hadoop namenode -format

注意:該命令重復執行的話,有可能會出現異常。這時需要,刪除相關文件(這個后面再講),重新初始化hadoop

#啟動集群

在master節點操作

/usr/local/src/hadoop-2.6.1/sbin/start-all.sh

啟動后,分別在master、slave1和slave2節點上輸入命令:jps,查看節點:

(1)master節點

(2)slave1節點

(3)slave2節點

上面提及到:重復初始化hadoop會帶來了異常,導致某些node無法正常啟動,解決方法:

1、關閉集群,./sbin/stop-all.sh
2、刪除/usr/local/src/hadoop-2.6.1/dfs/name下面的文件[每個節點都操作]
3、刪除/usr/local/src/hadoop-2.6.1/dfs/data下面的文件[每個節點都操作]
4、刪除/usr/local/src/hadoop-2.6.1/tmp下面的文件[每個節點都操作]
5、刪除/usr/local/src/hadoop-2.6.1/logs下面的文件[每個節點都操作]
6、重新格式化hadoop,輸入命令:hadoop namenode -format [只在master節點操作]
7、啟動集群,./sbin/start-all.sh

#監控網頁

在瀏覽器輸入地址:192.168.112.10:8088(這個是master:8088)

#關閉集群

/usr/local/src/hadoop-2.6.1/sbin/stop-all.sh

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM