完全分散式部署 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