1. 程式人生 > >Hadoop執行模式之完全分散式部署Hadoop

Hadoop執行模式之完全分散式部署Hadoop

Hadoop執行模式之完全分散式部署Hadoop

1 完全分散式部署Hadoop

分析:
    1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱)
    2)安裝jdk
    3)配置環境變數
    4)安裝hadoop
    5)配置環境變數
    6)安裝ssh
    7)配置叢集
    8)啟動測試叢集

1.1 虛擬機器準備
詳見之前章節。

1.2 主機名設定
詳見之前章節。

1.3 scp
1)scp可以實現伺服器與伺服器之間的資料拷貝。
2)案例實操
(1)將hadoop101中/opt/module檔案拷貝到hadoop102上。

scp -r /opt/module/  [email protected]:/opt

(2)將192.168.25.102伺服器上的檔案拷貝到當前使用者下。

scp  [email protected]:/etc/profile  /opt/tmp/

(3)實現兩臺遠端機器之間的檔案傳輸(hadoop103主機檔案拷貝到hadoop104主機上)

scp [email protected]:/opt/test/haha [email protected]:/opt/test/

1.4 SSH無密碼登入
1)配置ssh
(1)基本語法

    ssh 另一臺電腦的ip地址
    ssh hadoop101

2)無金鑰配置
(1)進入到我的家目錄

    cd  ~/.ssh

(2)生成公鑰和私鑰:

ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個檔案id_rsa(私鑰)、id_rsa.pub(公鑰)

(3)將公鑰拷貝到要免密登入的目標機器上

ssh-copy-id hadoop103
ssh-copy-id hadoop104

免密登入原理
這裡寫圖片描述

3).ssh資料夾下的檔案功能解釋
(1)~/.ssh/known_hosts :記錄ssh訪問過計算機的公鑰(public key)
(2)id_rsa :生成的私鑰
(3)id_rsa.pub :生成的公鑰
(4)authorized_keys :存放授權過得無祕登入伺服器公鑰

1.5 rsync
rsync遠端同步工具,主要用於備份和映象。具有速度快、避免複製相同內容和支援符號連結的優點。
rsync和scp區別:用rsync做檔案的複製要比scp的速度快,rsync只對差異檔案做更新。scp是把所有檔案都複製過去。
(1)檢視rsync使用說明

man rsync | more

(2)基本語法

rsync  -rvl  $pdir/$fname   [email protected]$host:$pdir
命令   命令引數   要拷貝的檔案路徑/名稱   目的使用者@主機:目的路徑
        選項
        -r 遞迴
        -v 顯示覆制過程
        -l 拷貝符號連線

(3)案例實操
把本機/opt/tmp目錄同步到hadoop103伺服器的root使用者下的/opt/tmp目錄

