文章目录

一、概念

官方文档:https://hadoop.apache.org/docs/

1. Hadoop是什么

  1. Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
  2. 主要解决,海量数据的存储和海量数据的分析计算问题。
  3. 广义上来说,Hadoop 通常是指一 个更广泛的概念——Hadoop生态圈。
    在这里插入图片描述

2. Hadoop优势(4高)

  1. 高可靠性:Hadoop 底层维护多个数据副本,所以即使 Hadoop 某个计算元素或存储出现故障,也不会导致数据的丢失。
  2. 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
  3. 高效性:在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任务处理速度。
  4. 高容错性:能够自动将失败的任务重新分配。

3. Hadoop组成

在这里插入图片描述
在 Hadoop1.x 时代 Hadoop 中的 MapReduce 同时处理业务逻辑运算和资源的调度,耦合性较大。
在 Hadoop2.x 时代,增加了 Yarn。Yarn 只负责资源的调度,MapReduce 只负责运算。
Hadoop3.x在组成上没有变化。

1)HDFS架构概述

Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统

  1. NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限) , 以及每个文件的块列表和块所在的DataNode等。

  2. DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。

  3. Secondary NameNode(2nn) :每隔一段时间对 NameNode 元数据备份。

在这里插入图片描述

2)YARN架构概述

Yet Another Resource Negotiator 简称 YARN,另一种资源协调者,是 Hadoop 的资源管理器

  1. ResourceManager(RM):整个集群资源(内存、CPU等)的老大,主要作用如下:
    a. 处理客户端请求
    b. 监控NodeManager
    c. 启动或监控ApplicationMaster
    d. 资源的分配与调度

  2. NodeManager(NM):单个节点服务器资源老大,主要作用如下:
    a. 管理单个节点上的资源
    b. 处理来自 ResourceManager 的命令
    c. 处理来自 ApplicationMaster 的命令

  3. ApplicationMaster(AM):单个任务运行的老大,作用如下:
    a. 为应用程序申请资源并分配给内部的任务
    b. 任务的监控与容错

  4. Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、 磁盘、网络等。

在这里插入图片描述

3)MapReduce架构概述

MapReduce 将计算过程分为两个阶段:Map 和 Reduce

  1. Map 阶段并行处理输入数据
  2. Reduce 阶段对Map结果进行汇总
    在这里插入图片描述

4)HDFS、YARN、MapReduce三者关系

在这里插入图片描述

二、安装

1. 前提条件

安装模板虚拟机,IP地址 10.211.55.100、主机名称 hadoop100、cpu 2 核、内存2G、硬盘64G

2. 准备模板虚拟机

jdk下载地址:https://www.oracle.com/java/technologies/downloads/#java8
hadoop下载地址:https://hadoop.apache.org/releases.html

# 1. 安装基本软件
yum install -y epel-release net-tools vim glibc glibc.i686

# 2. 关闭防火墙,关闭防火墙开机自启
systemctl stop firewalld
systemctl disable firewalld.service

# 3. 卸载虚拟机自带的JDK
# rpm -qa:查询所安装的所有rpm软件包
# grep -i:忽略大小写
# xargs -n1:表示每次只传递一个参数
# rpm -e –nodeps:强制卸载软件
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps 

# 4. 安装JDK
tar -zxvf jdk-8u281-linux-i586.tar.gz -C /usr/local/
# 配置环境变量,在/etc/profile.d目录下新建一个 my_env.sh
vim /etc/profile.d/my_env.sh
# 文件中添加:
export JAVA_HOME="/usr/local/jdk1.8.0_281"
export PATH="$PATH:$JAVA_HOME/bin"
# 刷新配置
source /etc/profile
# 检查是否安装成功
java -version

# 5. 安装Hadoop
tar -zxvf hadoop-3.3.1.tar.gz -C /usr/local/
vim /etc/profile.d/my_env.sh
# 文件中添加:
export HADOOP_HOME="/usr/local/hadoop-3.3.1"
export PATH="$PATH:$HADOOP_HOME/bin"
export PATH="$PATH:$HADOOP_HOME/sbin"
# 刷新配置
source /etc/profile
# 检查是否安装成功
hadoop

将模版虚拟机克隆 3 份,并配置好相应的 /etc/hosts

