0、链接上一篇文章:Hadoop3.x学习之完全分布式运行模式(开发重点)
1、配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
进入到hadoop102服务器中
cd /opt/module/hadoop-3.1.3/etc/hadoop
1)配置mapred-site.xml
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>
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3)在hadoop102启动历史服务器
cd /opt/module/hadoop-3.1.3/bin
mapred --daemon start historyserver
4)查看历史服务器是否启动
jps
5)查看JobHistory
http://hadoop102:19888/jobhistory
2、配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
开启日志聚集功能具体步骤如下:
1)配置yarn-site.xml
在hadoop102中
cd /opt/module/hadoop-3.1.3/etc/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>
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
3)关闭NodeManager 、ResourceManager和HistoryServer
在hadoop103中
cd /opt/module/hadoop-3.1.3/
sbin/stop-yarn.sh
mapred --daemon stop historyserver
4)启动NodeManager 、ResourceManage和HistoryServer
在hadoop103中
sbin/start-yarn.sh
在hadoop102中
mapred --daemon start historyserver
5)删除HDFS上已经存在的输出文件
在hadoop102中
hadoop fs -rm -r /output
6)执行WordCount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
7)查看日志
(1)历史服务器地址
http://hadoop102:19888/jobhistory
(2)历史任务列表
(3)查看任务运行日志
(4)运行日志详情
3、集群启动/停止方式总结
1)各个模块分开启动/停止(配置ssh是前提)常用
(1)整体启动/停止HDFS
cd /opt/module/hadoop-3.1.3/sbin
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
2)各个服务组件逐一启动/停止
(1)分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2)启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
4、编写Hadoop集群常用脚本
1)Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
cd /home/haijin/bin
myhadoop.sh start
myhadoop.sh stop
vim myhadoop.sh
- 输入如下内容
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
- 保存后退出,然后赋予脚本执行权限
chmod +x myhadoop.sh
2)查看三台服务器Java进程脚本:jpsall
cd /home/haijin/bin
vim jpsall
- 输入如下内容
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
- 保存后退出,然后赋予脚本执行权限
chmod +x jpsall
3)分发/home/haijin/bin目录,保证自定义脚本在三台机器上都可以使用
xsync /home/haijin/bin/
5、常用端口号说明
端口名称 |
Hadoop2.x |
Hadoop3.x |
NameNode内部通信端口 |
8020 / 9000 |
8020 / 9000/9820 |
NameNode HTTP UI |
50070 |
9870 |
MapReduce查看执行任务端口 |
8088 |
8088 |
历史服务器通信端口 |
19888 |
19888 |
6、集群时间同步
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
1)需求
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。
2)时间服务器配置(必须root用户)
(1)查看所有节点ntpd服务状态和开机自启动状态
sudo systemctl status ntpd
sudo systemctl start ntpd
sudo systemctl is-enabled ntpd
(2)修改hadoop102的ntp.conf配置文件
sudo vim /etc/ntp.conf
修改内容如下
(a)修改1(授权192.168.152.0-192.168.152.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.152.0 mask 255.255.255.0 nomodify notrap
为restrict 192.168.152.0 mask 255.255.255.0 nomodify notrap
(b)修改2(集群在局域网中,不使用其他互联网上的时间)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
(c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改hadoop102的/etc/sysconfig/ntpd 文件
sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
sudo systemctl start ntpd
(5)设置ntpd服务开机启动
sudo systemctl enable ntpd
3)其他机器配置(必须root用户)
(1)关闭所有节点上ntp服务和自启动
sudo systemctl stop ntpd
sudo systemctl disable ntpd
sudo systemctl stop ntpd
sudo systemctl disable ntpd
(2)在其他机器配置1分钟与时间服务器同步一次
sudo crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
(3)修改任意机器时间
sudo date -s "2021-9-11 11:11:11"
(4)1分钟后查看机器是否与时间服务器同步
sudo date