前期準備
模板機準備
修改靜態IP
vim /etc/sysconfig.NETwork-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" //這里改成static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="caae399d-b520-4410-9425-88e6d3602534"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.10.100 //配置ip
GATEWAY=192.168.10.2 //配置網關
DNS1=192.168.10.2 //配置DNS
安裝基本工具
yum install -y net-tools vim psmisc nc rsync lrzsz ntplibzstd openssl-static tree iotop git
關防火墻及開機自啟
systemctl stop firewalld
systemctl disable firewalld.service
systemctl restart network
創建atguigu用戶,修改密碼
useradd atguigu
passwd atguigu #新密碼是ibacon66
給atguigu用戶配置root權限
vim /etc/sudoers
添加第三行:
## Allow root to run any commandsanywhere
root ALL=(ALL) ALL
atguigu ALL=(ALL) NOPASSWD:ALL
記得最后:wq!退出
創建文件夾,修改其所有文件權限為atguigu
mkdir /opt/module
mkdir /opt/software
chown atguigu:atguigu /opt/module
chown atguigu:atguigu /opt/software
修改hosts文件,配置多主機映射(linux和windows都要改)
sudo vim /etc/hosts
Linux中添加以下內容:
本地windows用utools工具帶的hosts插件
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
非最小化安裝的linux系統執行
rpm -qa | grep -i JAVA | xargs -n1 rpm -e --nodeps
克隆虛擬機
用hadoop100克隆出hadoop102、hadoop103、hadoop104
修改克隆機ip分別為102、103、104,并修改主機名
vim /etc/sysconfig/network-scripts/ifcfg-ens33
vim /etc/hostname
改誰重啟誰
安裝JDK、Hadoop到hadoop102
用xftp傳安裝包到102的/opt/software目錄下
解壓到hadoop102的/opt/module目錄下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
改文件名(非必須)
mv jdk1.8.0_212/ jdk8/
mv hadoop-3.1.3.tar.gz/ hadoop
配置環境變量
sudo vim /etc/profile.d/my_env.sh
添加:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk8
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/sbin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
使配置生效
source /etc/profile
查看版本
java -version
hadoop version
刪除hadoop/share/目錄下的doc
cd /opt/module/hadoop/share/
rm -rf doc
完全分布式運行
scp命令,將jdk、hadoop分別復制到hadoop103、hadoop104
先修改軟件目錄權限為atguigu(克隆之前已經修改)
在hadoop102上將hadoop102的/opt/module/jdk8目錄復制到hadoop103上
scp -r /opt/module/jdk8 atguigu@hadoop103:/opt/module
在hadoop103上將hadoop102的/opt/module/hadoop目錄復制到hadoop103上
scp -r atguigu@hadoop102:/opt/module/hadoop atguigu@hadoop103:/opt/module
在hadoop103上將hadoop102的/opt/module下的所有目錄復制到hadoop104上
scp -r atguigu@hadoop102:/opt/module/* atguigu@hadoop104:/opt/module
編寫xsync,將環境變量從hadoop102同步到hadoop103、hadoop104
編寫xsync
在/home/atguigu/bin目錄下創建xsync文件
cd /home/atguigu
mkdir bin
cd /bin
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
修改xsync具有執行權限
chmod +x xsync
將腳本復制到/bin中,用于全局
sudo cp xsync /bin/ 失效了
sudo cp ../xsync ./ 在/bin中執行這命令成功
分發環境變量配置
注意一定要用 sudo
sudo xsync /etc/profile.d/my_env.sh
在hadoop103、hadoop104上刷新
source /etc/profile
配置ssh無密登錄
在hadoop102上atguigu賬戶生成公鑰和私鑰
在hadoop103上atguigu賬戶生成公鑰和私鑰
在hadoop104上atguigu賬戶生成公鑰和私鑰
在hadoop102上root賬戶生成公鑰和私鑰
ssh-keygen -t rsa
hadoop102上atguigu賬戶將公鑰發送到102、103、104
hadoop103上atguigu賬戶將公鑰發送到102、103、104
hadoop104上atguigu賬戶將公鑰發送到102、103、104
hadoop102上root賬戶將公鑰發送到102、103、104
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
集群配置
進入hadoop安裝目錄
cd $HADOOP_HOME/etc/hadoop
配置core-site.xml
vim core-site.xml
添加:
這里的存儲目錄也是后改成hadoop的 原來是hadoop-x.x.x
<configuration>
<!-- 指定NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop數據的存儲目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/data</value>
</property>
<!-- 配置HDFS網頁登錄使用的靜態用戶為atguigu-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
</configuration>
配置hdfs
vim hdfs-site.xml
添加:
<configuration>
<!-- nn web端訪問地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端訪問地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
配置yarn
vim yarn-site.xml
添加:
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<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>
</configuration>
vim mapred-site.xml
添加:
<configuration>
<!-- 指定MapReduce程序運行在Yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在集群上分發配置好的hadoop配置文件
第一個hadoop是安裝目錄 之前經過改名了
xsync /opt/module/hadoop/etc/hadoop/
在hadoop103/hadoop104查看分發情況
注意第一個hadoop是安裝目錄
cat /opt/module/hadoop/etc/hadoop/core-site.xml
群起集群
配置workers
第一個hadoop=hadoop-3.1.3,全文所有涉及到安裝目錄的都是這樣
vim /opt/module/hadoop/etc/hadoop/workers
添加:
hadoop102
hadoop103
hadoop104
xsync同步所有節點配置文件
xsync /opt/module/hadoop/etc
啟動集群
集群第一次啟動需要在hadoop102節點格式化NameNode
hdfs namenode -format
啟動hdfs
sbin/start-dfs.sh
用sbin起不動,去掉sbin可以(220818)
其他的啟動問題是因為hdfs-site.xml這個配置文件頭出了格式錯誤
在配置了ResourceManager的節點(hadoop103)啟動yarn
sbin/start-yarn.sh
web端查看hdfs的namenode
http://hadoop102:9870
查看hdfs存儲的數據信息
web端查看hdfs的resourcemanager
http://hadoop103:8088
查看yarn上存儲的job信息
集群基本測試
上傳文件到集群
hadoop fs -mkdir /input
上傳小文件
hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
上傳大文件
hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /
在安裝目錄hadoop下執行wordcount
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

配置歷史服務器(0819更新)
配置mapred-site.xml
hadoop:vim 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>
分發配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
在hadoop102啟動歷史服務器
mapred --daemon start historyserver
查看歷史服務器是否啟動
jps

查看JobHistory
http://hadoop102:19888/jobhistory

配置日志聚集
配置yarn-site.xml
hadoop: vim yarn-site.xml
添加:
<!-- 開啟日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 設置日志聚集服務器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 設置日志保留時間為7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
分發配置
hadoop102:xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
關閉NodeManager 、ResourceManager和HistoryServer
hadoop103(安裝目錄):sbin/stop-yarn.sh
hadoop102(安裝目錄): mapred --daemon stop historyserver
啟動NodeManager 、ResourceManage和HistoryServer
hadoop103: start-yarn.sh
hadoop102: mapred --daemon start historyserver
刪除HDFS上已經存在的輸出文件
hadoop102: hadoop fs -rm -r /output
執行WordCount程序
hadoop102(安裝目錄):
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
查看日志
查看歷史服務器地址
http://hadoop102:19888/jobhistory
查看歷史任務列表

查看任務運行日志

查看運行日志詳情
好像有點問題(已解決)

編寫常用腳本
Hadoop集群啟停腳本(包含HDFS,Yarn,Historyserver):myhadoop.sh
注意目錄問題:/opt/module/hadoop/sbin/中的hadoop是安裝目錄
cd /home/atguigu/bin
vim myhadoop.sh
添加:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No ArgsInput..."
exit ;
fi
case $1 in
"start")
echo "=================== 啟動 hadoop集群==================="
echo "--------------- 啟動 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop/sbin/start-dfs.sh"
echo " --------------- 啟動 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop/sbin/start-yarn.sh"
echo " --------------- 啟動 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 關閉 hadoop集群 ==================="
echo " --------------- 關閉 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop/bin/mapred --daemon stop historyserver"
echo " --------------- 關閉 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop/sbin/stop-yarn.sh"
echo " --------------- 關閉 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
賦予腳本執行權限:
chmod +x myhadoop.sh
群起測試:

群關測試:

確認是否全部關閉:

查看三臺服務器Java進程腳本:jpsall
cd /home/atguigu/bin
vim jpsall
添加:
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo ===============$host ===============
ssh $host jps
done
賦予腳本執行權限:
chmod +x jpsall
jpsall腳本測試:

分發/home/atguigu/bin目錄,保證自定義腳本在三臺機器上都可以使用
xsync /home/atguigu/bin/
