
目錄
三大模式:
完全分布式搭建:
分析:
撰寫集群分發腳本xsync:
1.scp(secure copy)安全拷貝:
2.rsync遠程同步工具:
3.xsync集群分發腳本:
SSH無密登錄配置:
配置SSH:
1.基本語法:
2.ssh連接時出現Host key verification failed的解決辦法:
無密鑰配置:
1.免密鑰登錄原理:
2.生成公鑰和私鑰:
3.將公鑰拷貝到需要免密碼登錄的目標機器:
集群配置:
集群部署規劃:
注意:
組態檔說明:
默認組態檔:
自定義組態檔:
配置集群:
核心組態檔:
HDFS組態檔:
YARN組態檔:
MapReduce組態檔:
在集群上分發配置好的Hadoop組態檔:
查看分發配置好的Hadoop檔案:
群起集群:
配置workers
啟動集群:
測驗集群:
上傳檔案到集群:
上傳檔案后查看檔案放在什么位置:
拼接:
下載:
執行:
集群啟動/停止方式總結:
重新格式化集群操作:
配置歷史服務器:
配置mapred-site.xml:
在hadoop02啟動歷史服務器:
配置日志的聚集:
配置yarn-site.xml
集群時間同步:
集群啟動/停止腳本:
問題解決:
查看三臺服務器Java行程:jpsall腳本
常用埠說明:
官網:Apache Hadoop

三大模式:
- 本地模式:資料存盤在Linux服務器本地
- 偽分布式:資料存盤在HDFS
- 完全分布式:資料存盤在HDFS/多型服務器作業
完全分布式搭建:
分析:
- 準備三臺客戶機(關閉防火墻、靜態IP、主機名稱)
- 安裝JDK
- 配置環境變數
- 配置集群
- 單點啟動
- 配置SSH
- 群起并測驗集群
撰寫集群分發腳本xsync:
1.scp(secure copy)安全拷貝:
scp定義:
scp可以實作服務器和服務器之間惡的資料拷貝(from server1 to server2)
scp基本語法:
scp -r $pdir/$fname $user@host:$pdir/$fname
命令 遞回 要拷貝的檔案路徑/名稱 目的用戶@主機:目的路徑/名稱
scp -r jdk1.8.0_212/ root@192.168.10.102:/opt/module/

scp -r root@192.168.10.101:/opt/module/hadoop-3.1.3 ./
scp -r root@hadoop02:/opt/module/* root@hadoop04:/opt/module/

2.rsync遠程同步工具:
- rsync主要用于備份和鏡像,速度快、避免賦值相同內容和支持符號連接
- rsync和scp主要區別:用rsync做檔案的復制要比scp的速度快,rsync只對差異檔案做更新,scp是把所有檔案都復制過去,
基本語法:
rsync -av $pdir/$fname $user@host:$pdir/$fname
命令 選項引數 要拷貝的檔案路徑/名稱 目的用戶@主機:目的路徑/名稱
| 選項 | 功能 |
| -a | 遞回拷貝 |
| -v | 顯示復制程序 |
3.xsync集群分發腳本:
- 回圈復制檔案到所有節點的相同目錄下
- 腳本命令:
xsunc 要同步的檔案名
- 腳本要在任何路徑下都可以使用(腳本放在宣告了全域變數的路徑)

進入/root/bin目錄:
在/root/bin目錄下創建腳本

腳本實作:
#!/bin/bash
#1. 判斷引數個數
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍歷集群所有機器
for host in hadoop02 hadoop03 hadoop04
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
賦予腳本可執行權限:
chmod 777 xsync

分發腳本檔案:
xsync bin/

分發組態檔:(同步環境變數)
xsync /etc/profile.d/my_env.sh:
sudo ./bin/xsync /etc/profile.d/my_env.sh

source /etc/profile:重繪資源
SSH無密登錄配置:
配置SSH:
1.基本語法:
ssh 另外一臺電腦的ip地址
2.ssh連接時出現Host key verification failed的解決辦法:
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)?
直接輸入yes
無密鑰配置:
1.免密鑰登錄原理:

2.生成公鑰和私鑰:
進入root家目錄:cd /root
查看所有檔案(包括隱藏檔案):ll -a

進入cd .ssh目錄

ssh-keygen -t rsa
然后敲(三個回車),就會生成兩個檔案id rsa(私鑰)、id rsa.pub(公鑰)


3.將公鑰拷貝到需要免密碼登錄的目標機器:
ssh-copy-id hadoop02
ssh-copy-id hadoop03
ssh-copy-id hadoop04
注意:使用root賬戶(不同的賬戶)需要重新配置免密碼登錄

配置完成后,執行xsync命令時,不需要再次輸入密碼:

集群配置:
集群部署規劃:
注意:
- NameNode和SecondaryNode不要安裝在一臺服務器,這兩個占用記憶體資源較大,
- ResourceManager也很消耗記憶體,不要和NameNode和SecondaryNode配置在同一臺機器上,
| Hadoop02 | Hadoop03 | Hadoop04 | |
| HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
| YARN | NodeManager | ResourceManager、NodeManager | NodeManager |
組態檔說明:
Hadoop組態檔分為兩大類:默認組態檔和自定義組態檔,只有用戶想修改某一默認配置值時,才需要修改自定義組態檔,更改回應的屬性,
默認組態檔:
| 檔案名 | 檔案存放在Hadoop的jar包中位置 |
| 【core-default.xml】 | hadoop-common-3.1.3.jar/core-default.xml |
| 【hdfs-default.xml】 | hadoop-hdfs-3.1.3.jar/hdfs-defalut.xml |
| 【yarn-default,xml】 | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
| 【mapred-default.xml】 | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
自定義組態檔:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四個組態檔存放在$HADOOP_HOME/etc/hadoop這個路徑上,用戶可以根據專案需求重新進行修改配置,
配置集群:
核心組態檔:
配置core-site.xml
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop02:8020</value>
</property>
<!--指定Hadoop資料的存盤目錄-->
<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>
HDFS組態檔:
配置hdfs-site.xml
vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--nn web端訪問地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop02:9870</value>
</property>
<!--2nn web端訪問地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop04:9868</value>
</property>
</configuration>
YARN組態檔:
配置yarn-site.xml
vim yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定MR走shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
<!--環境變數的繼承(3.1.3的Bug后續版本中可以不用進行配置)-->
<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>
MapReduce組態檔:
配置Mapred-site.xml
vim mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定MapReduce程式運行在Yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 歷史服務器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop02:10020</value>
</property>
<!-- 歷史服務器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop02:19888</value>
</property>
</configuration>
在集群上分發配置好的Hadoop組態檔:
/opt/module/hadoop-3.1.3/etc:進入hadoop組態檔目錄
xsync hadoop/:分發檔案

查看分發配置好的Hadoop檔案:
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
群起集群:
配置workers
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
注意:在撰寫配置這個組態檔時,不能有空格,或者空行!!!
hadoop02
hadoop03
hadoop04

cd /opt/module/hadoop-3.1.3/etc/hadoop
xsync workers:分發組態檔,同步所有節點的組態檔
啟動集群:
如果集群是第一次啟動,需要在hadoop02節點格式化NameNode(注意:格式化NameNode,會產生新的集群id,導致NameNode和DataNode的集群id不一致,集群找不到以往資料,如果集群在運行程序中報錯,需要重新格式化NameNode的話,一定要先停止nameNode和dataNode行程,并且要洗掉所有機器的data和logs目錄,然后再進行格式化)
/opt/module/hadoop-3.1.3:進入hadoop目錄
hdfs namenode -format:格式化操作

格式化完成后會多出data、logs目錄:

/opt/module/hadoop-3.1.3/sbin

sbin/star-dfs.sh:啟動HDFS
問題解決:
啟動出現以下問題
[root@localhost sbin]# start-all.sh
Starting namenodes on [hadoop]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
2018-07-16 05:45:04,628 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.
vim /etc/profile:進入組態檔
加入以下內容:
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
source /etc/profile:重繪組態檔

jps:查看運行



程式啟動后,通過web瀏覽器訪問:
http://192.168.10.101:9870/dfshealth.html#tab-overview

注意:
如果web瀏覽器不能訪問頁面,注意以下操作:
- 防火墻是否打開,埠號是否開發
- 主機地址是否配置正確
在配置了ResourceManager的節點(hadoop103)啟動YARN
sbin/start-yarn.sh

問題解決:
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
出現以上報錯資訊需要到 sbin 目錄下 更改 start-yarn.sh 和 stop-yarn.sh 資訊,在兩個組態檔的第一行添加:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
最后再輸入命令 /sbin/start-yarn.sh 啟動 yarn
使用web瀏覽器訪問:http://192.168.10.102:8088/cluster

hadoop fs -mkdir /wcinput:創建目錄

測驗集群:
上傳檔案到集群:
hadoop fs -mkdir /wcinput(Hadoop目錄):創建一個檔案目錄
hadoop fs -put wcinput/demo.txt(檔案) /wcinput(Hadoop目錄):上傳檔案到Hadoop
上傳檔案后查看檔案放在什么位置:
1.查看HDFS檔案儲存位置:
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-433336804-192.168.10.101-1628733575726/current/finalized/subdir0/subdir0
2.使用cat命令可以查看檔案內容
拼接:
cat 檔案名 >> 映射檔案.jar
tar -zxvf 檔案名.jar
下載:
/opt/module/hadoop-3.1.3:進入hadoop主目錄
bin/hadoop fs -get 檔案名 存放路徑
執行:
/opt/module/hadoop-3.1.3:進入hadoop主目錄
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput
集群啟動/停止方式總結:
jps:查看當前hadoop行程
cd /opt/module/hadoop-3.1.3:進入hadoop主目錄
sbin/star-dfs.sh:啟動hdfs(在hdfs啟動的那臺服務器上執行)
sbin/start-yarn.sh:啟動yarn(在yarn啟動的那臺服務器上執行)
cd /opt/module/hadoop-3.1.3:進入hadoop主目錄
sbin/stop-yarn.sh:停止yarn(在yarn啟動的那臺服務器上執行)
sbin/stop-dfs.sh:停止hdfs(在hdfs啟動的那臺服務器上執行)
重新格式化的時候必須洗掉每一臺服務器上的data和logs再進行格式化
/opt/module/hadoop-3.1.3:進入hadoop目錄
hdfs namenode -format:格式化操作
重新格式化集群操作:
1.洗掉所有節點的data和logs:
rm -rf 檔案夾名稱:遞回洗掉

2.停止所有節點上的服務:

3.重新格式化服務器:

4.重新啟動服務:

配置歷史服務器:

為了查看程式的歷史運行情況,需要配置一下歷史服務器!
配置mapred-site.xml:
cd /opt/module/hadoop-3.1.3/etc/hadoop:進入目錄
vim mapred-site.xml
<!-- 歷史服務器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop02:10020</value>
</property>
<!-- 歷史服務器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop02:19888</value>
</property>
xsync mapred-site.xml:分發配置好的檔案到各個節點服務器上
重新啟動yarn:
sbin/stop-yarn.sh
sbin/start-yarn.sh
在hadoop02啟動歷史服務器:
cd /opt/module/hadoop-3.1.3:進入hadoop主目錄
bin/mapred --daemon start historyserver:啟動歷史服務器

mapred --daemon stop historyserver:停止歷史服務器

配置日志的聚集:
日志聚集概念:應用運行完成以后,將程式運行日志資訊上傳到HDFS系統上,
日志聚集功能好處:可以方便的查看到程式運行情況,方便開發除錯,
注意:開啟日志聚集功能,需要重啟NodeManager、ResourceManager、HistoryManager
配置yarn-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>
分發到各個節點上,重啟服務!!!



集群時間同步:
如果服務器在公網環境(能連接外網),可以不采用集群時間同步,因為服務器會定期和公網時間進行校準;
如果服務器在內網環境,必須要配置集群時間同步,否則時間久了,會產生時間偏差,導致集群執行任務時間不同步,
找一個機器,作為時間服務器,所有的機器與這臺集群時間進行定時的同步,生產環境根據任務對時間的準確程度要求周期同步,測驗環境為了盡快看到效果,采用1分鐘同步一次,

集群啟動/停止腳本:
cd root/bin:進入bin目錄
vim myhadoop.sh:創建腳本檔案
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 啟動 hadoop集群 ==================="
echo " --------------- 啟動 hdfs ---------------"
ssh hadoop02 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 啟動 yarn ---------------"
ssh hadoop03 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 啟動 historyserver ---------------"
ssh hadoop02 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 關閉 hadoop集群 ==================="
echo " --------------- 關閉 historyserver ---------------"
ssh hadoop02 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 關閉 yarn ---------------"
ssh hadoop03 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 關閉 hdfs ---------------"
ssh hadoop02 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
chmod 777 myhadoop.sh:賦予腳本執行權限
問題解決:
[root@hadloop2 hadoop-3.3.0]# sbin/start-dfs.sh
Starting namenodes on [hadoop2]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
cd $HADOOP_HOME:進入Hadoop主目錄
- 對于start-dfs.sh和stop-dfs.sh檔案,添加下列引數:
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
- 對于start-yarn.sh和stop-yarn.sh檔案,添加下列引數:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
查看三臺服務器Java行程:jpsall腳本
#!/bin/bash
for host in hadoop02 hadoop03 hadoop04
do
echo =============== $host ===============
ssh $host jps
done
常用埠說明:
| 埠名稱 | Hadoop2.X | Hadoop3.X |
| NameNode內部通信埠 | 8020/9000 | 8020/9000/9820 |
| NameNode HTTP UI(對用戶的查詢埠) | 50070 | 9870 |
| MapReduce查看執行任務埠 | 8088 | 8088 |
| 歷史服務器通信埠 | 19888 | 19888 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/335353.html
標籤:其他
