学习链接:https://www.bilibili.com/video/BV1Qp4y1n7EN?p=26&spm_id_from=pageDriver


运行模式

官网:http://hadoop.apache.org/
Hadoop运行模式包括:本地模式、伪分布模式和完全分布式模式

  • 本地模式:单机运行
  • 伪分布式模式:单机运行,但具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境
  • 完全分布式模式:多台服务器组成分布式环境

    本地运行模式 WordCount

  1. 在hadoop-3.1.3下面创建一个wcinput文件夹

    1. mkdir wcinput
  2. 创建word.txt,里面写一些内容

    1. [qtbhy@hadoop102 hadoop-3.1.3]$ cd wcinput/
    2. [qtbhy@hadoop102 wcinput]$ vim word.txt

    QQ截图20220427170320.png

  3. 回到Hadoop目录/opt/module/hadoop-3.1.3

    1. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ ./wcoutput

    按tab会有提示
    ./wcoutput:结果目录 执行之前不能存在

  4. 查看结果

    1. cat wcoutput/part-r-00000

    QQ截图20220427171638.png

    完全分布式运行模式

    1. scp(secure copy)安全拷贝

  • scp可以实现服务器与服务器之间的数据拷贝
  • 基本语法

    1. scp -r $pdir/$fname $user@$host:$pdir/$fname
    • scp:命令
    • -r:递归
    • $pdir/$fname:要拷贝的文件路径/名称
    • $user@$host:$pdir/$fname:目的地用户@主机:目的地路径/名称
  • 在hadoop102上把hadoop102的jdk拷贝到hadoop103上

    1. [qtbhy@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 qtbhy@hadoop103:/opt/module

    QQ截图20220427173251.png

  • 在hadoop103上把hadoop102的Hadoop拷贝到hadoop103上

    1. [qtbhy@hadoop103 ~]$ scp -r qtbhy@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

    QQ截图20220427173504.png

  • 在hadoop103上把hadoop102的hadoop和jdk都拷贝到hadoop104

    1. scp -r qtbhy@hadoop102:/opt/module/* qtbhy@hadoop104:/opt/module/

    2. rsync远程同步工具

  • rsync主要用于备份和镜像,速度快、避免复制相同内容、支持符号链接

  • rsync和scp的区别:用rsync做文件的复制要比scp速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
  • 基本语法

    1. rsync -av $pdir/$fname $user@$host:$pdir/$fname
    • rsync:命令
    • -av:选项参数 -a,归档拷贝;-v,显示复制过程
    • $pdir/$fname:要拷贝的文件路径/名称
    • $user@$host:$pdir/$fname:目的地用户@主机:目的地路径/名称
  • 在hadoop103上删除wcinput/ wcoutput/

    1. rm -rf wcinput/ wcoutput/
  • 在hadoop102上同步hadoop-3.1.3到hadoop103

    1. rsync -av hadoop-3.1.3/ qtbhy@hadoop103:/opt/module/hadoop-3.1.3/

    3. xsync集群分发脚本

  • 需求:循环复制文件到所有节点的相同目录下

  • 创建脚本

    1. 在/home/qtbhy目录下创建a.txt

      1. touch a.txt
    2. 现在的环境变量:

QQ截图20220428095829.png
因此在/home/qtbhy/bin路径下创建脚本

  1. [qtbhy@hadoop102 ~]$ mkdir bin
  2. [qtbhy@hadoop102 ~]$ cd bin/
  1. #!/bin/bash
  2. #1. 判断参数个数
  3. if [ $# -lt 1 ] # 判断参数个数($#)是否小于1
  4. then
  5. echo Not Enough Arguement!
  6. exit;
  7. fi
  8. #2. 遍历集群所有机器
  9. for host in hadoop102 hadoop103 hadoop104
  10. do
  11. echo ==================== $host ====================
  12. #3. 遍历所有目录,挨个发送
  13. for file in $@
  14. do
  15. #4. 判断文件是否存在
  16. if [ -e $file ]
  17. then
  18. #5. 获取父目录
  19. pdir=$(cd -P $(dirname $file); pwd)
  20. #6. 获取当前文件的名称
  21. fname=$(basename $file)
  22. ssh $host "mkdir -p $pdir"
  23. rsync -av $pdir/$fname $host:$pdir
  24. else
  25. echo $file does not exists!
  26. fi
  27. done
  28. done
  1. 修改脚本xsync具有执行权限

    1. [qtbhy@hadoop102 bin]$ chmod 777 xsync
  2. 测试

    1. 将bin分发到集群

      1. [qtbhy@hadoop102 ~]$ xsync bin/

      QQ截图20220428104634.png

    2. 环境变量分发到集群

      1. sudo ./bin/xsync /etc/profile.d/my_env.sh

      QQ截图20220428105835.png
      souce以使环境变量生效

      1. [qtbhy@hadoop103 ~]$ source /etc/profile
      2. [qtbhy@hadoop104 ~]$ source /etc/profile

      4. SSH无密登录配置

  • 配置ssh

    • 基本语法

      1. ssh 另一台电脑的IP地址

      QQ截图20220428110151.png

    • 返回到hadoop102

QQ截图20220428110227.png

  • 无密钥登录配置
    • 免密登录原理

QQ截图20220428110509.png

  • 配置免密登录
  1. 查看所有文件

    1. [qtbhy@hadoop103 ~]$ ls -al

    QQ截图20220428113038.png

  2. 在/home/qtbhy/.ssh目录下生成公钥和私钥

    1. [qtbhy@hadoop102 .ssh]$ ssh-keygen -t rsa

    生成了hadoop102的公钥和私钥
    QQ截图20220428112436.png

  3. 将公钥拷贝到要免密登录的目标机器上

    1. [qtbhy@hadoop102 .ssh]$ ssh-copy-id hadoop103
    2. [qtbhy@hadoop102 .ssh]$ ssh-copy-id hadoop104
    3. [qtbhy@hadoop102 .ssh]$ ssh-copy-id hadoop105

    同样配置其他机器相互间的免密登录,以上都是自建账号

  4. 以及在hadoop102上用root账号无密登录到hadoop102、hadoop103、hadoop104

    1. [qtbhy@hadoop102 .ssh]$ su root
    2. [root@hadoop102 .ssh]# ssh-keygen -t rsa
    3. [root@hadoop102 .ssh]# ssh-copy-id hadoop102
    4. [root@hadoop102 .ssh]# ssh-copy-id hadoop103
    5. [root@hadoop102 .ssh]# ssh-copy-id hadoop104
  • .ssh文件夹下的文件

QQ截图20220428155022.png

known_hosts 记录ssh访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密登录服务器公钥

集群配置

1. 集群部署规划


hadoop102 hadoop103 hadoop104
HDFS NameNode
DataNode


DataNode
SecondaryNameNode
DataNode
YARN

NodeManager
ResourceManager
NodeManager


NodeManager
  • NameNode和SecondaryNameNode不要安装在同一台服务器,都很消耗内存
  • ResourceManager很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上

    2. 配置文件说明

    Hadoop配置文件分为两类:默认配置文件和自定义配置文件,用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

    默认配置文件

  • 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.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

QQ截图20220428160746.png

配置集群

  1. 核心配置文件

配置core-site.xml

  1. [qtbhy@hadoop102 hadoop]$ vim core-site.xml

文件内容:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- 指定NameNode的地址 -->
  5. <property>
  6. <name>fs.defaultFS</name>
  7. <value>hdfs://hadoop102:8020</value>
  8. </property>
  9. <!-- 指定hadoop数据的存储目录 -->
  10. <property>
  11. <name>hadoop.tmp.dir</name>
  12. <value>/opt/module/hadoop-3.1.3/data</value>
  13. </property>
  14. <!-- 配置HDFS网页登录使用的静态用户为qtbhy -->
  15. <property>
  16. <name>hadoop.http.staticuser.user</name>
  17. <value>qtbhy</value>
  18. </property>
  19. </configuration>

QQ截图20220428161233.png

  1. [qtbhy@hadoop102 ~]$ cd /opt/module/hadoop-3.1.3/
  2. [qtbhy@hadoop102 hadoop-3.1.3]$ cd etc/hadoop
  3. [qtbhy@hadoop102 hadoop]$ vim core-site.xml
  1. <!-- 配置HDFS网页登录使用的静态用户为qtbhy -->
  2. <property>
  3. <name>hadoop.http.staticuser.user</name>
  4. <value>qtbhy</value>
  5. </property>
  1. [qtbhy@hadoop102 hadoop]$ xsync core-site.xml
  2. [qtbhy@hadoop102 hadoop]$ myhadoop.sh stop
  3. [qtbhy@hadoop102 hadoop]$ myhadoop.sh start
  1. HDFD配置文件

配置hdfs-site.xml

  1. [qtbhy@hadoop102 hadoop]$ vim hdfs-site.xml

文件内容:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- nn web端访问地址-->
  5. <property>
  6. <name>dfs.namenode.http-address</name>
  7. <value>hadoop102:9870</value>
  8. </property>
  9. <!-- 2nn web端访问地址-->
  10. <property>
  11. <name>dfs.namenode.secondary.http-address</name>
  12. <value>hadoop104:9868</value>
  13. </property>
  14. </configuration>

QQ截图20220428161726.png

  1. YARN配置文件

配置yarn-site.xml

  1. [qtbhy@hadoop102 hadoop]$ vim yarn-site.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- 指定MR走shuffle -->
  5. <property>
  6. <name>yarn.nodemanager.aux-services</name>
  7. <value>mapreduce_shuffle</value>
  8. </property>
  9. <!-- 指定ResourceManager的地址-->
  10. <property>
  11. <name>yarn.resourcemanager.hostname</name>
  12. <value>hadoop103</value>
  13. </property>
  14. <!-- 环境变量的继承 -->
  15. <property>
  16. <name>yarn.nodemanager.env-whitelist</name>
  17. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  18. </property>
  19. </configuration>

QQ截图20220428162201.png

  1. MapReduce配置文件

配置mapred-site.xml

  1. [qtbhy@hadoop102 hadoop]$ vim mapred-site.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- 指定MapReduce程序运行在Yarn上 -->
  5. <property>
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>
  9. </configuration>

QQ截图20220428162709.png

  1. 把配置好的Hadoop配置文件分发到集群

    1. [qtbhy@hadoop102 etc]$ pwd
    2. /opt/module/hadoop-3.1.3/etc
    3. [qtbhy@hadoop102 etc]$ xsync hadoop/
  2. hadoop103、hadoop104上配置文件已经改好了

QQ截图20220428163526.png

  1. 配置workers

    1. [qtbhy@hadoop102 hadoop-3.1.3]$ cd etc/hadoop
    2. [qtbhy@hadoop102 hadoop]$ vim workers
    1. 在该文件中增加如下内容:

      1. hadoop102
      2. hadoop103
      3. hadoop104

      该文件中添加的内容结尾不允许有空格,文件中不允许有空行
      QQ截图20220428163857.png

    2. 将文件分发到所有节点

      1. [qtbhy@hadoop102 hadoop]$ xsync workers

      启动集群

  2. 初始化 如果集群是第一次启动,需要在hadoop102节点格式化NameNode

格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。
如果集群在运行过程中报错,需要重新格式化NameNode,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化

  1. [qtbhy@hadoop102 hadoop-3.1.3]$ hdfs namenode -format

执行完后会出现data、logs
QQ截图20220428164452.png
在/opt/module/hadoop-3.1.3/data/dfs/name/current目录下

  1. [qtbhy@hadoop102 current]$ vim VERSION

当前服务器版本号
QQ截图20220428164933.png

  1. 启动HDFS

/opt/module/hadoop-3.1.3/sbin目录下的start-dfs.sh用于启动集群
QQ截图20220428165140.png

  1. [qtbhy@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh

QQ截图20220428165357.png
查看启动情况,是否与集群规划一致

  1. [qtbhy@hadoop102 hadoop-3.1.3]$ jps
  2. [qtbhy@hadoop103 hadoop-3.1.3]$ jps
  3. [qtbhy@hadoop104 hadoop-3.1.3]$ jps

QQ截图20220428165455.png
QQ截图20220428165550.png
QQ截图20220428165652.png

  1. Web端查看HDFS的NameNode

访问:http://hadoop102:9870/
QQ截图20220428165815.png

  1. 在hadoop103上启动YARN(hadoop103配置了ResourceManager)

    1. [qtbhy@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

    QQ截图20220428174434.png

  2. 查看集群启动情况

    1. [qtbhy@hadoop103 hadoop-3.1.3]$ jps

    QQ截图20220428174639.png
    QQ截图20220428174454.png
    QQ截图20220428174704.png

  3. Web端查看YARN的ResourceManager

访问:http://hadoop103:8088/
QQ截图20220428174755.png

  1. 测试
    1. 上传文件到集群
      1. 上传小文件

(1)创建一个文件夹input

  1. [qtbhy@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /input

QQ截图20220428175055.png
(2)把word.txt上传到/input文件夹

  1. [qtbhy@hadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/word.txt /input

QQ截图20220428175752.png

  1. 2. 上传大文件
  1. [qtbhy@hadoop102 hadoop-3.1.3]$ hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /

QQ截图20220428180046.png

  1. 上传文件后查看文件存放在什么位置

    1. [qtbhy@hadoop102 subdir0]$ pwd
    2. /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-953109074-192.168.10.102-1651135420825/current/finalized/subdir0/subdir0

    文件存储路径 /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-953109074-192.168.10.102-1651135420825/current/finalized/subdir0/subdir0

  2. 查看HDFS在磁盘存储文件内容

    1. [qtbhy@hadoop102 subdir0]$ cat blk_1073741825

    QQ截图20220428180653.png\
    (3)拼接

    1. [qtbhy@hadoop102 subdir0]$ cat blk_1073741826 >> tmp.tar.gz
    2. [qtbhy@hadoop102 subdir0]$ cat blk_1073741827 >> tmp.tar.gz

    QQ截图20220428180854.png

    1. [qtbhy@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz

    解压之后就是上传的jdk压缩包
    (4)在web端打开有三个副本
    QQ截图20220428181233.png
    QQ截图20220428181538.png
    QQ截图20220428181403.png
    QQ截图20220428181438.png

    1. [qtbhy@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

    QQ截图20220428181821.png
    QQ截图20220428182015.pngQQ截图20220428182027.png

    集群崩溃处理

  1. 杀死进程

    1. [qtbhy@hadoop102 hadoop-3.1.3]$ sbin/stop-dfs.sh
  2. 删除每一个节点上的data和logs

QQ截图20220428182837.png

  1. [qtbhy@hadoop102 hadoop-3.1.3]$ rm -rf data/ logs/
  2. [qtbhy@hadoop103 hadoop-3.1.3]$ rm -rf data/ logs/
  3. [qtbhy@hadoop104 hadoop-3.1.3]$ rm -rf data/ logs/
  1. 格式化

    1. [qtbhy@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
  2. 启动集群

    1. [qtbhy@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh

    配置历史服务器

  3. 配置mapred-site.xml

    1. [qtbhy@hadoop102 hadoop]$ vim mapred-site.xml

    在该文件里面增加如下配置
    QQ截图20220428183814.png

  4. 分发配置

    1. [qtbhy@hadoop102 hadoop]$ xsync mapred-site.xml
  5. 在hadoop102启动历史服务器

    1. [qtbhy@hadoop102 hadoop-3.1.3]$ bin/mapred --daemon start historyserver
  6. 查看历史服务器是否启动

QQ截图20220428184244.png

  1. 测试

    1. 准备数据

      1. [qtbhy@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /input
      2. [qtbhy@hadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/word.txt /input
    2. 运行

      1. [qtbhy@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
  2. 查看JobHistory

访问:http://hadoop102:19888/jobhistory
QQ截图20220428184927.png

配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传HDFS系统上。
开启日志聚集功能,需要重新启动NodeManager、ResourceManager和HistoryServer。
未命名文件.png

  1. 配置yarn-site.xml

    1. [qtbhy@hadoop102 hadoop]$ vim yarn-site.xml

    在该文件里增加配置

    1. <!-- 开启日志聚集功能 -->
    2. <property>
    3. <name>yarn.log-aggregation-enable</name>
    4. <value>true</value>
    5. </property>
    6. <!-- 设置日志聚集服务器地址 -->
    7. <property>
    8. <name>yarn.log.server.url</name>
    9. <value>http://hadoop102:19888/jobhistory/logs</value>
    10. </property>
    11. <!-- 设置日志保留时间为7天 -->
    12. <property>
    13. <name>yarn.log-aggregation.retain-seconds</name>
    14. <value>604800</value>
    15. </property>

    QQ截图20220428191128.png

  2. 分发配置

    1. [qtbhy@hadoop102 hadoop]$ xsync yarn-site.xml
  3. 关闭NodeManager、ResourceManager和HistoryServer

    1. [qtbhy@hadoop102 hadoop-3.1.3]$ mapred --daemon stop historyserver
    2. [qtbhy@hadoop102 hadoop-3.1.3]$ sbin/stop-yarn.sh
  4. 启动NodeManager、ResourceManager和HistoryServer ```shell [qtbhy@hadoop102 hadoop-3.1.3]$ sbin/start-yarn.sh [qtbhy@hadoop102 hadoop-3.1.3]$ mapred —daemon start historyserver

  1. 5. 执行WordCount程序
  2. ```shell
  3. [qtbhy@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output2
  1. 访问web端

访问:http://hadoop102:19888/jobhistory
QQ截图20220428192155.png
运行日志详情:
QQ截图20220428192137.png

集群启动/停止方式总结

1. 各个模块分开启动/停止

(1)整体启动/停止HDFS

  1. start-dfs.sh/stop-dfs.sh

(2)整体启动/停止YARN

  1. start-yarn.sh/stop-yarn.sh

2. 各个服务组件逐一启动/停止

(1)分别启动/停止HDFS组件

  1. hdfs --daemon start/stop namenode/datanode/secondarynamenode

(2)启动/停止YARN

  1. yarn --daemon start/stop resourcemanager/nodemanager

编写Hadoop集群常用脚本

  1. Hadoop集群启停脚本(包含HDFS,YARN,Historyserver):myhadoop.sh

在/home/qtbhy/bin目录下创建myhadoop.sh脚本

  1. [qtbhy@hadoop102 bin]$ vim myhadoop.sh

在文件中写入:

  1. #!/bin/bash
  2. if [ $# -lt 1 ]
  3. then
  4. echo "No Args Input..."
  5. exit ;
  6. fi
  7. case $1 in
  8. "start")
  9. echo " =================== 启动 hadoop集群 ==================="
  10. echo " --------------- 启动 hdfs ---------------"
  11. ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
  12. echo " --------------- 启动 yarn ---------------"
  13. ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
  14. echo " --------------- 启动 historyserver ---------------"
  15. ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
  16. ;;
  17. "stop")
  18. echo " =================== 关闭 hadoop集群 ==================="
  19. echo " --------------- 关闭 historyserver ---------------"
  20. ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
  21. echo " --------------- 关闭 yarn ---------------"
  22. ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
  23. echo " --------------- 关闭 hdfs ---------------"
  24. ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
  25. ;;
  26. *)
  27. echo "Input Args Error..."
  28. ;;
  29. esac

赋予脚本执行权限

  1. [qtbhy@hadoop102 bin]$ chmod 777 myhadoop.sh

测试
QQ截图20220428193657.png
QQ截图20220428193832.png

  1. 查看三台服务器Java进程脚本:jpsall

在/home/qtbhy/bin目录下创建jpsall脚本

  1. [qtbhy@hadoop102 bin]$ vim jpsall

写入如下内容:

  1. #!/bin/bash
  2. for host in hadoop102 hadoop103 hadoop104
  3. do
  4. echo =============== $host ===============
  5. ssh $host jps
  6. done

赋予脚本执行权限

  1. [qtbhy@hadoop102 bin]$ chmod 777 jpsall

测试:
QQ截图20220428194225.png

  1. 分发脚本
    1. [qtbhy@hadoop102 ~]$ xsync bin/

    常用端口号

    | | 端口名称 | Hadoop 2.x | Hadoop 3.x | | —- | —- | —- | —- | | HDFS | NameNode内部通信端口 | 8020/9000 | 8020/9000/9820 | | | NameNode HTTP UI
    (对用户的查询端口) | 50070 | 9870 | | YARN | MapReduce查看执行任务端口 | 8088 | 8088 | | | 历史服务器通信端口 | 19888 | 19888 |

集群时间同步

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。

  1. 需求

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

  1. 时间服务器配置(用root用户)

    1. 查看所有节点ntpd服务状态和开机自启动状态

      1. [qtbhy@hadoop102 ~]$ sudo systemctl status ntpd
      2. [qtbhy@hadoop102 ~]$ sudo systemctl start ntpd
      3. [qtbhy@hadoop102 ~]$ sudo systemctl is-enabled ntpd
    2. 修改hadoop102的ntp.conf配置文件

      1. [qtbhy@hadoop102 ~]$ sudo vim /etc/ntp.conf
    3. 修改内容如下

修改1(授权192.168.10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间)

  1. #restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
  2. restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap

修改2(集群在局域网中,不使用其他互联网上的时间)

  1. server 0.centos.pool.ntp.org iburst
  2. server 1.centos.pool.ntp.org iburst
  3. server 2.centos.pool.ntp.org iburst
  4. server 3.centos.pool.ntp.org iburst
  5. #server 0.centos.pool.ntp.org iburst
  6. #server 1.centos.pool.ntp.org iburst
  7. #server 2.centos.pool.ntp.org iburst
  8. #server 3.centos.pool.ntp.org iburst

添加3
当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步

  1. server 127.127.1.0
  2. fudge 127.127.1.0 stratum 10
  1. 修改hadoop102的/etc/sysconfig/ntpd

    1. [qtbhy@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd

    增加内容如下(让硬件时间与系统时间一起同步)

    1. SYNC_HWCLOCK=yes
  2. 重新启动ntpd服务

    1. [qtbhy@hadoop102 ~]$ sudo systemctl start ntpd
  3. 设置ntpd服务开机启动

    1. [qtbhy@hadoop102 ~]$ sudo systemctl enable ntpd
  1. 其他机器配置(root用户)

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

  1. [qtbhy@hadoop103 ~]$ sudo systemctl stop ntpd
  2. [qtbhy@hadoop103 ~]$ sudo systemctl disable ntpd
  3. [qtbhy@hadoop104 ~]$ sudo systemctl stop ntpd
  4. [qtbhy@hadoop104 ~]$ sudo systemctl disable ntpd

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

  1. [qtbhy@hadoop103 ~]$ sudo crontab -e

编写定时任务如下:

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

(3)修改任意机器时间

  1. [qtbhy@hadoop103 ~]$ sudo date -s "2021-9-11 11:11:11"

(4)1分钟后查看机器是否与时间服务器同步

  1. [qtbhy@hadoop103 ~]$ sudo date
  1. [qtbhy@hadoop102 ~]$ cd /opt/module/hadoop-3.1.3/
  2. [qtbhy@hadoop102 hadoop-3.1.3]$ cd etc/hadoop
  3. [qtbhy@hadoop102 hadoop]$ vim core-site.xml
  1. <!-- 配置HDFS网页登录使用的静态用户为qtbhy -->
  2. <property>
  3. <name>hadoop.http.staticuser.user</name>
  4. <value>qtbhy</value>
  5. </property>
[qtbhy@hadoop102 hadoop]$ xsync core-site.xml
[qtbhy@hadoop102 hadoop]$ myhadoop.sh stop
[qtbhy@hadoop102 hadoop]$ myhadoop.sh start