Hadoop系列005-Hadoop運行模式(下)
本人微信公眾號,歡迎掃碼關注!

Hadoop運行模式(下)
2.3、完全分布式部署Hadoop
-
1)分析:
- 1)準備3臺客戶機(關閉防火墻、靜態ip、主機名稱)
- 2)安裝jdk
- 3)配置環境變量
- 4)安裝hadoop
- 5)配置環境變量
- 6)安裝ssh
- 7)配置集群
- 8)啟動測試集群
-
2)操作
-
(1) 虛擬機準備
- 克隆三臺干凈的虛擬機
-
(2) 主機名設置
-
(3) scp
-
1)scp可以實現服務器與服務器之間的數據拷貝。
-
2)案例實操
-
(1)將hadoop101中/opt/module和/opt/software文件拷貝到hadoop102、hadoop103和hadoop104上。
[root@hadoop101 /]# scp -r /opt/module/ root@hadoop102:/opt [root@hadoop101 /]# scp -r /opt/software/ root@hadoop102:/opt [root@hadoop101 /]# scp -r /opt/module/ root@hadoop103:/opt [root@hadoop101 /]# scp -r /opt/software/ root@hadoop103:/opt [root@hadoop101 /]# scp -r /opt/module/ root@hadoop104:/opt [root@hadoop101 /]# scp -r /opt/software/ root@hadoop105:/opt -
(2)將192.168.1.102服務器上的文件拷貝到當前用戶下。
[root@hadoop101 opt]# scp root@hadoop102:/etc/profile /opt/tmp/ -
(3)實現兩臺遠程機器之間的文件傳輸(hadoop103主機文件拷貝到hadoop104主機上)
[atguigu@hadoop102 test]$ scp atguigu@hadoop103:/opt/test/haha atguigu@hadoop104:/opt/test/
-
-
-
(4)SSH無密碼登錄
-
1)配置ssh
-
(1)基本語法
ssh 另一臺電腦的ip地址 -
(2)ssh連接時出現Host key verification failed的解決方法
問題再現 [root@hadoop2 opt]# ssh 192.168.1.103 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. 解決辦法 輸入yes,然后輸入目標機器的密碼即可
-
-
2)無密鑰配置
-
(1)進入到我的home目錄
cd ~/.ssh -
(2)生成公鑰和私鑰:
ssh-keygen -t rsa 然后敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰) -
(3)將公鑰拷貝到要免密登錄的目標機器上
ssh-copy-id 目標機器主機名或IP地址
-
-
3).ssh文件夾下的文件功能解釋
- (1)~/.ssh/known_hosts :記錄ssh訪問過計算機的公鑰(public key)
- (2)id_rsa :生成的私鑰
- (3)id_rsa.pub :生成的公鑰
- (4)authorized_keys :存放授權過得無秘登錄服務器公鑰
-
-
(5)rsync
rsync遠程同步工具,主要用于備份和鏡像。具有速度快、避免復制相同內容和支持符號鏈接的優點。
-
1)查看rsync使用說明
man rsync | more -
2)基本語法
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir 命令 命令參數 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑 -
3)案例實操
把本機/opt/tmp目錄同步到hadoop103服務器的root用戶下的/opt/tmp目錄
rsync –rvl /opt/tmp/* root@hadoop103:/op t/tmp
-
-
(6)編寫集群分發腳本xsync
-
1)需求分析:循環復制文件到所有節點的相同目錄下。
-
(1)原始拷貝:
rsync –rvl /opt/module root@hadoop103:/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 $user@hadoop$host:$pdir echo --------------- hadoop$host ---------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done -
(2)修改腳本 xsync 具有執行權限
[root@hadoop102 bin]# chmod 777 xsync -
(3)調用腳本形式:xsync 文件名稱
-
-
-
(7)編寫分發腳本xcall
-
1)需求分析:在所有主機上同時執行相同的命令
xcall +命令 -
2)具體實現
-
(1)在/usr/local/bin目錄下創建xcall文件
#!/bin/bash pcount=$# if((pcount==0));then echo no args; exit; fi echo -------------localhost---------- $@ for((host=101; host<=108; host++)); do echo ----------hadoop$host--------- ssh hadoop$host $@ done -
(2)修改腳本 xcall 具有執行權限
[root@hadoop102 bin]# chmod 777 xcall -
(3)調用腳本形式: xcall 操作命令
[root@hadoop102 ~]# xcall rm -rf /opt/tmp/profile
-
-
-
(8) 基于偽分布式部署集群
-
1)集群部署規劃
規劃原則:盡量將耗內存的任務分散開來
Hadoop102 Hadoop103 Hadoop104 HDFS NameNode SecondaryNameNode DataNode DataNode DataNode YARN NodeManager ResourceManager NodeManager -
2)配置文件
-
(1)core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</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
export JAVA_HOME=/opt/module/jdk1.7.0_79 -
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.7.0_79 -
yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <!-- 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.7.0_79 -
mapred-site.xml
<configuration> <!-- 指定mr運行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
-
-
-
3)在集群上分發以上所有文件
cd /opt/module/hadoop-2.7.2/etc/hadoop xsync /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml xsync /opt/module/hadoop-2.7.2/etc/hadoop/slaves -
4)查看文件分發情況
xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/slaves
-
-
(9)集群啟動及測試
-
1)啟動集群
-
(0)如果集群是第一次啟動,需要格式化namenode
[root@hadoop2 hadoop-2.7.2]# bin/hdfs namenode –format -
(1)啟動HDFS
[intflag@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh 啟動之后驗證 [intflag@hadoop102 hadoop-2.7.2]$ jps 3690 DataNode 9550 Jps 3583 NameNode [intflag@hadoop103 hadoop-2.7.2]$ jps 9095 Jps 3435 DataNode [intflag@hadoop104 hadoop-2.7.2]$ jps 3432 DataNode 9371 Jps 3518 SecondaryNameNode -
(2)啟動yarn
注意:Namenode和ResourceManger如果不是同一臺機器,不能在NameNode上啟動 yarn,應該在ResouceManager所在的機器上啟動yarn。
sbin/start-yarn.sh
-
-
2)集群基本測試
-
(1)上傳文件到集群
-
上傳小文件
bin/hdfs dfs –mkdir –p /user/atguigu/tmp/conf bin/hdfs dfs –put etc/hadoop/*-site.xml /user/atguigu/tmp/conf -
上傳大文件
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/atguigu/input
-
-
(2)上傳文件后查看文件存放在什么位置
-
文件存儲路徑
[atguigu@hadoop103 subdir0]$ pwd /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0 -
查看文件內容
[atguigu@hadoop108 subdir0]$ cat blk_1073741825 hadoop 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 [atguigu@hadoop107 subdir0]$ cat blk_1073741836>>tmp.file [atguigu@hadoop107 subdir0]$ cat blk_1073741837>>tmp.file [atguigu@hadoop107 subdir0]$ tar -zxvf tmp.file -
(4)下載
[atguigu@hadoop107 hadoop-2.7.2]$ bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz
-
-
3)集群性能測試
- 寫海量數據
- 讀海量數據
-
-
(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
-
-
-
(11)配置集群常見問題
-
1)防火墻沒關閉、或者沒有啟動yarn
INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032 -
2)主機名稱配置錯誤
-
3)ip地址配置錯誤
-
4)ssh沒有配置好
-
5)root用戶和atguigu兩個用戶啟動集群不統一
-
6)配置文件修改不細心
-
7)未編譯源碼
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032 -
8)datanode不被namenode識別問題
Namenode在format初始化的時候會形成兩個標識,blockPoolId和clusterId。新的datanode加入時,會獲取這兩個標識作為自己工作目錄中的標識。 一旦namenode重新format后,namenode的身份標識已變,而datanode如果依然持有原來的id,就不會被namenode識別。 解決辦法,刪除datanode節點中的數據后,再次重新格式化namenode。
-
-

浙公網安備 33010602011771號