rsync -rvl /opt/tmp/*  [email protected]:/opt/tmp

1.6 編寫叢集分發指令碼xsync
1)需求分析:迴圈複製檔案到所有節點的相同目錄下。
(1)原始拷貝:

        rsync  -rvl     /opt/module  [email protected]:/opt/

(2)期望指令碼:
xsync 要同步的檔名稱
(3)在/usr/local/bin這個目錄下存放的指令碼,可以在系統任何地方直接執行。
2)案例實操:
(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 [email protected]$host:$pdir
        echo --------------- hadoop$host ----------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

(2)修改指令碼 xsync 具有執行許可權

[[email protected] bin]# chmod 777 xsync

(3)呼叫指令碼形式:xsync 檔名稱

1.7 編寫分發指令碼xcall
1)需求分析:在所有主機上同時執行相同的命令
xcall +命令
2)具體實現
(1)在/usr/local/bin目錄下建立xcall檔案

#!/bin/bash
pcount=$#
if((pcount==0));then
        echo no args;
        exit;
fi

echo -------------localhost----------
[email protected]
for((host=101; host<=108; host++)); do
        echo ----------hadoop$host---------
        ssh hadoop$host [email protected]
done

(2)修改指令碼 xcall 具有執行許可權

[[email protected] bin]# chmod a+x xcall

(3)呼叫指令碼形式: xcall 操作命令

[[email protected] ~]# xcall ls /opt/tmp/profile

1.8 配置叢集
1)叢集部署規劃
這裡寫圖片描述

2)配置檔案
(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.4/data/tmp</value>
    </property>

(2)Hdfs
hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8

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>

slaves

hadoop102
hadoop103
hadoop104

(3)yarn
yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8

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>

(4)mapreduce
mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8

mapred-site.xml

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

3)在叢集上分發以上所有檔案

xsync /opt/module/hadoop-2.7.4

4)檢視檔案分發情況

xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/slaves

1.9 叢集啟動及測試

1)啟動叢集
(0)如果叢集是第一次啟動,需要格式化namenode

[[email protected] hadoop-2.7.2]# bin/hdfs namenode -format

(1)啟動HDFS:

[[email protected] hadoop-2.7.2]# sbin/start-dfs.sh
[[email protected] hadoop-2.7.2]# jps
4166 NameNode
4482 Jps
4263 DataNode

[[email protected] hadoop-2.7.2]# jps
3218 DataNode
3288 Jps

[[email protected] hadoop-2.7.2]# jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps

(2)啟動yarn

sbin/start-yarn.sh
注意:Namenode和ResourceManger如果不是同一臺機器,不能在NameNode上啟動 yarn,應該在ResouceManager所在的機器上啟動yarn。

2)叢集基本測試
(1)上傳檔案到叢集

    建立檔案件   
hadoop fs -mkdir -p /user/zhihua/input
    上傳小檔案
hadoop fs -put test/ /user/zhihua/input
    上傳大檔案
hadoop fs -put /opt/software/hadoop-2.7.4-with-centos-6.7.tar.gz /user/zhihua/input

(2)上傳檔案後檢視檔案存放在什麼位置
檔案儲存路徑

/opt/module/hadoop-2.7.4/data/tmp/dfs/data/current/BP-515947719-192.168.25.102-1534487195790/current/finalized/subdir0/subdir0

檢視檔案內容

[[email protected] subdir0]$ cat blk_1073741825
hello

這裡寫圖片描述
(3)拼接

[[email protected] subdir0]$ cat blk_1073741826 >> tmp.file
[[email protected] subdir0]$ cat blk_1073741827 >> tmp.file
[[email protected] subdir0]$ tar -zxvf tmp.file

這裡寫圖片描述
(4)下載

hadoop fs -get /user/zhihua/input/hadoop-2.7.4-with-centos-6.7.tar.gz

3)叢集效能測試
寫海量資料
讀海量資料

1.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

1.11 叢集時間同步
時間同步的方式:找一個機器,作為時間伺服器,所有的機器與這臺叢集時間進行定時的同步,比如,每隔十分鐘,同步一次時間。
配置時間同步實操:
1)時間伺服器配置(必須root使用者)
(1)檢查ntp是否安裝

        rpm -qa | grep ntp

(2)修改ntp配置檔案

vi /etc/ntp.conf
a)修改1
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap為
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
        b)修改2
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst為
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
        c)新增3
server 127.127.1.0
fudge 127.127.1.0 stratum 10

(3)修改/etc/sysconfig/ntpd 檔案

vim /etc/sysconfig/ntpd
增加內容如下
SYNC_HWCLOCK=yes

(4)重新啟動ntpd

service ntpd status
service ntpd start

(5)執行:

chkconfig ntpd on

2)其他機器配置(必須root使用者)
(1)在其他機器配置10分鐘與時間伺服器同步一次

crontab -e
編寫指令碼
*/10 * * * *   /usr/sbin/ntpdate hadoop102

(2)修改任意機器時間

    date -s "2017-11-11 11:11:11"

(3)十分鐘後檢視機器是否與時間伺服器同步

date

1.12 配置叢集常見問題
1)防火牆沒關閉、或者沒有啟動yarn
2)主機名稱配置錯誤
/etc/hosts
3)ip地址配置錯誤
4)ssh沒有配置好
root
為了使用xsync指令碼
atguigu
為了叢集啟動
5)root使用者和atguigu兩個使用者啟動叢集不統一
6)配置檔案修改不細心
7)未編譯原始碼
8)datanode不被namenode識別問題
9)不識別主機名稱
解決辦法:
(1)在/etc/hosts檔案中新增192.168.25.102 hadoop102
(2)主機名稱不要起hadoop hadoop000等特殊名稱
10)datanode和namenode程序同時只能工作一個。
datanode和namenode程序同時只能有一個工作問題分析.pptx
11)執行命令不生效,貼上word中命令時,遇到-和長–沒區分開。導致命令失效
解決辦法:儘量不要貼上word中程式碼。
12)jps發現程序已經沒有,但是重新啟動叢集,提示程序已經開啟。原因是在linux的根目錄下/tmp目錄中存在啟動的程序臨時檔案,將叢集相關程序刪除掉,再重新啟動叢集。