Hadoop基礎(五十四):基於centos搭建Hadoop3.x完全分散式執行模式
0 簡介
分析:
1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱)
2)安裝JDK
3)配置環境變數
4)安裝Hadoop
5)配置環境變數
6)配置叢集
7)單點啟動
8)配置ssh
9)群起並測試叢集
1 虛擬機器準備
2編寫叢集分發指令碼xsync
1)scp(secure copy)安全拷貝
(1)scp定義:
scp可以實現伺服器與伺服器之間的資料拷貝。(fromserver1toserver2)
(2)基本語法
scp-r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 遞迴 要拷貝的檔案路徑/名稱 目的使用者@主機:目的路徑
(3)案例實操
(a)在hadoop101上,將hadoop101中/opt/module目錄下的軟體拷貝到hadoop102上。
[atguigu@hadoop101/]$ scp -r /opt/module root@hadoop102:/opt/module
(b)在hadoop103上,將hadoop101伺服器上的/opt/module目錄下的軟體拷貝到hadoop103上。
[atguigu@hadoop103opt]$sudo scp -r atguigu@hadoop101:/opt/module root@hadoop103:/opt/module
(c)在hadoop103上操作將hadoop101中/opt/module
[atguigu@hadoop103opt]$ scp -r atguigu@hadoop101:/opt/module root@hadoop104:/opt/module
注意:拷貝過來的/opt/module目錄,別忘了在hadoop102、hadoop103、hadoop104上修改所有檔案的,所有者和所有者組。sudo chownatguigu:atguigu -R /opt/module
(d)將hadoop101中/etc/profile檔案拷貝到hadoop102的/etc/profile上。
[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile
(e)將hadoop101中/etc/profile檔案拷貝到hadoop103的/etc/profile上。
[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile
(f)將hadoop101中/etc/profile檔案拷貝到hadoop104的/etc/profile上。
[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@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)案例實操
把hadoop101機器上的/opt/software目錄同步到hadoop102伺服器的root使用者下的/opt/目錄
[atguigu@hadoop101 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/atguigu/bin這個目錄下存放的指令碼,atguigu使用者可以在系統任何地方直接執行。
(3)指令碼實現
(a)在/home/atguigu目錄下建立xsync檔案
cd /home/atguigu
vim xsync
在該檔案中編寫如下程式碼
#!/bin/bash #1. 判斷引數個數 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍歷叢集所有機器 for host in hadoop102 hadoop103 hadoop104 do echo ==================== $host ==================== #3. 遍歷所有目錄,挨個傳送 for file in $@ do #4 判斷檔案是否存在 if [ -e $file ] then #5. 獲取父目錄 pdir=$(cd -P $(dirname $file); pwd) #6. 獲取當前檔案的名稱 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done
(b)修改指令碼 xsync 具有執行許可權
chmod +xxsync
(c)將指令碼移動到/bin中,以便全域性呼叫
sudo mv xsync /bin/
(d)測試指令碼
sudo xsync /bin/xsync
3SSH無密登入配置
1)配置ssh
(1)基本語法
ssh另一臺電腦的ip地址
(2)ssh連線時出現Host key verification failed的解決方法
ssh hadoop103
出現:
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)?
(3)解決方案如下:直接輸入yes
2)無金鑰配置
(1)免密登入原理
(2)生成公鑰和私鑰:
ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個檔案id_rsa(私鑰)、id_rsa.pub(公鑰)
(3)將公鑰拷貝到要免密登入的目標機器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
注意:
還需要在hadoop102上採用root賬號,配置一下無密登入到hadoop102、hadoop103、hadoop104;
還需要在hadoop103上採用atguigu賬號配置一下無密登入到hadoop102、hadoop103、hadoop104伺服器上。
3).ssh資料夾下(~/.ssh)的檔案功能解釋
known_hosts |
記錄ssh訪問過計算機的公鑰(public key) |
id_rsa |
生成的私鑰 |
id_rsa.pub |
生成的公鑰 |
authorized_keys |
存放授權過的無密登入伺服器公鑰 |
4叢集配置
1)叢集部署規劃
注意:NameNode和SecondaryNameNode不要安裝在同一臺伺服器
注意:ResourceManager也很消耗記憶體,不要和NameNode、SecondaryNameNode配置在同一臺機器上。
hadoop102 |
hadoop103 |
hadoop104 |
|
HDFS |
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
2)配置叢集
(1)核心配置檔案
配置core-site.xml
cd $HADOOP_HOME/etc/hadoop
vimcore-site.xml
檔案內容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <property> <name>hadoop.proxyuser.atguigu.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.atguigu.groups</name> <value>*</value> </property> <property> <name>hadoop.http.staticuser.user</name> <value>atguigu</value> </property> </configuration>
(2)HDFS配置檔案
配置hdfs-site.xml
vimhdfs-site.xml
檔案內容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property> </configuration>
(3)YARN配置檔案
配置yarn-site.xml
vimyarn-site.xml
檔案內容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
(4)MapReduce配置檔案
配置mapred-site.xml
vimmapred-site.xml
檔案內容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
3)在叢集上分發配置好的Hadoop配置檔案
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
4)檢視檔案分發情況
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
5群起叢集
1)配置workers
vim/opt/module/hadoop-3.1.3/etc/hadoop/workers
在該檔案中增加如下內容:
hadoop102
hadoop103
hadoop104
注意:該檔案中新增的內容結尾不允許有空格,檔案中不允許有空行。
同步所有節點配置檔案
xsync /opt/module/hadoop-3.1.3/etc
2)啟動叢集
(1)如果叢集是第一次啟動,需要在hadoop102節點格式化NameNode(注意格式化之前,一定要先停止上次啟動的所有namenode和datanode程序,然後再刪除data和log資料)
hdfs namenode -format
(2)啟動HDFS
sbin/start-dfs.sh
(3)在配置了ResourceManager的節點(hadoop103)啟動YARN
sbin/start-yarn.sh
(4)Web端檢視SecondaryNameNode
(a)瀏覽器中輸入:http://hadoop104:9868/status.html
(b)檢視SecondaryNameNode資訊
3)叢集基本測試
(1)上傳檔案到叢集
上傳小檔案
hadoop fs -mkdir -p /user/atguigu/input
hadoop fs -put $HADOOP_HOME/wcinput/wc.input /user/atguigu/input
上傳大檔案
hadoop fs -put /opt/software/hadoop-3.1.3.tar.gz /
(2)上傳檔案後檢視檔案存放在什麼位置
(a)檢視HDFS檔案儲存路徑
[atguigu@hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
(b)檢視HDFS在磁碟儲存檔案內容
(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@hadoop102 subdir0]$ cat blk_1073741836>>tmp.jar [atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.jar [atguigu@hadoop102 subdir0]$ tar -zxvf tmp.jar
(4)下載
[atguigu@hadoop102 hadoop-3.1.3]$ bin/hadoop fs -get
/hadoop-3.1.3.tar.gz ./
(5)執行wordcount程式
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/atguigu/input /user/atguigu/output
7配置歷史伺服器
為了檢視程式的歷史執行情況,需要配置一下歷史伺服器。具體配置步驟如下:
1)配置mapred-site.xml
vi mapred-site.xml
在該檔案裡面增加如下配置。
<!-- 歷史伺服器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value> </property> <!-- 歷史伺服器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value> </property>
2)分發配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3)在hadoop102啟動歷史伺服器
mapred --daemon starthistoryserver
4)檢視歷史伺服器是否啟動
jps
5)檢視JobHistory
http://hadoop102:19888/jobhistory
4.2.8配置日誌的聚集
日誌聚集概念:應用執行完成以後,將程式執行日誌資訊上傳到HDFS系統上。
日誌聚集功能好處:可以方便的檢視到程式執行詳情,方便開發除錯。
注意:開啟日誌聚集功能,需要重新啟動NodeManager 、ResourceManager和HistoryManager。
開啟日誌聚集功能具體步驟如下:
1)配置yarn-site.xml
vimyarn-site.xml
在該檔案裡面增加如下配置。
<property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log.server.url</name> <value>http://${yarn.timeline-service.webapp.address}/applicationhistory/logs</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <property> <name>yarn.timeline-service.enabled</name> <value>true</value> </property> <property> <name>yarn.timeline-service.hostname</name> <value>${yarn.resourcemanager.hostname}</value> </property> <property> <name>yarn.timeline-service.http-cross-origin.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.system-metrics-publisher.enabled</name> <value>true</value> </property>
2)分發配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
3)關閉NodeManager 、ResourceManager和HistoryServer
在103上執行:stop-yarn.sh
在102上執行: mapred --daemonstop historyserver
4)啟動NodeManager 、ResourceManage、Timelineserver和HistoryServer
在103上執行:start-yarn.sh
在103上執行:yarn --daemon start timelineserver
在102上執行:mapred --daemonstart historyserver
5)刪除HDFS上已經存在的輸出檔案
hdfs dfs -rm -R /user/atguigu/output
6)執行WordCount程式
hadoop jar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/atguigu/input /user/atguigu/output
7)檢視日誌,
http://hadoop102:19888/jobhistory
圖 Job History
圖 job執行情況
圖檢視日誌