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

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

        如今已經有安裝了一臺虛擬機,node

一、查看虛擬機的虛擬網絡,設置爲NAT模式:linux

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

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

這裏能夠查看網關IP,默認是192.168.112.2,這個很重要,由於等下配置ifcfg-ens33文件時會用到。vim

二、自動獲取IP功能初始化瀏覽器

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

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

肯定以後,待機器執行完成,重複一樣的操做,不過要選擇NAT模式,這樣子,自動獲取IP服務的功能已經初始化。app

三、配置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:

配置好以後,能夠進行網絡測試

四、網絡測試

重啓網絡,輸入命令:

/etc/init.d/network restart

上圖所示,表示重啓網絡成功,但仍是要測試一下是否能夠上網:

輸入命令:

curl www.baidu.com

能夠正常上網。那麼這裏,就將192.168.112.10做爲本次集羣的master節點。

五、建立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

執行命令後,重啓虛擬機,以後就能夠正常使用。

六、關閉防火牆

        不管系統防火牆(指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

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

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

將slave1的IPADDR修改成:192.168.112.11

將slave2的IPADDR修改成:192.168.112.12

八、安裝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也安裝好。

九、配置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

十、配置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/

十一、啓動集羣

#初始化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沒法正常啓動,解決方法:

一、關閉集羣,./sbin/stop-all.sh
二、刪除/usr/local/src/hadoop-2.6.1/dfs/name下面的文件[每一個節點都操做]
三、刪除/usr/local/src/hadoop-2.6.1/dfs/data下面的文件[每一個節點都操做]
四、刪除/usr/local/src/hadoop-2.6.1/tmp下面的文件[每一個節點都操做]
五、刪除/usr/local/src/hadoop-2.6.1/logs下面的文件[每一個節點都操做]
六、從新格式化hadoop,輸入命令:hadoop namenode -format [只在master節點操做]
七、啓動集羣,./sbin/start-all.sh

#監控網頁

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

#關閉集羣

/usr/local/src/hadoop-2.6.1/sbin/stop-all.sh
相關文章
相關標籤/搜索