0%

Hadoop-4-Hadoop运行模式

Hadoop的运行模式包括:本地模式伪分布式以及完全分布式

  • 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
  • 伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
  • 完全分布式模式:多台服务器组成分布式环境。生产环境使用。

本地模式

hadoop-3.1.3文件下面创建一个wcinput文件夹,并在文件夹中创建word.txt文件。

1
2
3
4
cd /opt/module/hadoop-3.1.3/
mkdir wcinput
cd wcinput
vim wrod.txt

文件内容如下:

1
2
3
4
5
6
hadoop
hadoop yarn minglog
minglog map reduce
map reduce mapreduce
minglog minglog
minglog

然后回到目录/opt/module/hadoop-3.1.3。并执行以下程序。

1
2
cd /opt/module/hadoop-3.1.3
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput

运行完毕后在hadoop-3.1.3目录下会生成一个,wcoutput目录。

image-20230706221738268

该目录中存放了刚才运行的任务的结果,使用以下命令查看结果。

1
cat wcoutput/part-r-00000

image-20230706221823570

完全分布式模式

前提:已安装此文章要求配置好3台虚拟机。

SSH无密码登录

为了方便我们后面在使用一些工具(例如:scprsync等)将文件在不同的机器之间拷贝和同步不需要每次都输入机器的密码,我们需要提前将SSH无密码配置好。

首先,使用MobaXterm同时远程连接三台机器,然后点击MultiExec功能,同时在三个终端输入命令。

image-20230707162615419

点击完成后显示为如下界面。

image-20230707162630183

这个时候输入命令就可以同时在三个终端中生效。

首先输入以下命令

1
ssh-keygen -t rsa

在三台机器中生成SSH连接公钥与私钥。

生成完毕后再输入以下内容,将3台机器的公钥同时同步到其他机器。

1
2
3
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

输入完后即可无密码登录到其他机器。

例如hadoop102登录到hadoop103

直接输入以下内容即可,无需再次输入密码。

1
ssh hadoop103

image-20230707163028084

这里是对minglog用户做的无密码登录。还需要按照以上方法对root用户做三台机器的无密码登录,操作类似请自行尝试。

工具的使用

scp(secure copy)完全拷贝

scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