hostnameip
hadoop10210.211.55.102
hadoop10310.211.55.103
hadoop10410.211.55.104

3. 目录结构

(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

4. 分发命令与脚本配置

1)scp(secure copy)安全拷贝

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

a. 基本语法
scp    -r        $pdir/$fname          $user@$host:$pdir/$fname
命令   递归     要拷贝的文件路径/名称   	目的地用户@主机:目的地路径/名称

scp    -r        $user@$host:$pdir/$fname          $pdir/$fname
命令   递归     源服务器用户@主机:源服务器路径/名称  	要拷贝的文件路径/名称

scp    -r        $user@$host:$pdir/$fname          $user@$host:$pdir/$fname
命令   递归     源服务器用户@主机:源服务器路径/名称  	目的地用户@主机:目的地路径/名称
b. 例子
# hadoop102(运行命令的机器) --> hadoop103
scp -r /root/pkg/test/ root@hadoop103:/root/pkg/test/

# hadoop102 --> hadoop104(运行命令的机器)
scp -r root@hadoop102:/root/pkg/test/ /root/pkg/test/

# hadoop102 --> hadoop104(在hadoop103上运行命令)
scp -r root@hadoop102:/root/pkg/test/ root@hadoop104:/root/pkg/test/

2)rsync远程同步工具

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsyncscp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。一般当第一次拷贝时,使用 scp 全量初始化,之后有文件更改时,再使用 rsync 进行增量修改

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

rsync    -av     $user@$host:$pdir/$fname          $pdir/$fname
命令   选项参数   源服务器用户@主机:源服务器路径/名称   要拷贝的文件路径/名称

选项参数说明

选项功能
-a归档拷贝
-v显示复制过程
b. 案例实操
# hadoop102(运行命令的机器) --> hadoop103
rsync -av /root/pkg/test/ root@hadoop103:/root/pkg/test/

# hadoop102 --> hadoop104(运行命令的机器)
rsync -av root@hadoop102:/root/pkg/test/ /root/pkg/test/

3)xsync集群分发脚本

自定义一个脚本,需求如下:循环复制文件到所有节点的相同目录下

a. 需求分析:
  • 期望脚本:xsync 要同步的文件名称
b. 脚本实现
  1. 创建 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. 获取父目录,-P 直接切换到这个目录链接的地址
                    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
    
  2. 修改脚本 xsync 具有执行权限

    chmod +x xsync
    
c. 测试脚本

将脚本路径加入全局变量,方便直接调用

# 加入全局变量
$ cat /etc/profile.d/my_env.sh
#自定义路径
export PATH="$PATH:/root/bin"
$ source /etc/profile

# 同步文件
$ xsync /etc/profile.d/my_env.sh

# root调用时,要指定全路径
$ sudo /root/bin/xsync /root/bin/

4)SSH无密登录配置

a. 配置ssh
  1. 先使用 ssh 连接另一台服务器(hadoop102 -> hadoop103):

    ssh hadoop103
    # 如果出现如下内容
    Are you sure you want to continue connecting (yes/no)? 
    # 输入yes,并回车
    
  2. 退回到 hadoop102,会在当前用户目录下生成 .ssh 隐藏目录。(ls -a 查看)

b. 无密钥配置
1. 免密登录原理

在这里插入图片描述

2. 生成公钥和私钥
cd ~/.ssh
ssh-keygen -t rsa
#然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
3. 将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

此时,hadoop102 访问其它机器就可以免密登录,如果需要在其它机器免密登录 hadoop102,则在其它机器上生成公钥和私钥,再拷贝到 hadoop102

c. .ssh 文件夹下(~/.ssh)的文件功能解释
  • known_hosts:记录 ssh 访问过计算机的公钥(public key)
  • id_rsa:生成的私钥
  • id_rsa.pub:生成的公钥
  • authorized_keys:存放授权过的无密登录服务器公钥

5. 集群配置

1)集群部署规划

注意:

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

DataNode
SecondaryNameNode
DataNode
YARNNodeManagerNodeManager
ResourceManager
NodeManager

2)配置文件说明

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

