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上。
[[email protected] /]# scp -r /opt/module/ [email protected]:/opt [[email protected] /]# scp -r /opt/software/ [email protected]:/opt [[email protected] /]# scp -r /opt/module/ [email protected]
(2)將192.168.1.102伺服器上的檔案拷貝到當前使用者下。
[[email protected] opt]# scp [email protected]
(3)實現兩臺遠端機器之間的檔案傳輸(hadoop103主機檔案拷貝到hadoop104主機上)
[[email protected] test]$ scp [email protected]:/opt/test/haha [email protected]oop104:/opt/test/
(4)SSH無密碼登入
1)配置ssh
(1)基本語法
ssh 另一臺電腦的ip地址
(2)ssh連線時出現Host key verification failed的解決方法
問題再現 [[email protected] 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 [email protected]$host:$pdir 命令 命令引數 要拷貝的檔案路徑/名稱 目的使用者@主機:目的路徑
3)案例實操
把本機/opt/tmp目錄同步到hadoop103伺服器的root使用者下的/opt/tmp目錄
rsync –rvl /opt/tmp/* [email protected]:/op t/tmp
(6)編寫叢集分發指令碼xsync
1)需求分析:迴圈複製檔案到所有節點的相同目錄下。
(1)原始拷貝:
rsync –rvl /opt/module [email protected]:/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 [email protected]$host:$pdir echo --------------- hadoop$host ---------------- rsync -rvl $pdir/$fname [email protected]$host:$pdir done
(2)修改指令碼 xsync 具有執行許可權
[[email protected] 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---------- [email protected] for((host=101; host<=108; host++)); do echo ----------hadoop$host--------- ssh hadoop$host [email protected] done
(2)修改指令碼 xcall 具有執行許可權
[[email protected] bin]# chmod 777 xcall
(3)呼叫指令碼形式: xcall 操作命令
[[email protected] ~]# 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
[[email protected] hadoop-2.7.2]# bin/hdfs namenode –format
(1)啟動HDFS
[[email protected] hadoop-2.7.2]$ sbin/start-dfs.sh 啟動之後驗證 [[email protected] hadoop-2.7.2]$ jps 3690 DataNode 9550 Jps 3583 NameNode [[email protected] hadoop-2.7.2]$ jps 9095 Jps 3435 DataNode [[email protected] 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
上傳大檔案
[[email protected] hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/atguigu/input
(2)上傳檔案後檢視檔案存放在什麼位置
檔案儲存路徑
[[email protected] subdir0]$ pwd /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
檢視檔案內容
[[email protected] 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 [[email protected] subdir0]$ cat blk_1073741836>>tmp.file [[email protected] subdir0]$ cat blk_1073741837>>tmp.file [[email protected] subdir0]$ tar -zxvf tmp.file
(4)下載
[[email protected] 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。