完全分佈式集羣模式(10)

完全分佈式:

1.準備三臺客戶機

    通過克隆複製三臺虛擬機hadoop102、hadoop103、hadoop104(從基本的虛擬機(未安裝或者安裝了jdk、hadoop都行)複製即可)

1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱

2)安裝jdk

3)配置環境變量

4)安裝hadoop

5)配置環境變量

6)安裝ssh

7)配置集羣

8)啓動測試集羣

配置上述一些環境可參考下面的博客:

https://blog.csdn.net/qq_41544550/article/details/102749750

https://blog.csdn.net/qq_41544550/article/details/102788370

2.安裝jdk,安裝hadoop

    安裝包可以從其它虛擬機複製,也可以通過SecureFX複製

    scp -r hadoop-2.7.2.tar.gz atguigu@hadoop103:/opt/software/

    scp -r jdk-8u144-linux-x64.tar.gz atguigu@hadoop103:/opt/software/

    scp -r hadoop-2.7.2.tar.gz atguigu@hadoop104:/opt/software/

    scp -r jdk-8u144-linux-x64.tar.gz atguigu@hadoop104:/opt/software/

    

    解壓安裝包

    tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

    tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/

3.配置JAVA_HOME和HADOOP_HOME(三臺機器都要root權限下執行:vim /etc/profile)

        #JAVA_HOME

        export JAVA_HOME=/opt/module/jdk1.8.0_144

        export PATH=$PATH:$JAVA_HOME/bin

        #HADOOP_HOME

        export HADOOP_HOME=/opt/module/hadoop-2.7.2

        export PATH=$PATH:$HADOOP_HOME/bin

        export PATH=$PATH:$HADOOP_HOME/sbin

4.使每個節點上的環境變量生效(三臺機器都要:source /etc/profile)

        source /etc/profile

配置SSH無密登錄(hadoop102和hadoop103都要生成)

[atguigu@hadoop102 hadoop-2.7.2]$ ssh hadoop103

atguigu@hadoop103's password:

Last login: Fri Aug 16 14:34:13 2019 from hadoop102

[atguigu@hadoop103 ~]$ hostname

hadoop103

無密鑰配置

hadoop102配置

(1)進入到我的home目錄cd  ~/.ssh 

(2)生成公鑰和私鑰: 

    [atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa 

        然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰) 

    [atguigu@hadoop102 .ssh]$ ll

    總用量 12

    -rw-------. 1 atguigu atguigu 1675 8月  16 15:30 id_rsa

    -rw-r--r--. 1 atguigu atguigu  399 8月  16 15:30 id_rsa.pub

    -rw-r--r--. 1 atguigu atguigu  814 8月  16 14:06 known_hosts

(3)將公鑰拷貝到要免密登錄的目標機器上 ssh-copy-id hadoop103、ssh-copy-id hadoop104

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103  輸入密碼

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104  輸入密碼

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102  輸入密碼

(4)在hadoop102下

    [atguigu@hadoop102 .ssh]$ ssh hadoop102

    known_hosts

hadoop103配置

因爲ResourceManager是配置在這臺機器的,如果是配置在hadoop102上則只需要在102生成

(1)進入到我的home目錄cd  ~/.ssh 

(2)生成公鑰和私鑰:

    [atguigu@hadoop103 .ssh]$ ssh-keygen -t rsa

        然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)

    [atguigu@hadoop103 .ssh]$ ll

    總用量 16

    -rw-------. 1 atguigu atguigu  399 8月  16 15:31 authorized_keys

    -rw-------. 1 atguigu atguigu 1675 8月  17 11:12 id_rsa

    -rw-r--r--. 1 atguigu atguigu  399 8月  17 11:12 id_rsa.pub

    -rw-r--r--. 1 atguigu atguigu 1221 8月  17 10:22 known_hosts

    

(3)將公鑰拷貝到要免密登錄的目標機器上 ssh-copy-id hadoop103、ssh-copy-id hadoop104

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103  輸入密碼

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104  輸入密碼

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102  輸入密碼

(4)在hadoop103下

    [atguigu@hadoop103 .ssh]$ ssh hadoop102

.ssh文件夾下的文件功能解釋

(1)~/.ssh/known_hosts :記錄ssh訪問過計算機的公鑰(public key)

(2)id_rsa :生成的私鑰 

(3)id_rsa.pub :生成的公鑰 

(4)authorized_keys :存放授權過得無祕登錄服務器公鑰

5.準備分發腳本 xsync:循環複製文件到所有節點的相同目錄下

1)在/usr/local/bin目錄下創建xsync文件

#!/bin/bash
#1 獲取輸入參數個數,如果沒有參數,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 獲取文件名稱
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 獲取上級目錄到絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 獲取當前用戶名稱
user=`whoami`

#5 循環
for((host=103; host<105; host++)); do
        #echo $pdir/$fname $user@hadoop$host:$pdir
        echo --------------- hadoop$host ----------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

2)修改腳本 xsync 具有執行權限  

    [root@hadoop102 bin]# chmod a+x xsync

3)測試

    配置SSH之後

5.配置xcall:在所有主機上同時執行相同的命令

    xcall+命令

    在/usr/local/bin目錄下創建xcall文件

#!/bin/bash
pcount=$#
if((pcount==0));then
        echo no args;
        exit;
fi
echo -------------localhost----------
$@
for((host=101; host<=108; host++)); do
        echo ----------hadoop$host---------
        ssh hadoop$host $@
