分布式系统:多台服务器共同完成一项任务
Hadoop是Apache开发的分布式体统基础架构,主要解决海量数据的存储和分析计算
广义来说,Hadoop指Hadoop生态圈,包括Hive、Hbase等
Apache Hadoop、Cloudera Hadoop、Hortonworks Hadoop(已被收购)
高可靠性:hadoop底层维护多个数据副本,即使一个副本发生故障,也不会导致数据丢失
高扩展性:在集群间分配任务数据,可方便扩展数以千计的节点(双11期间,动态增加服务器)
高效性:基于MapReduce并行工作
关于并发并行线程进程
高容错性:能够将失败的任务重新分配
成本低:hadoop采用廉价的计算机集群,普通的用户也可以pc机搭建环境
运行在linux平台上,hadoop是基于java语言开发的,可以较好的运行在linux的平台上
支持多种编程语言,如:C++等
资源调度:存在哪,由谁来计算,管理CPU和内存
另一种资源协调者,是Hadoop的资源管理器,主要管理CPU和内存
-client:多个客户端提交程序(Job submission),然后Yarn根据用户请求提供运算资源
ResourceManager(RM): 整个集群资源(内存、CPU等)的老大
NodeManager(NM):单个节点服务器资源老大,负责每一个具体应用程序的调度和协调
Container容器:相当于一台独立的服务器,里面封装了任务运行所需的资源,每个NodeManager里虚拟出很多服务器,比如把自己的内存和CPU分成100份从而虚拟出100台服务器,每个Container内存1-8G,至少一个CPU
Yarn工作原理:首先数据上传到集群中.然后将写好的程序打成架包通过命令提交MR作业.提交到集群后由集群管理者MR开始调度分配资源.到HDFS读取数据执行MapReduce相关进程对数据进行计算
具体流程:
上图显示,Application master向RM申请的资源可以跨节点
Map reduce基于硬盘;spark基于内存
实时计算:storm(即将淘汰)、spark streaming、Flink(流行)
任务调度:多个任务什么时间执行
总体调度:Zookeeper
1)Sqoop:Sqoop 是一款开源的工具,主要用于在 Hadoop、Hive 与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等) 中的数据导进到 Hadoop 的HDFS 中,也可以将HDFS 的数据导进到关系型数据库中。
2) Flume:Flume 是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据;
3) Kafka:Kafka 是一种高吞吐量的分布式发布订阅消息系统;
4) Spark:Spark 是当前最流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数据进行计算。
5) Flink:Flink 是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。
6)Oozie:Oozie 是一个管理 Hadoop 作业(job)的工作流程调度管理系统。
7)Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数据库。
8) Hive:Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。
9) ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
用户行为数据以日志文件形式存在->Flume采集日志->Kafuka缓冲->Flink/spark streaming计算(推荐系统需要实时性)->计算结果后台返回(数据库/文件)->页面展示
VMware+centos
远程访问工具Xshell+Xftp
模板虚拟机,IP 地址 192.168.10.100
主机名称 hadoop100
内存 4G
硬盘 50G
基于模板机Hadoop100克隆三台虚拟机Hadoop102、Hadoop103、Hadoop104
注意:克隆时,要先关闭hadoop100
还要设置主机名称、IP地址
[root@hadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@hadoop100 ~]# vim /etc/hostname
进入文件按O后可修改
修改完成后按Esc后:wq退出(强制退出:wq!)
ping www.baidu.com
查看是否能连接外网,按Ctrl+C
结束查看
以上操作要用管理员账号root
实现
在Hadoop102上安装JDK和Hadoop,然后从拷贝到Hadoop103和Hadoop104
JDK:
在Xshell里cd opt/software
通过上传的方式(Xftp),将安装包传到software文件夹里
tar -zxvf
+安装包名称+ -C ~/opt/module
安装到指定的module文件夹
cd jdk1.8.0_212
开始配置环境变量
cd /etc/profile.d
sudo vim my_env.sh
创建一个新的文件
在my_env.sh文件中输入
#JAVA_HOME
export JAVA_HOME=/home/lyr/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
重新加载里面的文件#HADOOP_HOME
export HADOOP_HOME=/home/lyr/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
Hadoop的目录
bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本
etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
include目录:头文件
lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
sbin 目录:存放启动或停止 Hadoop 相关服务的脚本
share 目录:存放Hadoop 的依赖 jar 包、文档、和官方案例
Hadoop集群有三种模式
本地模式:单台服务器(e.g. Hadoop100),数据存储在linux本地磁盘
伪分布式:单台服务器(e.g. Hadoop101),数据存储在HDFS
完全分布式:多台服务器(e.g. Hadoop102,Hadoop103,Hadoop104),数据存储在HDFS
[lyr@hadoop102 hadoop-3.1.3]$ mkdir wcinput
[lyr@hadoop102 hadoop-3.1.3]$ cd wcinput
[lyr@hadoop102 wcinput]$ vim word.txt
ss ss
cls cls
bobo
banzhang
yangge
保存退出::wq
回到 Hadoop 目录/opt/module/hadoop-3.1.3
执行程序
[lyr@hadoop102 hadoop-3.1.3]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ ./wcoutput
已经完成
scp(secure copy)安全拷贝
scp 可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
scp
命令 -r
递归$pdir/$fname
要拷贝的文件路径/名称 $user@$host:$pdir/$fname
目的地用户@主机:目的地路径/名称[lyr@hadoop102 opt]$ sudo chown lyr:lyr module
[lyr@hadoop102 module]$ scp -r jdk1.8.0_212/ lyr@hadoop103:~/opt/module/
(最开始没加~
一直失败)
[lyr@hadoop103 module]$ scp -r lyr@hadoop102:~/opt/module/hadoop-3.1.3 ./
[lyr@hadoop103 module]$ scp -r lyr@hadoop102:~/opt/module/* lyr@hadoop104:~/opt/module/
rsync 远程同步工具
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别:
用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。所以一般第一次拷贝用scp,后续同步用rsync
基本语法:
rsync
命令
-av
选项参数(-a 归档拷贝;-v 显示复制过程)
$pdir/$fname
要拷贝的文件路径/名称
$user@$host:$pdir/$fname
目的地用户@主机:目的地路径/名称选项参数说明
案例实操
[lyr@hadoop103 hadoop-3.1.3]$ rm -rf wcinput
[lyr@hadoop102 module]$ rsync -av hadoop-3.1.3/ lyr@hadoop103:~/opt/module/hadoop-3.1.3
#!/bin/bash
#1. 判断参数个数,小于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" #-p保证哪怕已经存在也不报错
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
[lyr@hadoop102 bin]$ chmod 777 xsync
[lyr@hadoop102 ~]$ xsync bin/
[lyr@hadoop102 bin]$ sudo cp xsync /bin/
[lyr@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
[lyr@hadoop103 bin]$ source /etc/profile
[lyr@hadoop104 opt]$ source /etc/profile
SSH主要用于远程登录。假定你要以用户名user,登录远程主机host
ssh user@host
如果本地用户名与远程用户名一致,登录时可以省略用户名
ssh host
退出host
exit
免密登录原理
回到根目录ls -al
查看所有隐藏目录,发现.ssh
[lyr@hadoop102 ~]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
在.ssh
中可以找到这两个文件
将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop103
然后从102登录103就不需要密码了
同样将公钥复制到102(自己)和104上
发现.ssh
里增加了一个文件,表示“谁可以免密登录我”,里面显示是Hadoop102
同理Hadoop103、104上也可以看到
但是如果用root用户,还需要密码,想要免密还需要重复配置
此时使用xsync命令将a.txt文件分发到hadoop103和hadoop104就不需要密码了
1)集群部署规划
注意:
➢ NameNode 和 SecondaryNameNode 不要安装在同一台服务器
➢ ResourceManager 也很消耗内存,不要和 NameNode、econdaryNameNode 配置在同一台机器上。
2) 配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1) 默认配置文件:
(2) 自定义配置文件:
core-site.xml 、hdfs-site.xml 、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
3)按照规划配置集群
(1) 核心配置文件
配置core-site.xml
[lyr@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[lyr@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 网页登录使用的静态用户为 lyr -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>lyr</value>
</property>
</configuration>
(2) HDFS 配置文件
配置 hdfs-site.xml
[lyr@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 端访问地址(2nn在104上)-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
(3) YARN 配置文件
配置 yarn-site.xml
[lyr@hadoop102 hadoop]$ vim yarn-site.xml
文件内容如下:
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址(在hadoop103上)-->
<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_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
</configuration>
(4) MapReduce 配置文件
配置 mapred-site.xml
[atguigu@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>
4)在集群(hadoop102、103、104)上分发配置好的 Hadoop 配置文件
[lyr@hadoop102 ~]$ xsync /home/lyr/opt/module/hadoop-3.1.3/etc/hadoop
5)去 103 和 104 上查看文件分发情况
[lyr@hadoop103 hadoop]$ cat /home/lyr/opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[lyr@hadoop104 hadoop]$ cat /home/lyr/opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
1)配置 workers
[lyr@hadoop102 hadoop]$ vim workers
在该文件中增加如下内容(不能有空格空行等):
[lyr@hadoop102 hadoop]$ xsync workers
2)启动集群
[lyr@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
[lyr@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
[lyr@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
3)集群基本测试
创建文件夹input
[lyr@hadoop102 ~]$ hadoop fs -mkdir /input
➢ 上传小文件word,txt到input文件夹
[lyr@hadoop102 ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
➢上传大文件到根目录
[lyr@hadoop102 ~]$ hadoop fs -put ~/opt/software/jdk-8u212-linux-x64.tar.gz /
➢查看HDFS 文件存储路径
/home/lyr/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-24577735-192.168.10.102-1616207775317/current/finalized/subdir0/subdir0
➢查看HDFS 在磁盘存储文件内容
第一个文件就是word.txt
[lyr@hadoop102 subdir0]$ cat blk_1073741826>>tmp.tar.gz
[lyru@hadoop102 subdir0]$ cat blk_1073741827>>tmp.tar.gz
[lyr@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz
[lyr@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
出错了
解决方案:https://blog.csdn.net/qq_41684957/article/details/81710190
在可以http://hadoop103:8088/cluster看到一个任务正在运行
在程序运行结束后,我们想查看任务的运行情况
发现无法打开history,因为没有配置历史服务器,下一步配置历史服务器
1) 配置 mapred-site.xml
[lyr@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>
2)分发配置
[lyr@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
如果yarn开启的话,要重启一下yarn
3) 在 hadoop102 启动历史服务器
[lyr@hadoop102 hadoop]$ mapred --daemon start historyserver
4)查看历史服务器是否启动
5) 查看 JobHistory
http://hadoop102:19888/jobhistory
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和HistoryServer。
开启日志聚集功能具体步骤如下:
1)配置 yarn-site.xml
[lyr@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>
2)分发配置
[lyr@hadoop102 hadoop]$ xsync yarn-site.xml
3)关闭 NodeManager 、ResourceManager 和 HistoryServer
[lyr@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[lyr@hadoop102 ~]$ mapred --daemon stop historyserver
4)启动 NodeManager 、ResourceManage 和 HistoryServer
[lyr@hadoop103 ~]$ start-yarn.sh
[lyr@hadoop102 ~]$ mapred --daemon start historyserver
5)删除 HDFS 上已经存在的输出文件
[lyr@hadoop102 ~]$ hadoop fs -rm -r /output
6)执行 WordCount 程序
[lyr@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
1)各个模块分开启动/停止(配置 ssh 是前提)常用
(1)整体启动/停止 HDFS
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
1)Hadoop 集群启停脚本(包含 HDFS,Yarn,Historyserver):yhadoop.sh
[lyr@hadoop102 ~]$ cd /home/atguigu/bin
[lyr@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
➢ 保存后退出,然后赋予脚本执行权限
[atguigu@hadoop102 bin]$ chmod 777 myhadoop.sh
执行出现错误
在路径前添加/home/lyr
,再次尝试
yarn和hdfs正常关闭,但是historyserver出现错误
可以看到jobHistoryServer仍在
尝试手动关闭,是可以成功的
进入路径
再查看sbin目录
发现这里有一个mr-jobhistory-daemon.sh
于是把脚本文件改成这样:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/home/lyr/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/home/lyr/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/home/lyr/opt/module/hadoop-3.1.3/sbin/mr-jobhistory-daemon.sh start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/home/lyr/opt/module/hadoop-3.1.3/sbin/mr-jobhistory-daemon.sh stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/home/lyr/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/home/lyr/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
2)查看三台服务器 Java 进程脚本(不需要到每个服务器查看jps):jpsall
[lyr@hadoop102 ~]$ cd /home/lyr/bin
[lyr@hadoop102 bin]$ vim jpsall
➢ 输入如下内容
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
➢ 保存后退出,然后赋予脚本执行权限
[lyr@hadoop102 bin]$ chmod 777 jpsall
3)分发/home/atguigu/bin 目录,保证自定义脚本在三台机器上都可以使用
[lyr@hadoop102 ~]$ xsync /home/lyr/bin/
4) 试用
常用配置文件(常见面试题二)
3.x系列:
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
workers
2.x系列
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
slaves
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
1)需求:
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用 1 分钟同步一次。
2)时间服务器配置(必须 root 用户)
查看所有节点 ntpd(一种时间服务器) 服务状态和开机自启动状态
[lyr@hadoop102 ~]$ sudo systemctl status ntpd
[lyr@hadoop102 ~]$ sudo systemctl start ntpd
调至开机自动启动状态
[lyr@hadoop102 ~]$ sudo systemctl is-enabled ntpd
修改 hadoop102 的 ntp.conf 配置文件
[lyr@hadoop102 ~]$ sudo vim /etc/ntp.conf
#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
的#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 127.127.1.0
fudge 127.127.1.0 stratum 10
修改 hadoop102 的/etc/sysconfig/ntpd 文件
[lyr@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
重新启动 ntpd 服务
[lyr@hadoop102 ~]$ sudo systemctl start ntpd
设置 ntpd 服务开机启动
[lyr@hadoop102 ~]$ sudo systemctl enable ntpd
3)其他机器配置(必须 root 用户)
[lyr@hadoop103 ~]$ sudo systemctl stop ntpd
[lyr@hadoop103 ~]$ sudo systemctl disable ntpd
[lyr@hadoop104 ~]$ sudo systemctl stop ntpd
[lyr@hadoop104 ~]$ sudo systemctl disable ntpd
[lyr@hadoop103 ~]$ sudo crontab -e
*/1 * * * * /usr/sbin/ntpdate hadoop102
[lyr@hadoop103 ~]$ sudo date -s "2021-9-11 11:11:11"
[lyr@hadoop103 ~]$ sudo date
[lyr@hadoop102 hadoop-3.1.3]$ sbin/stop-dfs.sh
[lyr@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[lyr@hadoop104 hadoop-3.1.3]$ rm -rf data/ logs
[lyr@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
[lyr@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh