Hadoop运行模式
# Hadoop运行模式
Hadoop (opens new window)运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
- 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
- 伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
- 完全分布式模式:多台服务器组成分布式环境。生产环境使用。
# 环境准备
详见:Hadoop运行环境搭建
# 本地运行模式
本地运行模式,在hadoop200机器上本地运行官方WordCount案例
在hadoop-3.1.3文件下面创建一个wcinput文件夹:
[wenwl@hadoop102 hadoop-3.1.3]$ mkdir wcinput
在wcinput文件下创建一个word.txt文件:
[wenwl@hadoop102 hadoop-3.1.3]$ cd wcinput
编辑word.txt文件:
[wenwl@hadoop102 wcinput]$ vim word.txt
输入如下内容并保存wq!退出:(可以自己随便输入)
wenwl zhangshan lisi lili wenwl zys
回到Hadoop目录/opt/module/hadoop-3.1.3
执行程序:
[wenwl@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
该程序的意思是:统计wcinput目录下的单词统计结果,将结果输出到wcoutput目录下(该目录不存在会创建,重复执行需要删除该目录)
查看结果:
[wenwl@hadoop102 hadoop-3.1.3]$ cat wcout/part-r-00000 lili 1 lisi 1 wenwl 2 zhangshan 1 zys 1
# 完全分布式运行模式(重点)
# 搭建前的工具准备
在搭建集群前,准备一些脚本和配置,方便我们后续的搭建:
# 1. 编写集群分发脚本xsync
1.1 scp(secure copy)安全拷贝可以实现服务器与服务器之间的数据拷贝。
基本语法:
scp -r $pdir/$fname $user@$host:$pdir/$fname
说明:scp 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
案例实操:前提:基于hadoop100的模版时创建好了目录和权限以及前面我们在hadoop102中安装好了jdk&hadoop,实操命令如下:
# 更改权限,已有权限可忽略 [wenwl@hadoop102 ~]$ sudo chown wenwl:wenwl -R /opt/module # 将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上(推),接下来要输入yes,输入密码 [wenwl@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 wenwl@hadoop103:/opt/module The authenticity of host 'hadoop103 (192.168.31.103)' can't be established. ECDSA key fingerprint is SHA256:bybT3FMDmjwCxrR+pLghYTLCyHR+f5nb2HcrZ0/0in4. ECDSA key fingerprint is MD5:0e:1a:4b:47:a6:2d:76:21:81:d2:db:4c:02:5a:99:2f. Are you sure you want to continue connecting (yes/no)? yes # 输入yes Warning: Permanently added 'hadoop103,192.168.31.103' (ECDSA) to the list of known hosts. wenwl@hadoop103's password: # 输入密码 # 在hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。(拉) [wenwl@hadoop103 ~]$ scp -r wenwl@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/ # 在hadoop103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。 [wenwl@hadoop102 ~]$ scp -r wenwl@hadoop102:/opt/module/* wenwl@hadoop104:/opt/module
1.2 rsync,远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
基本语法:
rsync -av $pdir/$fname $user@$host:$pdir/$fname
说明:rsync 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
选项参数说明:
选项 功能 -a 归档拷贝 -v 显示复制过程 案例实操:
# 删除hadoop103中/opt/module/hadoop-3.1.3/wcinput [wenwl@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/ # 同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103 [wenwl@hadoop102 ~]$ rsync -av /opt/module/hadoop-3.1.3/ wenwl@hadoop103:/opt/module/hadoop-3.1.3/ wenwl@hadoop103's password: sending incremental file list ./ wcinput/ wcinput/word.txt sent 585,006 bytes received 2,594 bytes 167,885.71 bytes/sec
1.3 xsync集群分发脚本
需求:利用上述的rsync
命令完成集群分发脚本xsync,期望在任何路径都能使用脚本命令:xsync 要同步的文件名称
。做到循环复制文件到所有节点的相同目录下
脚本实现:
在用户目录下创建bin目录即/home/wenwl/bin,然后在目录下创建xsync文件:
[wenwl@hadoop102 ~]$ cd ~ [wenwl@hadoop102 ~]$ mkdir bin [wenwl@hadoop102 ~]$ cd bin [wenwl@hadoop102 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 具有执行权限:
[wenwl@hadoop102 bin]$ chmod +x xsync
测试脚本
[wenwl@hadoop102 bin]$ xsync /home/wenwl/bin
将脚本复制到/bin中,以便全局调用
[wenwl@hadoop102 bin]$ sudo cp xsync /bin/
同步环境变量配置(root所有者)
[wenwl@hadoop102 bin]$ cd ~ # 如果用了sudo,那么xsync一定要给它的路径补全。 [wenwl@hadoop102 ~]$ sudo /bin/xsync /etc/profile.d/my_env.sh
让环境变量生效:
[wenwl@hadoop103 etc]$ source /etc/profile [wenwl@hadoop104 etc]$ source /etc/profile
# 2. SSH无密登录配置
刚才的所有命令,你会发现每次执行都要输入密码,现在通过配置SSH无密登录解决这个问题。
2.1 配置ssh
基本语法:
ssh 另一台电脑的IP地址
案例实操:
# ssh连接hadoop103 [wenwl@hadoop102 ~]$ ssh hadoop103 wenwl@hadoop103's password: Last login: Sat Feb 04 10:24:43 2023 from 192.168.31.184 [wenwl@hadoop103 ~]$ # 退回到hadoop102 [wenwl@hadoop103 ~]$ exit 登出 Connection to hadoop103 closed.
2.2 无密钥配置
2.2.1 免密登录原理 :
2.2.2 hadoop102 生成公钥和私钥:
[wenwl@hadoop102 ~]$ cd .ssh
[wenwl@hadoop102 .ssh]$ pwd
/home/wenwl/.ssh
[wenwl@hadoop102 .ssh]$
[wenwl@hadoop102 .ssh]$ ssh-keygen -t rsa
# 按三个回车即可,然后就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
[wenwl@hadoop102 .ssh]$ ls
id_rsa id_rsa.pub known_hosts
2.2.3 将公钥拷贝到要免密登录的目标机器上
[wenwl@hadoop102 .ssh]$ ssh-copy-id hadoop102
[wenwl@hadoop102 .ssh]$ ssh-copy-id hadoop103
[wenwl@hadoop102 .ssh]$ ssh-copy-id hadoop104
2.2.4 测试免密登录:
[wenwl@hadoop102 .ssh]$ ssh hadoop103
Last login: Sat Feb 04 10:30:43 2023 from hadoop102
注意:需要在hadoop103、hadoop104配置无密登录到其他服务器上,还有hadoop102还要切换到root用户配置无密登录到其他服务器上。
2.2.5 .ssh文件夹下(~/.ssh)的文件功能解释
文件名 | 说明 |
---|---|
known_hosts | 记录ssh访问过计算机的公钥(public key) |
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过的无密登录服务器公钥 |
# 集群配置
# 1. 集群部署规划
- NameNode和SecondaryNameNode不要安装在同一台服务器
- ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
# 2. 配置文件说明
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-default.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
这个路径上,用户可以根据项目需求重新进行修改配置。
# 3. 配置集群
3.1 核心配置文件,配置core-site.xml
[wenwl@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[wenwl@hadoop102 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://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>wenwl</value>
</property>
</configuration>
3.2 HDFS配置文件,配置hdfs-site.xml
[wenwl@hadoop102 hadoop]$ 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.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
3.3 YARN配置文件,配置yarn-site.xml
[wenwl@hadoop102 hadoop]$ 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>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>
3.4 MapReduce配置文件,配置mapred-site.xml
[wenwl@hadoop102 hadoop]$ 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>
</configuration>
3.4 在集群上分发配置好的Hadoop配置文件:
[wenwl@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
3.5 去103和104上查看文件分发情况:
[wenwl@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[wenwl@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
# 群起集群
# 1. 配置workers
[wenwl@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容,注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。:
hadoop102
hadoop103
hadoop104
同步所有节点配置文件
[wenwl@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
# 2. 启动集群
2.1 如果集群是第一次启动,需要在hadoop102节点格式化NameNode
[wenwl@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
注意
格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化
2.2 启动HDFS
[wenwl@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
2.3 在配置了ResourceManager的节点(hadoop103)启动YARN
[wenwl@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
2.4 Web端查看HDFS的NameNode
浏览器中输入:http://hadoop102:9870
查看HDFS上存储的数据信息:
2.5 Web端查看YARN的ResourceManager
浏览器中输入:http://hadoop103:8088,可以在这里查看YARN上运行的Job信息
# 3. 集群基本测试
3.1 上传文件到集群
上传小文件
[wenwl@hadoop102 ~]$ hadoop fs -mkdir /input [wenwl@hadoop102 ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
上传大文件
[wenwl@hadoop102 ~]$ hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /
3.2 上传文件后查看文件存放在什么位置
查看HDFS文件存储路径
[wenwl@hadoop102 subdir0]$ pwd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-102325254-192.168.31.102-1702788136765/current/finalized/subdir0/subdir0
查看HDFS在磁盘存储文件内容
[wenwl@hadoop102 subdir0]$ cat blk_1073741825 wenwl zhangshan lisi lili wenwl zys
拼接两个文件:
[wenwl@hadoop102 subdir0]$ ll 总用量 191944 -rw-rw-r--. 1 wenwl wenwl 37 12月 17 14:36 blk_1073741825 -rw-rw-r--. 1 wenwl wenwl 11 12月 17 14:36 blk_1073741825_1001.meta -rw-rw-r--. 1 wenwl wenwl 134217728 12月 17 14:38 blk_1073741826 -rw-rw-r--. 1 wenwl wenwl 1048583 12月 17 14:38 blk_1073741826_1002.meta -rw-rw-r--. 1 wenwl wenwl 60795424 12月 17 14:38 blk_1073741827 -rw-rw-r--. 1 wenwl wenwl 474975 12月 17 14:38 blk_1073741827_1003.meta [wenwl@hadoop102 subdir0]$ cat blk_1073741826>>tmp.tar.gz [wenwl@hadoop102 subdir0]$ cat blk_1073741827>>tmp.tar.gz [wenwl@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz
下载:
[wenwl@hadoop104 ~]$ hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./
执行wordcount程序
[wenwl@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /wcoutput
# 配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
# 1. 配置mapred-site.xml
[wenwl@hadoop102 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>
分发配置:
[wenwl@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
# 2. 在hadoop102启动历史服务器
[wenwl@hadoop102 hadoop]$ mapred --daemon start historyserver
# 查看历史服务器是否启动
[wenwl@hadoop102 hadoop]$ jps
78707 JobHistoryServer
91609 DataNode
79610 Jps
98031 NodeManager
91374 NameNode
# 3. 查看JobHistory
- http://hadoop102:19888/jobhistory
# 配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。可以方便的查看到程序运行详情,方便开发调试。注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
# 1. 配置yarn-site.xml
[wenwl@hadoop102 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>
分发配置:
[wenwl@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
# 2. 关闭NodeManager 、ResourceManager和HistoryServer
# 注意机器位置
[wenwl@hadoop103 hadoop-3.1.3]$ stop-yarn.sh
[wenwl@hadoop102 hadoop-3.1.3]$ mapred --daemon stop historyserver
# 3. 启动NodeManager 、ResourceManager和HistoryServer
# 注意机器位置
[wenwl@hadoop103 hadoop-3.1.3]$ start-yarn.sh
[wenwl@hadoop102 hadoop-3.1.3]$ mapred --daemon start historyserver
# 4. 测试,执行WordCount程序
[wenwl@hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /output # 删除HDFS上已经存在的输出文件
[wenwl@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
# 5. 查看Log
http://hadoop102:19888/jobhistory
# 集群启动/停止方式总结
# 1. 各个模块分开启动/停止(配置ssh是前提,常用)
# 整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
# 整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
# 2. 各个服务组件逐一启动/停止
# 分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
# 启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
# 编写Hadoop集群常用脚本
# 1. Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
[wenwl@hadoop102 ~]$ cd bin
[wenwl@hadoop102 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 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
保存后退出,然后赋予脚本执行权限:
[wenwl@hadoop102 bin]$ chmod +x myhadoop.sh
# 2. 查看三台服务器Java进程脚本:jpsall
[wenwl@hadoop102 bin]$ vim jpsall.sh
输入如下内容:
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
保存后退出,然后赋予脚本执行权限:
[wenwl@hadoop102 bin]$ chmod +x jpsall.sh
# 3. 脚本分发
分发/home/wenwl/bin
目录,保证自定义脚本在三台机器上都可以使用:
[wenwl@hadoop102 bin]$ xsync /home/wenwl/bin/
# 常用端口号说明
端口名称 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
# 集群时间同步
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
# 1. 时间服务器
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。
# 2. 时间服务器配置(必须root用户)
2.1 查看所有节点ntpd服务状态和开机自启动状态
[root@hadoop102 ~]# systemctl status ntpd
[root@hadoop102 ~]# systemctl status ntpd
[root@hadoop102 ~]# systemctl is-enabled ntpd
2.2 修改hadoop102的ntp.conf配置文件
[root@hadoop102 ~]# vim /etc/ntp.conf
修改内容如下:
修改点1:授权192.168.31.0-192.168.31.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
改为:
restrict 192.168.31.0 mask 255.255.255.0 nomodify notrap
修改点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
添加点3:当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步
2.3 修改hadoop102的/etc/sysconfig/ntpd 文件
[root@hadoop102 ~]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
2.4 重新启动ntpd服务&设置ntpd服务开机启动
[root@hadoop102 ~]# systemctl start ntpd
[root@hadoop102 ~]# systemctl enable ntpd
# 3. 其他机器配置(必须root用户)
3.1 关闭所有节点上ntp服务和自启动
[root@hadoop103 ~]# systemctl stop ntpd
[root@hadoop103 ~]# systemctl disable ntpd
[root@hadoop104 ~]# systemctl stop ntpd
[root@hadoop104 ~]# systemctl disable ntpd
3.2 在其他机器配置1分钟与时间服务器同步一次
[root@hadoop103 hadoop-3.1.3]# crontab -e
[root@hadoop104 hadoop-3.1.3]# crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
3.3 修改任意机器时间测试
[root@hadoop103 hadoop-3.1.3]# date -s "2023-12-12 11:11:11"
2023年 12月 12日 星期二 11:11:11 CST
# 1分钟后查看机器是否与时间服务器同步
[root@hadoop103 hadoop-3.1.3]# date
2023年 12月 17日 星期日 16:34:59 CST