done

賦予權限

    [root@hadoop102 bin]# chmod 777 xcall

    執行

    

6.明確集羣的配置

    

7.修改配置文件

    核心配置文件

    1)core-site.xml

 <!-- 指定HDFS中NameNode的地址 -->
 <property>
     <name>fs.defaultFS</name>
     <value>hdfs://hadoop102:9000</value>
 </property>
 <!-- 指定hadoop運行時產生文件的存儲目錄 -->
 <property>
     <name>hadoop.tmp.dir</name>
     <value>/opt/module/hadoop-2.7.2/data/tmp</value>
 </property>

    hdfs配置文件

    2)hadoop-env.sh

        25行 export JAVA_HOME=/opt/module/jdk1.8.0_144

    3)hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:50090</value>
    </property>
</configuration>

    yarn配置文件

    4)yarn-env.sh

      23行 export JAVA_HOME=/opt/module/jdk1.8.0_144

    5)yarn-site.xml

<configuration>
    <!-- reducer獲取數據的方式 -->
    <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</value>
    </property>
</configuration>

    MapReduce配置文件

    6)mapred-env.sh

<configuration>
    <!-- 指定mr運行在yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

    7)mapred-site.xml

<configuration>
    <!-- 指定mr運行在yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

    8)slaves

hadoop102
hadoop103
hadoop104

8.分發配置文件

    

9.集羣啓動並測試

    注意:先啓動HDFS,在啓動YARN;關閉時,先關閉YARN,再關閉HDFS

    1)啓動集羣

    ① 如果集羣是第一次啓動,則直接進行格式化;如果不是,則需要刪除data和logs文件夾在格式化啓動

    [atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format

  

    ② 啓動HDFS

    [atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh

    啓動NameNode、DataNode、SecondryNamenode

    

    

    ③ 啓動yarn    

    [atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

    注意:Namenode和ResourceManger如果不是同一臺機器,不能在NameNode上啓動 yarn,應該在ResouceManager所在的機器上啓動yarn。    

    web端查看: http://hadoop102:50070/dfshealth.html#tab-datanode

    2)測試集羣

    ① 在hadoop下創建wcinput/wc.input,在上傳到HDFS上

        [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -put wcinput/wc.input /user/atguigu/input

    ② 啓動測試用例

        [atguigu@hadoop102 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output

    

    小於128M的文件上傳之後只有一個block,大於128M的1.1倍的會有多個block

    [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/atguigu

  

    3)HDFS上文件存放位置

    /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-1935757359-192.168.137.102-1566011904417/current/finalized/subdir0/subdir0

    根據Block ID來識別block

    

    3)對HDFS上不同block數據進行拼接

    下面兩個block是hadoop的安裝包,對兩個block進行合併

    -rw-rw-r--. 1 atguigu atguigu 134217728 8月  17 14:33 blk_1073741857

    -rw-rw-r--. 1 atguigu atguigu   1048583 8月  17 14:33 blk_1073741857_1033.meta

    -rw-rw-r--. 1 atguigu atguigu  63439959 8月  17 14:33 blk_1073741858

    -rw-rw-r--. 1 atguigu atguigu    495635 8月  17 14:33 blk_1073741858_1034.meta

        [atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file

        [atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file                       

        [atguigu@hadoop102 subdir0]$ tar -zxvf tmp.file   ==> 解壓

    

    4)將HDFS上文件下載下來

    [atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz ./

10.Hadoop啓動停止方式

1)各個服務組件逐一啓動

    (1)分別啓動hdfs組件 hadoop-daemon.sh  start|stop  namenode|datanode|secondarynamenode 

    (2)啓動yarn yarn-daemon.sh  start|stop  resourcemanager|nodemanager 

2)各個模塊分開啓動(配置ssh是前提)常用 

    (1)整體啓動/停止hdfs start-dfs.sh stop-dfs.sh 

    (2)整體啓動/停止yarn start-yarn.sh stop-yarn.sh 

3)全部啓動(不建議使用)

    start-all.sh 

    stop-all.sh

11.集羣時間同步(必須在root用戶下)

    時間同步的方式:找一個機器,作爲時間服務器,所有的機器與這臺集羣時間進行定時的同步,比如,每隔十分鐘,同步一次時間。

    [root@hadoop102 atguigu]# rpm -qa|grep ntp

    

    [root@hadoop102 atguigu]# vim /etc/ntp.conf

    

    [root@hadoop102 atguigu]# vim /etc/sysconfig/ntpd

    

    重新啓動ntpd

    [root@hadoop102 atguigu]# service ntpd status

    ntpd 已停

    [root@hadoop102 atguigu]# service ntpd start

    正在啓動 ntpd:                                            [確定]

    [root@hadoop102 atguigu]# chkconfig ntpd on

 

    其它機器配置(root用戶下)

    [root@hadoop103 hadoop-2.7.2]# crontab -e

        編寫腳本(每兩分鐘同步一次)

        */2 * * * * /usr/sbin/ntpdate hadoop102

    [root@hadoop104 hadoop-2.7.2]# crontab -e

        編寫腳本(每兩分鐘同步一次)

        */2 * * * * /usr/sbin/ntpdate hadoop102

    修改任意機器時間

        [root@hadoop103 hadoop]# date -s "2017-9-11 11:11:11"

    兩分鐘之後使用date查看時間

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章