第八章:完全分佈式集羣配置
8.1 環境準備以及寫分發集羣腳本
8.1.1 虛擬機準備
主機 | 從機 | 從機 | |
---|---|---|---|
主機名 | hadoop104 | hadoop105 | hadoop106 |
hostname | hadoop104 | hadoop105 | hadoop106 |
IP地址 | 192.168.153.104 | 192.168.153.105 | 192.168.153.106 |
8.1.2 編寫集羣分發腳本xsync
- scp(secure copy)安全拷貝
(1)scp定義:
scp可以實現服務器與服務器之間的數據拷貝。(from server1 to server2)
(2)基本語法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 遞歸 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
(3)案例實操
(a)在hadoop104上,將hadoop104中/opt/module目錄下的軟件拷貝到hadoop105上。
[zpark@hadoop104 /]$ scp -r hadoop104:/opt/module hadoop105:/opt/module
(b)在hadoop106上,將hadoop104服務器上的/opt/module目錄下的軟件拷貝到hadoop106上。
[zpark@hadoop106 opt]$sudo scp -r hadoop104:/opt/module hadoop106:/opt/module
(c)在hadoop103上操作將hadoop104中/opt/module目錄下的軟件拷貝到hadoop104上。
[zpark@hadoop103 opt]$ scp -r zpark@hadoop104:/opt/module root@hadoop104:/opt/module
注意:拷貝過來的/opt/module目錄,別忘了在hadoop104、hadoop105、hadoop106上修改所有文件的,所有者和所有者組。
sudo chown zpark:zpark -R /opt/module
(d)將hadoop104中/etc/profile文件拷貝到hadoop102的/etc/profile上。
[zpark@hadoop104 ~]$ sudo scp hadoop104:/etc/profile
hadoop102:/etc/profile
(e)將hadoop104中/etc/profile文件拷貝到hadoop103的/etc/profile上。
[zpark@hadoop104 ~]$ sudo scp hadoop104:/etc/profile
hadoop103:/etc/profile
(f)將hadoop104中/etc/profile文件拷貝到hadoop104的/etc/profile上。
[zpark@hadoop104 ~]$ sudo scp hadoop104:/etc/profile
hadoop104:/etc/profile
注意:拷貝過來的配置文件別忘了source一下/etc/profile
2. rsync 遠程同步工具
rsync主要用於備份和鏡像。具有速度快、避免複製相同內容和支持符號鏈接的優點。
rsync和scp區別:用rsync做文件的複製要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都複製過去。
(1)基本語法
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 選項參數 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
選項參數說明
選項 | 功能 |
---|---|
-a | 歸檔拷貝 |
-v | 顯示覆制過程 |
(2)案例實操
(a)把hadoop104機器上的/opt/software目錄同步到hadoop102服務器的root用戶下的/opt/目錄
[zpark@hadoop104 opt]$ rsync -av /opt/software/
hadoop102:/opt/software
3. xsync集羣分發腳本
(1)需求:循環複製文件到所有節點的相同目錄下
(2)需求分析:
(a)rsync命令原始拷貝:
rsync -av /opt/module root@hadoop103:/opt/
(b)期望腳本:
xsync要同步的文件名稱
(c)說明:在/home/zpark/bin這個目錄下存放的腳本,zpark用戶可以在系統任何地方直接執行。
(3)腳本實現
(a)在根目錄下創建xsync目錄,並在bin目錄下xsync創建文件,文件內容如下:
[zpark@hadoop102 ~]$ 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=103; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
(b)修改腳本 xsync 具有執行權限
[zpark@hadoop102 ~]$ chmod +x xsync
(c)將xsync分發到hadoop105、hadoop106
(d)查看hadoop105、hadoop106
(e)把Hadoop3.1.2拷貝到hadoop105、hadoop106裏
[zhangyong@hadoop104 module]$ xsync hadoop-3.1.2/
(f)把 jdk1.8.0_181拷貝到hadoop105、hadoop106裏
[zhangyong@hadoop104 module]$ xsync jdk1.8.0_181/
(g)把配置文件拷貝到hadoop105、hadoop106裏
查看hadoop105,hadoop106是否配置好,如果好,證明上述配置正確,如果沒有請一步一步查看
8.2集羣配置
- 集羣部署規劃
hadoop104 | hadoop105 | hadoop106 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryName NodeDataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
- 配置集羣
(1)核心配置文件
配置core-site.xml
[zhangyong@hadoop104 hadoop]$ vi core-site.xml
在該文件中編寫如下配置
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop104:9000</value>
</property>
<!-- 指定Hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.2/data/tmp</value>
</property>
(2)HDFS配置文件
配置hadoop-env.sh
[zhangyong@hadoop104 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
配置hdfs-site.xml
[zhangyong@hadoop104 hadoop]$ vi hdfs-site.xml
在該文件中編寫如下配置
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop106:50090</value>
</property>
(3)YARN配置文件
配置yarn-env.sh
[zhangyong@hadoop104 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
配置yarn-site.xml
[zhangyong@hadoop104 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>hadoop105</value>
</property>
(4)MapReduce配置文件
配置mapred-env.sh
[zhangyong@hadoop104 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
配置mapred-site.xml
[zhangyong@hadoop104 hadoop]$ vi mapred-site.xml
在該文件中增加如下配置
<!-- 指定MR運行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3.在集羣上分發配置好的Hadoop配置文件
[zhangyong@hadoop104 hadoop]$ xsync etc/
4.查看文件分發情況
[zhangyong@hadoop103 hadoop]$ cat /opt/module/hadoop-3.1.2/etc/hadoop/core-site.xml
8.3 集羣單點啓動
(1)如果集羣是第一次啓動,需要格式化NameNode
[zhangyong@hadoop104 hadoop-3.1.2]$ hdfs namenode -format
(2)在hadoop102上啓動NameNode
[zhangyong@hadoop104 hadoop-3.1.2]$ hadoop-daemon.sh start namenode
[zhangyong@hadoop104 hadoop-3.1.2]$ jps
3461 NameNode
(3)在hadoop104、hadoop105以及hadoop106上分別啓動DataNode
[zhangyong@hadoop104 hadoop-3.1.2]$ hadoop-daemon.sh start datanode
[zhangyong@hadoop104 hadoop-3.1.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[zhangyong@hadoop105 hadoop-3.1.2]$ hadoop-daemon.sh start datanode
[zhangyong@hadoop105 hadoop-3.1.2]$ jps
3190 DataNode
3279 Jps
[zhangyong@hadoop106 hadoop-3.1.2]$ hadoop-daemon.sh start datanode
[zhangyong@hhadoop106 hadoop-3.1.2]$ jps
3237 Jps
3163 DataNode
http://hadoop104:9870/dfshealth.html#tab-datanode添加鏈接描述
訪問如下說明成功了
思考:每次都一個一個節點啓動,如果節點數增加到1000個怎麼辦?,下一章解答