第七章:完全分散式部署Hadoop
第七章:完全分散式部署Hadoop
(作者:Memories)
分析:
1)準備3台客戶機(關閉防火牆、靜態ip、主機名稱)
2)安裝jdk
3)配置環境變數
4)安裝hadoop
5)配置環境變數
6)配置集群
7)單點啟動
8)配置ssh
9)群起並測試集群
一、虛擬機準備
前面文章以介紹過。
二、編寫集群分髮腳本xsync
1)scp:secure copy 安全拷貝
(1)scp定義:
scp可以實現伺服器與伺服器之間的數據拷貝。
(2)案例實操
(a)將hadoop101中/opt/module目錄下的軟體拷貝到hadoop102上。
[memories@hadoop101~]$scp -r /opt/module/* root@hadoop102:/opt/module
(b)將hadoop101伺服器上的/opt/module目錄下的軟體拷貝到hadoop103上。
[atguigu@hadoop103 opt]$ scp -r root@hadoop101:/opt/module/* hadoop103:/opt/module
(c)在hadoop103上操作將hadoop101中/opt/module目錄下的軟體拷貝到hadoop104上。
[atguigu@hadoop103 opt]$ scp -r hadoop101:/opt/module/* hadoop104:/opt/module
2) rsync
rsync遠程同步工具,主要用於備份和鏡像。具有速度快、避免複製相同內容和支持符號鏈接的優點。
rsync和scp區別:用rsync做文件的複製要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都複製過去。
(1)查看rsync使用說明
man rsync | more
(2)基本語法
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
命令 命令參數 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑
(3)選項說明
選項
功能
-r
遞歸
-v
顯示複製過程
-l
拷貝符號連接
(4)案例實操
把本機/opt/software目錄同步到hadoop102伺服器的root用戶下的/opt/目錄
[memories@hadoop101 opt]$ rsync -rvl /opt/software/* hadoop102:/opt/software/
3)腳本需求分析:循環複製文件到所有節點的相同目錄下。
(1)原始拷貝:
rsync -rvl /opt/module root@hadoop103:/opt/
(2)期望腳本:
xsync要同步的文件名稱
(3)在/home/memories/bin這個目錄下存放的腳本,memories用戶可以在系統任何地方直接執行。
4)腳本實現:
(1)在/home/memories目錄下創建bin目錄,並在bin目錄下xsync創建文件,文件內容如下:
[memories@hadoop102 ~]$ mkdir bin
[memories@hadoop102 ~]$ cd bin/
[memories@hadoop102 bin]$ touch xsync
[memories@hadoop102 bin]$ vi 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=102; host<104; host++)); do
echo --------------------- hadoop$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
(2)修改腳本 xsync 具有執行許可權
[memories@hadoop102 bin]$ chmod 777 xsync
(3)調用腳本形式:xsync 文件名稱
[memories@hadoop102 bin]$ xsync /home/memories/bin
三、集群配置
1)集群部署規劃
hadoop101
hadoop102
hadoop103
HDFS
NameNode
DataNode
DataNode
SecondaryNameNode
DataNode
YARN
NodeManager
ResourceManager
NodeManager
NodeManager
2)配置集群
(1)核心配置文件
core-site.xml(目錄:/opt/module/hadoop-2.7.2/etc/hadoop)
[memories@hadoop101 hadoop]$ vi core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
(2)hdfs配置文件
hadoop-env.sh
[memories@hadoop101 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
hdfs-site.xml
[memories@hadoop101 hadoop]$ vi hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
(3)yarn配置文件
yarn-env.sh
[memories@hadoop101 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
yarn-site.xml
[memories@hadoop101 hadoop]$ vi 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>hadoop102</value>
</property>
(4)mapreduce配置文件
mapred-env.sh
[memories@hadoop101 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
mapred-site.xml
[memories@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml
[memories@hadoop101 hadoop]$ vi mapred-site.xml
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3)在集群上分發配置好的Hadoop配置文件
[memories@hadoop101 hadoop]$ xsync /opt/module/
4)查看文件分發情況
[memories@hadoop102 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
- 在hadoop102、hadoop103上的/etc/profile文件中配置jdk以及hadoop信息,配置的信息與hadoop101一致。
四、集群單點啟動
0)如果集群是第一次啟動,需要格式化NameNode
[memories@hadoop101 hadoop-2.7.2]$ hadoop namenode -format
1)在hadoop101上啟動NameNode
[memories@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[memories@hadoop101 hadoop-2.7.2]$ jps
3461 NameNode
3531 Jps
也可在網頁中打開查看,在瀏覽器中輸入hadoop101:50070
- 在hadoop101、hadoop102以及hadoop103上分別啟動DataNode
[memories@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[memories@hadoop101 hadoop-2.7.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[memories@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[memories@hadoop102 hadoop-2.7.2]$ jps
3190 DataNode
3279 Jps
[memories@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[memories@hadoop103 hadoop-2.7.2]$ jps
3237 Jps
3163 DataNode
啟動完datanode進程後,網頁上之前為0的選項才會有一些值
當啟動完hadoop102和103主機的datanode之後,我們再刷新網頁就可以看到磁碟空間變成了3倍,活節點是3個。
五、SSH無密登錄配置
1)配置ssh
(1)基本語法
ssh 另一台電腦的ip地址
(2)ssh連接時出現Host key verification failed的解決方法
[memories@hadoop101 opt] $ ssh 192.168.1.102
The authenticity of host 192.168.1.102 (192.168.1.102) cant 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)生成公鑰和私鑰:
[memories@hadoop102 .ssh]$ ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
(2)將公鑰拷貝到要免密登錄的目標機器上
[memories@hadoop101 .ssh]$ ssh-copy-id hadoop102
[memories@hadoop101 .ssh]$ ssh-copy-id hadoop103
3).ssh文件夾下(~/.ssh)的文件功能解釋
(1)known_hosts :記錄ssh訪問過計算機的公鑰(public key)
(2)id_rsa :生成的私鑰
(3)id_rsa.pub :生成的公鑰
(4)authorized_keys :存放授權過的無密登錄伺服器公鑰
六、集群測試
1)配置slaves
/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[memories@hadoop101 hadoop]$ vi slaves
hadoop101
hadoop102
hadoop103
2)啟動集群
(0)如果集群是第一次啟動,需要格式化NameNode
[memories@hadoop101 hadoop-2.7.2]$ hdfs namenode -format
(1)啟動HDFS:
[memories@hadoop101 hadoop-2.7.2]$ start-dfs.sh
[memories@hadoop102 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[memories@hadoop102 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps
[memories@hadoop103 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
(2)啟動yarn
[memories@hadoop102 hadoop-2.7.2]$ start-yarn.sh
注意:NameNode和ResourceManger如果不是同一台機器,不能在NameNode上啟動 yarn,應該在ResouceManager所在的機器上啟動yarn。
(3)web端查看SecondaryNameNode
(a)瀏覽器中輸入:http://hadoop103:50090/status.html
(b)查看SecondaryNameNode信息。
3)集群基本測試
(1)上傳文件到集群
上傳小文件
[memories@hadoop101 hadoop-2.7.2]$ hadoop fs -mkdir -p /user/memories/input
[memories@hadoop101 hadoop-2.7.2]$ hadoop fs -put wcinput/wc.input /user/memories/input
上傳大文件
[memories@hadoop101 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/memories/input
(2)上傳文件後查看文件存放在什麼位置
查看HDFS文件存儲路徑
[memories@hadoop101 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
查看HDFS在磁碟存儲文件內容
[memories@hadoop101 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce
atguigu
atguigu
(3)拼接
-rw-rw-r--. 1 atguigu atguigu 134217728 5月 23 16:01 blk_1073741836
-rw-rw-r--. 1 atguigu atguigu 1048583 5月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 atguigu atguigu 63439959 5月 23 16:01 blk_1073741837
-rw-rw-r--. 1 atguigu atguigu 495635 5月 23 16:01 blk_1073741837_1013.meta
[memories@hadoop101 subdir0]$ cat blk_1073741836>>tmp.file
[memories@hadoop101 subdir0]$ cat blk_1073741837>>tmp.file
[memories@hadoop101 subdir0]$ tar -zxvf tmp.file
(4)下載
[memories@hadoop101 hadoop-2.7.2]$ bin/hadoop fs -get /user/memories/input/hadoop-2.7.2.tar.gz ./
4)性能測試集群
(1)寫海量數據
(2)讀海量數據
七、集群啟動/停止方式
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)時間伺服器配置(必須root用戶)
(1)檢查ntp是否安裝
[root@hadoop101 桌面]# 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配置文件
[root@hadoop101 桌面]# 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 http://0.centos.pool.ntp.org iburst
server http://1.centos.pool.ntp.org iburst
server http://2.centos.pool.ntp.org iburst
server http://3.centos.pool.ntp.org iburst為
#server http://0.centos.pool.ntp.org iburst
#server http://1.centos.pool.ntp.org iburst
#server http://2.centos.pool.ntp.org iburst
#server http://3.centos.pool.ntp.org iburst
c)添加3(添加默認的一個內部時鐘數據,使用它為區域網用戶提供服務。)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改/etc/sysconfig/ntpd 文件
[root@hadoop101 桌面]# vim /etc/sysconfig/ntpd
增加內容如下(讓硬體時間與系統時間一起同步)
SYNC_HWCLOCK=yes
(4)重新啟動ntpd
[root@hadoop101 桌面]# service ntpd status
ntpd 已停
[root@hadoop101 桌面]# service ntpd start
正在啟動 ntpd: [確定]
(5)執行:
[root@hadoop101 桌面]# chkconfig ntpd on
2)其他機器配置(必須root用戶)
(1)在其他機器配置10分鐘與時間伺服器同步一次
[root@hadoop102 hadoop-2.7.2]# crontab -e
編寫腳本
*/10 * * * * /usr/sbin/ntpdate hadoop101
(2)修改任意機器時間
[root@hadoop102 hadoop]# date -s "2017-9-11 11:11:11"
(3)十分鐘後查看機器是否與時間伺服器同步
[root@hadoop102 hadoop]# date
推薦閱讀:
※如何用spark做矩陣計算?
※手工搭建 Spark 數據分析平台
※【Spark大數據】1.Spark2.0環境搭建
※Spark性能優化指南——基礎篇
※Scala簡明語法