例如现在有hadoop102hadoop103hadoop104三台机器,scp可以实现以下功能:

  1. hadoop102机器上将文件拷贝到hadoop103hadoop104

    首先在机器hadoop102上创建几个文件用于后续的文件传输演示。

    1
    2
    3
    vim a.txt  # 输入a
    vim b.txt # 输入b
    vim c.txt # 输入c

    接下来使用以下命令,将这三个文件拷贝给hadoop103hadoop104同理,在此仅演示一个,后续同样。)

    1
    scp /opt/software/* minglog@hadoop103:/opt/software

    image-20230707172831366

    可以看到,在hadoop103机器上也有对应文件。

  2. hadoop102上拉取hadoop103hadoop104上的文件。

    首先清空,机器hadoop102/opt/software/下的所有文件

    1
    rm -rf /opt/software/*

    接下来将hadoop103机器中的/opt/software/下的文件拉取到hadoop102中。

    1
    scp minglog@hadoop103:/opt/software/* /opt/software/

    image-20230707172937624

    可以看到,同样可以从hadoop103机器将文件拉取到hadoop102机器。

  3. hadoop102上将文件从hadoop103hadoop104拷贝。

    在机器hadoop102中输入以下代码,将hadoop103机器的文件拷贝到hadoop104机器:

    1
    scp minglog@hadoop103:/opt/software/* minglog@hadoop104:/opt/software/

    image-20230707173346066

rsync远程同步工具

这里的rsync工具和scp工具不一样,scp是完全拷贝,它不会去校验这个文件是否在目的位置存在,直接拷贝过去覆盖,这样速度相对比较慢,因为每次都是重新拷贝;而rsync工具则不一样,它在拷贝是会先去校验文件是否存在,是否发送过变化,它只会把发生变化文件拷贝过去,这样拷贝的速度就相对比较快。

基本语法如下:

1
2
rsync -av      $pdir/$fname         $user@$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

使用演示如下:

首先将hadoop103hadoop104机器中的/opt/software/目录下的文件清空。

1
rm -rf /opt/software/*

接下来使用rsync工具将hadoop102中的文件拷贝到hadoop103

1
rsync -av /opt/software/* minglog@hadoop103:/opt/software/

image-20230707174206074

传输成功。

接下来,在hadoop102中修改a.txt的内容为aaaa

1
vim a.txt

然后再次同步。

image-20230707174324859

此时只会同步修改的a.txt文件,不会修改b.txtc.txt文件。

hadoop103中查看a.txt内容是否发生变化。

image-20230707174421277

文件内容发生改变。

自写工具xsync,集群分发脚本

rsync工具的基础上进一步开发,循环复制文件到所有节点的相同目录下。因为如果使用rsync工具,让集群中服务器的数量过多,就需要写很多次rsync命令去同步,这样显然是非常低效率。这个时候我们就需要再rsync的基础上进一步开发,使其自动将指定目录的内容分发到所有的节点。

在家目录下创建一个xsync脚本

1
vim ~/xsync

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/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.sh脚本执行权限。

1
chmod +x xsync

然后测试脚本。

首先,清空hadoop103hadoop104目录/opt/software/下的所有文件

1
rm -rf /opt/software/*

然后在hadoop102机器中使用xsync脚本同步。

1
~/xsync /opt/software/*

image-20230707175308718

同步成功。

此时,xsync工具只能在用户目录下使用,为了使得xsync工具在任意目录都能够使用,有两种方式可以实现:

  1. xsync单独创建环境变量。
  2. xsync脚本放入到一个有环境变量的目录下。

在此,我采用的是第二种方式,将xsync.sh脚本移动到/opt/module/hadoop-3.1.3/bin下。

1
mv ~/xsync /opt/module/hadoop-3.1.3/bin

然后再次验证其功能。

image-20230707180030364

可以看到此时家目录脚本已经删除,但是仍然可以拷贝和同步数据。

集群的规划与配置

集群规划

hadoop102 hadoop103 hadoop104
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager NodeManager NodeManager

注意:

  • NameNodeSecondaryNameNode不要安装在同一台服务器
  • ResourceManager也很消耗内存,不要和NameNodeSecondaryNameNode配置在同一台机器上。

集群配置

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.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

  • core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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>minglog</value>
</property>
</configuration>
  • hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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>
  • yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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>
  • mapred-site.xml
1
2
3
4
5
6
7
8
9
10
<?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>

此外,在$HADOOP_HOME/etc/hadoop路径下还有一个文件workers,在该文件中存储了所有的节点的hostname,也需要提前配置。

1
vim workers

配置内容如下:

1
2
3
hadoop102
hadoop103
hadoop104

分发配置文件

1
xsync /opt/module/hadoop-3.1.3/etc/hadoop/

查看分发结果

在节点hadoop103中查看/opt/module/hadoop-3.1.3/etc/hadoop/workers文件内容是否发生变化。

1
cat /opt/module/hadoop-3.1.3/etc/hadoop/workers

image-20230711152044811

分发成功。

启动集群

第一次启动集群需要在hadoop102节点上格式化NameNode

1
hdfs namenode -format

image-20230711152521189

注意:格式化NameNode,会产生新的集群id,导致NameNodeDataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenodedatanode进程,并且要删除所有机器的datalogs目录,然后再进行格式化。详见2.3.2.6 常见错误

接下来在hadoop102中启动HDFS

1
start-dfs.sh

第一次启动会创建相关文件夹。

image-20230711152559321

启动完成后,在节点hadoop102中开启NameNodeDataNode服务,在hadoop103中会开启DataNode服务,在hadoop104中会开启DataNodeSecondaryNameNode服务,在每个节点中输入jps,可查看已运行的Java服务。

image-20230711152723716

此时,HDFS服务已经开启成功。

接下来去hadoop103中开启YARN服务。

1
start-yarn.sh

image-20230711152906755

此时在hadoop103中会开启ResourceManagerNodeManager服务,在hadoop102hadoop104中会开启NodeManager服务。

image-20230711153043884

常见错误

  1. 配置错误

    为了演示效果,在此我将hdfs-site.xml中的内容修改成错误格式,如下所示。

    image-20230729161954739

    此时再次使用start-dfs.sh开启集群服务,此时就会报错。

    image-20230711161618669

    并且hadoop102节点的HDFS服务也没有开启。

    image-20230711161652983

    在此出直接报错到控制台还算是比较幸运的,有的时候报错并不显示在控制台,这个时候就需要自己去日志中查看,查看原则哪个机器机器服务出现文件,就看哪个机器中的日志文件

    例如此处的错误在日志文件中也可以看到。

    1
    tail -n 100 /opt/module/hadoop-3.1.3/logs/hadoop-minglog-namenode-hadoop102.log

    image-20230711162041128

    从报错可以看出,解析conf hdfs-site.xml错误,出现了一个额外的关闭标记符号。回到配置文件中将最后一行删除,即可恢复正常。

    关闭HDFS服务后重新开启即可恢复正常。

    image-20230711162433113

  2. 重复初始化NameNode

    重复初始化的意思是,在集群搭建完成后运行了多次hdfs namenode -format去初始化NameNode

    例如,现在我在节点hadoop102中再次运行hdfs namenode -format

    比较有代表性的特征是在控制台会提示我们输入一个Y or N,这个时候无论输入Y还是N都会导致我们的集群出现问题。

    image-20230711163029287

    例如我输入Y后,再次使用以下命令去启动集群。

    1
    start-dfs.sh

    这个时候虽然看着没有问题,但是输入jps后可以看到DataNode服务没有成功开启。

    image-20230711163255687

    输入以下命令查看日志

    1
    tail -n 100 /opt/module/hadoop-3.1.3/logs/hadoop-minglog-datanode-hadoop102.log

    image-20230711163425121

    可以看到报错为NameNodeDataNodeclusterID不一致。

    解决办法是,重启所有机器后删除所有节点下的$HADOOP_HOME下的datalogs文件夹。

    然后再次初始化NameNode

    为了方便删除所有节点的datalogs文件夹,我们编写以下脚本实现。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash

    for host in hadoop102 hadoop103 hadoop104
    do
    ssh $host rm -rf /opt/module/hadoop-3.1.3/data
    ssh $host rm -rf /opt/module/hadoop-3.1.3/logs
    ssh $host sudo rm -rf /tmp/*
    echo "================$host Clearing.=============="
    done

    给脚本命名为hclear,并放入/opt/module/hadoop-3.1.3/bin目录下(因为该目录具有执行权限)。

    1
    mv hclear /opt/module/hadoop-3.1.3/bin

    然后赋予执行权限

    1
    chmod +x /opt/module/hadoop-3.1.3/bin/hclear

    运行hclear脚本。

    1
    hclear

    image-20230711163923771

    然后查看$HADOOP_HOME目录,相关目录是否删除。

    1
    ll $HADOOP_HOME

    image-20230711164006630

    datalogs目录删除成功。

    然后重启所有节点

    1
    2
    3
    ssh hadoop103 sudo reboot
    ssh hadoop104 sudo reboot
    ssh hadoop102 sudo reboot

    重新执行NameNode初始化。

    1
    hdfs namenode -format

    image-20230711173904469

    初始化成功。

编写Hadoop集群常用脚本

  1. Hadoop启停脚本:myhadoop.sh

    进入/opt/module/hadoop-3.1.3/bin编辑myhadoop

    1
    2
    cd /opt/module/hadoop-3.1.3/bin
    vim myhadoop

    输入以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/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 "mapred --daemon start historyserver"
    ;;
    "stop")
    echo " ==========关闭 hadoop集群 ========="
    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 "------------ 关闭HistoryServer -----------"
    ssh hadoop102 "mapred --daemon stop historyserver"
    ;;
    *)
    echo "Input Args Error..."
    ;;
    esac

    然后赋予执行权限

    1
    chmod +x myhadoop

    执行以下命令使用myhadoop开启集群。

    1
    myhadoop start

    image-20230711174053715

    集群启动成功。

  2. 查看所有节点的Java进程脚本jpsall

    进入/opt/module/hadoop-3.1.3/bin编辑jpsall

    1
    2
    cd /opt/module/hadoop-3.1.3/bin
    vim jpsall

    输入以下内容:

    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash

    for host in hadoop102 hadoop103 hadoop104
    do
    echo =============== $host ===============
    ssh $host jps
    done

    然后赋予执行权限

    1
    chmod +x jpsall

    使用以下命令查看所有集群的Java进程运行状态。

    1
    jpsall

    image-20230711174353302

    执行成功。

接下来查看相关服务的WEB页面,并演示其简单功能。

打开HDFS Web页面

image-20230711203834555

点击文件浏览器

image-20230711203909410

在根目录下创建input文件夹

image-20230711204048128

然后进入到/input文件夹,并上传文件到该文件夹下。

随便编辑几个文本文件上传到该文件夹下,上传的文件将用于后续执行WordCount任务。

image-20230711204530802

配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

配置mapred-site.xml

修改mapred-site.xml配置文件

1
vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml

增加以下内容:

1
2
3
4
5
6
7
8
9
10
11
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>

分发配置。

1
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

hadoop102节点中启动历史服务器。

1
mapred --daemon start historyserver

查看历史服务器是否启动。

1
jps

image-20230711175031077

历史服务器启动成功。

该网址下可以查看对应的页面内容。

image-20230711175141244

配置日志聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

image-20230711175557397

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManagerResourceManagerHistoryServer

开启日志聚集功能具体步骤如下:

修改yarn-site.xml配置

1
vim /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml

增加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 开启日志聚集功能 -->
<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>

分发配置

1
xsync /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml

image-20230711203110909

重新启动Hadoop集群。

1
myhadoop stop

完毕完成后重新启动。

1
myhadoop start

如果集群中运行过任务,则需要执行以下代码删除HDFS中的输出文件。如果没有运行过任务可跳过此步骤。

1
hadoop fs -rm -r /output

使用集群执行WordCount任务

1
2
cd /opt/module/hadoop-3.1.3/
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

image-20230711204701362

任务执行成功,在HDFS下即可生成一个output文件夹,任务执行的结果存放在该文件夹下。

image-20230711204747863

image-20230711204838536

使用命令查看文件内容。

1
hdfs dfs -cat /output/part-r-00000

image-20230711205121836

除了可以使用命令查看,还可以在HDFS Web界面中点击文件查看。

image-20230711205636742

此时再次查看历史任务,即可看到刚刚执行的WordCount任务。

image-20230711205210992

点击Job ID即可进入该任务详情。

image-20230711205355853

继续点击Logs还可查看该任务的日志。

image-20230711205426416

集群时间同步

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;

如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。

需求

找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。

image-20230711210133746

时间服务器配置

  1. 查看hadoop102服务状态和开机自启动状态(如果开着就关掉)

    1
    2
    sudo systemctl status ntpd
    sudo systemctl is-enabled ntpd
  2. 修改hadoop102ntp.conf配置文件

    1
    sudo vim /etc/ntp.conf

    首先,授权192.168.128.0-192.168.128.255网段上的所有机器可以从这台机器上查询和同步时间)

    #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap修改为以下内容:

    1
    restrict 192.168.128.0 mask 255.255.255.0 nomodify notrap

    然后,设置集群不使用其他互联网上的时间

    将以下几行内容注释。

    1
    2
    3
    4
    #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

    最后设置,当网络连接丢失时,依然使用本地时间作为时间服务器为集群中的其他节点提供时间同步。

    添加以下内容:

    1
    2
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10

    修改的配置文件内容见下图所示。

    image-20230711211400313

  3. 修改hadoop102/etc/sysconfig/ntpd 文件

    1
    sudo vim /etc/sysconfig/ntpd

    增加以下内容:

    1
    SYNC_HWCLOCK=yes
  4. 重新启动ntpd服务,并设置开机自启。

    1
    2
    sudo systemctl start ntpd
    sudo systemctl enable ntpd

    至此,hadoop102节点配置完毕。

  5. 其他节点配置。

    关闭所有节点上ntp服务和自启动

    1
    2
    3
    4
    5
    ssh hadoop103 sudo systemctl stop ntpd
    ssh hadoop103 sudo systemctl disable ntpd

    ssh hadoop104 sudo systemctl stop ntpd
    ssh hadoop104 sudo systemctl disable ntpd

    在其他机器配置1分钟与时间服务器同步一次

    1
    2
    ssh hadoop103
    sudo crontab -e

    添加以下内容

    1
    */1 * * * * /usr/sbin/ntpdate hadoop102

    继续配置hadoop104节点。

    1
    2
    ssh hadoop104
    sudo crontab -e

    同样添加以下内容

    1
    */1 * * * * /usr/sbin/ntpdate hadoop102

    接下来将hadoop104的节点时间进行修改

    1
    sudo date -s "1991-11-11 11:11:11"

    image-20230711212341095

    过1分钟后再次查看,发现时间自动修改了。

    image-20230711212512280

    时间服务器配置成功。

    至此,集群的基本搭建工作完成。

-------------本文结束感谢您的阅读-------------