a. 默认配置文件
要获取的默认文件jar 包位置文件存放在Hadoop的jar包中的位置
[core-default.xml]hadoop-3.3.1/share/hadoop/common/hadoop-common-3.1.3.jar/core-default.xml
[hdfs-default.xml]hadoop-3.3.1/share/hadoop/hdfs/hadoop-hdfs-3.1.3.jar/hdfs-default.xml
[yarn-default.xml]hadoop-3.3.1/share/hadoop/yarn/hadoop-yarn-common-3.1.3.jar/yarn-default.xml
[mapred-default.xml]hadoop-3.3.1/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml
b. 自定义配置文件

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

3)配置集群

注意:要在三台机器上都进行配置

a. core-site.xml(核心配置文件)
vim $HADOOP_HOME/etc/hadoop/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>/usr/local/hadoop-3.3.1/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为root -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
</configuration>
b. hdfs-site.xml(HDFS配置文件)
vim $HADOOP_HOME/etc/hadoop/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>
c. yarn-site.xml(YARN配置文件)
vim $HADOOP_HOME/etc/hadoop/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>
d. mapred-site.xml(MapReduce配置文件)
vim $HADOOP_HOME/etc/hadoop/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>
e. etc/hadoop/workers

修改 $HADOOP_HOME/etc/hadoop/workers 文件,指定工作节点

hadoop102
hadoop103
hadoop104

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

4)启动集群

a. 格式化 NameNode

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

hdfs namenode -format

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

格式化成功,会在 hadoop 目录下生成 data 目录,并且 data 目录中会生成 dfs/name 目录:

> cat /usr/local/hadoop-3.3.1/data/dfs/name/current/VERSION
#Sun Oct 24 15:25:40 CST 2021
namespaceID=446938602
clusterID=CID-8269a105-a140-4588-8149-f5a74247cd4a
cTime=1635060340971
storageType=NAME_NODE
blockpoolID=BP-713295509-10.211.55.102-1635060340971
layoutVersion=-66
b. 启动 HDFS
$ sbin/start-dfs.sh

启动成功,Web 端查看 HDFSNameNode,浏览器中输入:http://hadoop102:9870
(b)查看HDFS上存储的数据信息

我这里启动报错了,记录一下:

Starting namenodes on [hadoop102]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.

解决办法:
配置vi sbin/start-dfs.sh添加

```sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

配置vi sbin/stop-dfs.sh添加

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

配置vi sbin/start-yarn.sh添加

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

配置vi sbin/stop-yarn.sh 添加

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn

最后将配置同步到集群的其它节点上

c. 启动 YARN

在配置了 ResourceManager 的节点(hadoop103)启动 YARN

$ sbin/start-yarn.sh

启动成功,Web 端查看 YARN 的 ResourceManager,浏览器中输入:http://hadoop103:8088
(b)查看YARN上运行的Job信息

5)集群基本测试

a. 上传文件到集群
# 上传小文件
$ hadoop fs -mkdir /input
$ hadoop fs -put $HADOOP_HOME/README.txt /input

# 上传大文件
$ hadoop fs -put /root/pkg/jdk-8u281-linux-i586.tar.gz /

在这里插入图片描述

b. 上传文件后查看文件存放在什么位置
# 查看HDFS文件存储路径
$ pwd
/usr/local/hadoop-3.3.1/data/dfs/data/current/BP-713295509-10.211.55.102-1635060340971/current/finalized/subdir0/subdir0
# 查看HDFS在磁盘存储文件内容
$ cat blk_1073741825
c. 拼接

小文件可以直接查看,大文件需要拼接后查看:

$ ll
总用量 534560
-rw-r--r--. 1 root  root        175 1024 16:07 blk_1073741825
-rw-r--r--. 1 root  root         11 1024 16:07 blk_1073741825_1001.meta
-rw-r--r--. 1 root  root  134217728 1024 16:10 blk_1073741826
-rw-r--r--. 1 root  root    1048583 1024 16:10 blk_1073741826_1002.meta
-rw-r--r--. 1 root  root    9382983 1024 16:10 blk_1073741827
-rw-r--r--. 1 root  root      73315 1024 16:10 blk_1073741827_1003.meta
$ cat blk_1073741826 >> tmp.tar.gz
$ cat blk_1073741827 >> tmp.tar.gz
$ tar -zxvf tmp.tar.gz
d. 下载
$ hadoop fs -get /jdk-8u281-linux-i586.tar.gz ./
e. 执行wordcount程序
$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output

查看统计文件:
在这里插入图片描述
查看 YARN 详情:
在这里插入图片描述

6)配置历史服务器

默认 MapReduce Job 是存在内存中的,重启之后就会丢失,所以需要配置历史服务器,将信息存储在 HDFS 中。具体配置步骤如下:

a. 配置mapred-site.xml
$ vim $HADOOP_HOME/etc/hadoop/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>
b. 分发配置到其它机器上
$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
c. 在 hadoop102 启动历史服务器
$ mapred --daemon start historyserver
d. 查看历史服务器是否启动
$ jps
9025 NodeManager
7810 NameNode
9364 JobHistoryServer
6295 DataNode
9420 Jps
e. 查看 JobHistory Web 页面

http://hadoop102:19888/jobhistory

再次执行上面的 wordcount 程序:

# 删除上次执行结果
$ hadoop fs -rm -r /output
# 统计单词数
$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output

查看 History 页面:
在这里插入图片描述

7)配置日志的聚集

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

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManagerResourceManagerHistoryServer

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

a. 配置yarn-site.xml
$ vim $HADOOP_HOME/etc/hadoop/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>
b. 分发配置
$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
c. 关闭NodeManager 、ResourceManager和HistoryServer
# 在hadoop103上执行
$ sbin/stop-yarn.sh
# 在hadoop102上执行
$ mapred --daemon stop historyserver
d. 启动NodeManager 、ResourceManage和HistoryServer
# 在hadoop103上执行
$ start-yarn.sh
# 在hadoop102上执行
$ mapred --daemon start historyserver
e. 测试,再次执行WordCount程序
#删除HDFS上已经存在的输出文件
$ hadoop fs -rm -r /output
#执行
$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output
g. 查看日志
  1. 历史服务器地址:http://hadoop102:19888/jobhistory

  2. 历史任务列表
    在这里插入图片描述

  3. 查看任务运行日志
    在这里插入图片描述

  4. 运行日志详情
    在这里插入图片描述

8)集群启动/停止方式总结

a. 各个模块分开启动/停止(配置ssh是前提)常用
# 整体启动/停止HDFS
$ start-dfs.sh/stop-dfs.sh

# 整体启动/停止YARN
$ start-yarn.sh/stop-yarn.sh
b. 各个服务组件逐一启动/停止
# 分别启动/停止HDFS组件
$ hdfs --daemon start/stop namenode/datanode/secondarynamenode
# 启动/停止YARN
$ yarn --daemon start/stop resourcemanager/nodemanager
c. 编写Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
# /root/bin 文件夹已加入到 PATH 环境变量中
$ cd /root/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 "/usr/local/hadoop-3.3.1/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/usr/local/hadoop-3.3.1/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/usr/local/hadoop-3.3.1/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/usr/local/hadoop-3.3.1/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/usr/local/hadoop-3.3.1/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/usr/local/hadoop-3.3.1/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

保存后退出,然后赋予脚本执行权限并分发脚本给所有节点

$ chmod +x myhadoop.sh
$ xsync /root/bin
d. 编写查看三台服务器Java进程脚本:jpsall
$ cd /home/atguigu/bin
$ vim jpsall

输入如下内容

#!/bin/bash

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

保存后退出,然后赋予脚本执行权限并分发脚本给所有节点

$ chmod +x jpsall
$ xsync /root/bin

9)常用端口号说明

端口名称Hadoop3.xHadoop2.x
NameNode内部通信端口8020/9000/98208020/9000
NameNode HTTP UI987050070
MapReduce查看执行任务端口80888088
历史服务器通信端口1988819888

10)集群时间同步(离线)

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

a. 需求

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

b. 时间服务器配置(必须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
  1. 修改1(授权 10.211.55.0 - 10.211.55.255 网段上的所有机器可以从这台机器上查询和同步时间)

    #在这行下添加
    #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    restrict 10.211.55.0 mask 255.255.255.0 nomodify notrap
    
  2. 修改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. 添加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
# ntpd服务开机启动
$ sudo systemctl enable ntpd
c. 其他机器配置(必须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

三、常见错误及解决方案

1. 重装 Hadoop

  1. 停止所有 Hadoop 相关进程
  2. 删除所有节点的 datalogs 目录,默认是在 /tmp 目录下,如果配置了该目录,就去配置的目录下删除
  3. 重新格式化 NameNode(2.5.4),并启动集群
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