1. 程式人生 > >完全分散式部署 Hadoop

完全分散式部署 Hadoop

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

1 虛擬機器準備

複製3份備份的hadoop101,然後將其加入到vmware中
如果之前沒新增使用者則可以

#切換到root
adduser joker
passwd joker

3 scp

scp 可以實現伺服器與伺服器之間的資料拷貝。
1) 將 hadoop101 中/opt/module 和/opt/software 檔案拷貝到 hadoop102、 hadoop103 和 hadoop104 上。

scp -r /opt/module/ root@hadoop102:/opt
scp -r /opt/module/ root@hadoop103:/opt
scp -r /opt/module/ root@hadoop104:/opt
#下面的命令要在root使用者下完成
chown joker:joker -R software/ module/

2) 將 hadoop101 伺服器上的/etc/profile 檔案拷貝到 hadoop102 、 hadoop103 和 hadoop104 上。

scp /etc/profile root@hadoop102:/etc/profile
scp /etc/profile root@hadoop103
:/etc/profile scp /etc/profile root@hadoop104:/etc/profile source /etc/profile

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

scp root@hadoop103:/opt/test/haha root@hadoop104:/opt/test/

4 SSH 無密碼登入

1 配置 ssh:
1) 基本語法
ssh 另一臺電腦的 ip 地址
2) ssh 連線時出現 Host key verification failed 的解決方法

ssh 192.168.25.103
#輸入密碼即可登入
exit #退出登入

The authenticity of host ‘192.168.1.103 (192.168.1.103)’ can’t be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.
3) 解決方案如下:直接輸入 yes

2 無金鑰配置:
1)進入到我的 home 目錄

cd ~
ls -al
cd .ssh/
#如果無.ssh目錄則只要ssh遠端訪問一臺伺服器則可以生成了

2) 生成公鑰和私鑰:

ssh-keygen -t rsa

然後敲(三個回車),就會生成兩個檔案 id_rsa(私鑰)、id_rsa.pub(公鑰)
3)將公鑰拷貝到要免密登入的目標機器上

ssh-copy-id hadoop103
ssh-copy-id hadoop104
#最後也要給自己儲存一份
ssh-copy-id hadoop102

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

5 rsync

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

1 基本語法

rsync -rvl $pdir/$fname $user@hadoop$host:$pdir

命令 命令引數 要拷貝的檔案路徑/名稱 目的使用者@主機:目的路徑
選項
-r 遞迴
-v 顯示覆制過程
-l 拷貝符號連線
2 案例實操
把本機/opt/tmp 目錄同步到 hadoop103 伺服器的 root 使用者下的/opt/tmp 目錄

rsync -rvl /opt/tmp root@hadoop103:/opt/

6 編寫叢集分發指令碼 xsync

1 需求分析:迴圈複製檔案到所有節點的相同目錄下。
1)原始拷貝:
rsync -rvl /opt/module [email protected]:/opt/
2)期望指令碼:
xsync 要同步的檔名稱
3)在/usr/local/bin 這個目錄下存放的指令碼,可以在系統任何地方直接執行。
2 案例實操:
1)在/usr/local/bin 目錄下建立 xsync 檔案, 檔案內容如下:

cd /usr/local/bin
touch xsync
chmod 777 xsync 
chown joker:joker xsync 
vim 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

7 配置叢集

1 叢集部署規劃
這裡寫圖片描述

2 配置檔案
102:

cd /opt/module/hadoop-2.7.2/etc/hadoop/
vim core-site.xml
<configuration>
<!-- 指定 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>

echo $JAVA_HOME
vim hadoop-env.sh 
export JAVA_HOME=/opt/module/jdk1.8.0_151

vim hdfs-site.xml 
<!-- 指定 HDFS 副本的數量 -->
<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:50090</value>
</property>

vim slaves 
hadoop102
hadoop103
hadoop104

vim yarn-site.xml 
<!-- 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>

vim mapred-site.xml 
<!-- 指定 mr 執行在 yarn 上 -->
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>

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

cd /opt/module/hadoop-2.7.2/etc/
xsync hadoop/

4 檢視檔案分發情況
103,104:cat /opt/module/hadoop-2.7.2/etc/hadoop/slaves

8 叢集啟動及測試

1 先刪除克隆來的data/和log/

cd /opt/module/hadoop-2.7.2/
rm -rf data/ logs/

2 如果叢集是第一次啟動,需要格式化 namenode

#102上執行
bin/hdfs namenode -format

3 啟動 HDFS與啟動 yarn:

#102上執行
sbin/start-dfs.sh
#可以通過jps檢視是否正確啟動
#103上執行
sbin/start-yarn.sh

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

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

#102上執行
#上傳小檔案
hadoop fs -mkdir -p /user/joker/input
hadoop fs -put wcinput/wc.input /user/joker/input
#上傳大檔案
hadoop fs -put /opt/software/jdk-8u151-linux-x64.tar.gz /user/joker

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

#102上執行
#檔案儲存路徑
cd /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-688790930-192.168.25.102-1525647195991/current/finalized/subdir0/subdir0

#檢視檔案內容
[root@hadoop102 subdir0]# cat blk_1073741825
jokerda
hadoop
hadoop jokerda
spark hive hbase
zookeeper kalfka

#刪除大檔案
hadoop fs -rm -f /user/joker/jdk-8u151-linux-x64.tar.gz

ps:102上上傳了103,104也會產生同樣的副本檔案

9 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

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

[[email protected] 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64

2) 修改 ntp 配置檔案

[[email protected] 桌面]# vim /etc/ntp.conf
#修改內容如下
#修改 1
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 為
restrict 192.168.25.0 mask 255.255.255.0 nomodify notrap
#修改 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
#新增 3
server 127.127.1.0
fudge 127.127.1.0 stratum 10

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

[root@hadoop102 桌面]# vim /etc/sysconfig/ntpd
#增加內容如下
SYNC_HWCLOCK=yes

4) 重新啟動 ntpd

[[email protected] 桌面]# service ntpd status
ntpd 已停
[[email protected] 桌面]# service ntpd start
正在啟動 ntpd:                                            [確定]
[[email protected] 桌面]# service ntpd status
ntpd (pid  2997) 正在執行...

5)執行

chkconfig ntpd on

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

#103,104輸入如下內容
[root@hadoop103 hadoop]# crontab -e
#編寫指令碼
*/10 * * * * /usr/sbin/ntpdate hadoop102

2) 修改任意機器時間

[[email protected] hadoop]# date -s "2017-9-11 11:11:11"

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

[root@hadoop103 hadoop]# date