尚硅谷大数据—搭建Hadoop集群—软件安装

1. 前期准备

1. 在hadoop102安装JDK, 使用root账户登录系统

注意:安装JDK前,一定确保提前删除了虚拟机自带的JDK

# 查看系统自带的java版本
java -version
# 查找JDK相关包是否被安装
rpm -qa |grep jdk
# 使用yum -y remove 命令卸载已经安装的jdk相关包
yum -y remove copy-jdk-configs-3.3-2.el7.noarch
yum -y remove java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
yum -y remove java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
yum -y remove java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
yum -y remove java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64
# 再次查找JDK相关包是否被安装, 结果为空, 表示全部卸载
rpm -qa |grep jdk
# 再次查看系统自带的java版本
java -version

在这里插入图片描述
在这里插入图片描述

安装新的jdk

  1. 新建目录
mkdir /opt/module
mkdir /opt/software
  1. 将安装包上传到/opt/software目录下
    在这里插入图片描述
  2. 解压安装包
# 进入/opt/software目录
cd /opt/software
# 解压jdk到/opt/module/目录下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
  1. 配置JDK环境变量
# 进入/etc/profile.d/目录下
cd /etc/profile.d/

# 在/etc/profile.d/文件下新建一个my_env.sh文件, 里面用来存放自己安装软件的环境变量信息
vim /etc/profile.d/my_env.sh

# 在/etc/profile.d/my_env.sh中添加java环境变量信息
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

# source一下/etc/profile文件,让新的环境变量PATH生效
source /etc/profile	

# 查看是否安装成功, 如果出现版本号就说明安装成功
java -version

# 如果java -version命令没有出现版本号, 就需要重启系统
reboot

为什么要在/etc/profile.d下新建一个my_env.sh
在Linux的系统配置文件 /etc/profile 中有一个

[root@hadoop102 software]# cat /etc/profile
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

pathmunge () {
    
    
    case ":${
     
     PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}


if [ -x /usr/bin/id ]; then
    if [ -z "$EUID" ]; then
        # ksh workaround
        EUID=`/usr/bin/id -u`
        UID=`/usr/bin/id -ru`
    fi
    USER="`/usr/bin/id -un`"
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
fi

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then 
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

unset i
unset -f pathmunge
[root@hadoop102 software]# 

2. 在hadoop102安装Hadoop, 使用root账户登录系统

安装hadoop

  1. 新建目录
mkdir /opt/module
mkdir /opt/software
  1. 将安装包上传到/opt/software目录下
    在这里插入图片描述
  2. 解压安装包
# 进入/opt/software目录
cd /opt/software
# 解压jdk到/opt/module/目录下
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
  1. 配置Hadoop环境变量
# 进入/etc/profile.d/目录下
cd /etc/profile.d/

# 在/etc/profile.d/文件下新建一个my_env.sh文件, 里面用来存放自己安装软件的环境变量信息
vim /etc/profile.d/my_env.sh

# 在/etc/profile.d/my_env.sh中添加Hadoop环境变量信息
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

# source一下/etc/profile文件,让新的环境变量PATH生效
source /etc/profile	

# 查看是否安装成功, 如果出现版本号就说明安装成功
hadoop version

# 如果java -version命令没有出现版本号, 就需要重启系统
reboot

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

3. 集群分发脚本

将JDK与hadoop的安装文件从hadoop102复制到hadoop103与hadoop104

3.1 scp(secure copy)安全拷贝

前提: 准备三台Linux机器, 配置静态ip地址, 配置主机名称, 配置主机名称映射hosts文件
在这里插入图片描述
前提: 在hadoop102、hadoop103、hadoop104都已经创建好 /opt/module、 /opt/software 两个目录

chown root:root -R /opt/module
scp   -r      $user@$host:$pdir/$fname               $user@$host:$pdir/$fname
命令  递归    来源地登录用户名@主机:来源地路径/名称     目的地登录用户名@主机:目的地路径/名称
如果不填写 $user@$host 则默认是本机
  1. 在hadoop102上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上。
scp -r /opt/module/jdk1.8.0_212  root@hadoop103:/opt/module
  1. 在hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上
scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
  1. 在hadoop103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上
scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module

3.2 rsync远程同步工具

用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去

rsync   -av      $user@$host:$pdir/$fname      $user@$host:$pdir/$fname
命令   选项参数   要拷贝的用户@主机:文件路径/名称   目的地用户@主机:目的地路径/名称
  1. 删除hadoop103中/opt/module/hadoop-3.1.3/wcinput
rm  -rf  /opt/module/hadoop-3.1.3/wcinput
  1. 在hadoop102上, 同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103
rsync -av hadoop-3.1.3/ root@hadoop103:/opt/module/hadoop-3.1.3/

3.3 xsync集群分发脚本

  1. 创建文件
cd /bin
vim xsync
  1. 在xsync中添加以下脚本
#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit; #退出
fi # if结束

#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)
				# $host是上面for循环的临时变量, ssh命令连接远程主机
                ssh $host "mkdir -p $pdir" 
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done
  1. 修改脚本 xsync 具有执行权限
chmod +x xsync
或者
chmod 777 xsync
  1. 将hadoop102的 /etc/profile.d/my_env.sh 文件同步到 hadoop103 和 hadoop104
    在hadoop103 和 hadoop104的 /etc/profile.d/ 目录下会多出一个 my_env.sh 文件
# xsync命令 路径要写全
/bin/xsync /etc/profile.d/my_env.sh

在这里插入图片描述
在这里插入图片描述

  1. 使 hadoop103与hadoop104的环境变量生效
[root@hadoop103 ~]# source /etc/profile
[root@hadoop104 ~]# source /etc/profile
  1. 测试环境变量是否生效
[root@hadoop103 ~]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
[root@hadoop103 ~]# hadoop version
Hadoop 3.1.3
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
Compiled by ztang on 2019-09-12T02:47Z
Compiled with protoc 2.5.0
From source with checksum ec785077c385118ac91aadde5ec9799
This command was run using /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar
[root@hadoop103 ~]#

[root@hadoop104 ~]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

[root@hadoop104 ~]# hadoop version
Hadoop 3.1.3
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
Compiled by ztang on 2019-09-12T02:47Z
Compiled with protoc 2.5.0
From source with checksum ec785077c385118ac91aadde5ec9799
This command was run using /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar
[root@hadoop104 ~]# 

4. SSH无密登录配置

普通ssh语法

ssh hadoop103
# 输入密码后连接到 hadoop103 
  1. 免密登录原理
    在这里插入图片描述
  2. 生成公钥和私钥
    三台机器全部要进行以下操作, 这样在任意一台机器都可以对其他机器进行免密登录, 这里我使用的是 root 用户
# 进入/root目录下
cd /root
# 生成公钥和私钥, 执行命令后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
ssh-keygen -t rsa
# 进入/root/.ssh查看
cd /root/.ssh

# 将公钥拷贝到要免密登录的目标机器上, 输入 yes , 输入对应机器的密码
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

# 测试, 无需输入密码
ssh hadoop102
ssh hadoop103
ssh hadoop104

/root/.ssh 目录下各文件功能说明

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

2. 集群配置

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

cd $HADOOP_HOME/etc/hadoop
vim core-site.xml

默认的 configuration 标签中的内容是空的, 我们加上以下内容

<?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>atguigu</value>
    </property>
</configuration>

3.2 HDFS配置文件 : hdfs-site.xml

cd $HADOOP_HOME/etc/hadoop
vim hdfs-site.xml

默认的 configuration 标签中的内容是空的, 我们加上以下内容

<?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

cd $HADOOP_HOME/etc/hadoop
vim yarn-site.xml

默认的 configuration 标签中的内容是空的, 我们加上以下内容

<?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

cd $HADOOP_HOME/etc/hadoop
vim mapred-site.xml

默认的 configuration 标签中的内容是空的, 我们加上以下内容

<?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.5 在集群上分发hadoop102上配置好的Hadoop配置文件

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

去103和104上查看文件分发情况

[root@hadoop103 hadoop]# cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[root@hadoop104 hadoop]# cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

4. 启动集群

4.1 配置workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

在文件中增加下面内容, 集群上有几个节点, 这里就配置几个

hadoop102
hadoop103
hadoop104

给其他节点同步配置文件

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

4.2 在hadoop102上启动HDFS

cd /opt/module/hadoop-3.1.3
# 如果集群是第一次启动,需要在hadoop102节点格式化NameNode
hdfs namenode -format
# 启动HDFS
sbin/start-dfs.sh
# 启动报错, 重新启动之前需要关闭HDFS
sbin/stop-dfs.sh 

使用 jsp 命令测试 HDFS 启动结果

# hadoop102中启动了 NameNode 与 DataNode
[root@hadoop102 hadoop-3.1.3]# jps
9202 DataNode
9364 Jps
9048 NameNode

# hadoop103中只启动 DataNode
[root@hadoop103 hadoop-3.1.3]# jps
8649 DataNode
8733 Jps

# hadoop102中启动了 SecondaryNameNode 与 DataNode
[root@hadoop104 hadoop-3.1.3]# jps
9427 Jps
9379 SecondaryNameNode
9274 DataNode

第一次启动的时候报了下面这个错误, 解决方案: 使用root用户启动hadoop-3.1.3报错

[root@hadoop102 hadoop-3.1.3]# sbin/start-dfs.sh
Starting namenodes on [hadoop102]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop104]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

启动 HDFS出现了下面的情况, 解决方案: 新版Hadoop这个配置的参数更新了导致启动失败

[root@hadoop102 hadoop-3.1.3]# sbin/start-dfs.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [hadoop102]
上一次登录:三 928 15:39:17 CST 2022从 hadoop104pts/1 上
Starting datanodes
上一次登录:三 928 18:37:26 CST 2022pts/0 上

4.3 在hadoop103上启动YARN

cd /opt/module/hadoop-3.1.3
# 启动 YARN
sbin/start-yarn.sh
# 关闭 YARN
sbin/stop-yarn.sh 

使用 jps 命令测试 YARN启动结果

# hadoop102的 HDFS 中启动了 NameNode 与 DataNode
# hadoop102的 YARN 中启动了 NodeManager
[root@hadoop102 hadoop-3.1.3]# jps
13161 NodeManager
13355 Jps
11789 NameNode
11967 DataNode


# hadoop103的 HDFS 中只启动 DataNode
# hadoop102的 YARN 中启动了 ResourceManager 与 NodeManager
[root@hadoop103 hadoop-3.1.3]# jps
11394 Jps
9254 DataNode
10814 ResourceManager
11150 NodeManager


# hadoop102的 HDFS 中启动了 SecondaryNameNode 与 DataNode
# hadoop102的 YARN 中启动了 NodeManager
[root@hadoop104 hadoop-3.1.3]# jps
9379 SecondaryNameNode
10617 Jps
9274 DataNode
10411 NodeManager

启动 HDFS出现了下面的情况, 解决方案: 启动start-yarn.sh报错ERROR: Attempting to operate on yarn resourcemanager as root ERROR: but there is no

[root@hadoop103 hadoop-3.1.3]# sbin/start-yarn.sh
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
上一次登录:三 928 15:39:32 CST 2022从 hadoop104pts/2 上
^C

4.4 Web端查看集群信息

关闭hadoop102、hadoop03、hadoop104 的防火墙

systemctl stop firewalld

浏览器中输入:http://hadoop102:9870
查看HDFS上存储的数据信息

在这里插入图片描述

浏览器中输入:http://hadoop103:8088
查看YARN上运行的Job信息

在这里插入图片描述

5. 集群基本测试

5.1 上传文件到集群

命令 : hadoop fs -put 本地文件 HDFS目录

# 在 HDFS 的根目录下创建一个 input文件夹
hadoop fs -mkdir /input
# 將 /hadoop-3.1.3/README.txt上传到HDFS中新建的 input 目录下
hadoop fs -put $HADOOP_HOME/README.txt /input
# 在 HDFS 隔壁目录下上传 jdk-8u212-linux-x64.tar.gz
hadoop fs -put  /opt/software/jdk-8u212-linux-x64.tar.gz  /

刷新HDFS的web页面http://hadoop102:9870/explorer.html#/
新建input目录
在这里插入图片描述
上传的README.txt文件
在这里插入图片描述
上传的 jdk-8u212-linux-x64.tar.gz
在这里插入图片描述

5.2 HDFS 文件存储位置

前面在core-site.xml中配置, 文件存储在/opt/module/hadoop-3.1.3/data/ 下

# 在 hadoop102 hadoop103 hadoop104 做个三次备份
cd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-383546732-192.168.10.102-1664361440225/current/finalized/subdir0/subdir0
# 查看文件内容, 发现是刚刚上传的 README.txt 中的内容
cat blk_1073741825

在这里插入图片描述
在这里插入图片描述

5.3 下载HDFS 上的文件到本地

命令: hadoop fs -get HDFS上文件 本地目录

hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./

5.4 测试YARN

WordCount是Hadoop默认自带的“Hello World程序”——用来单词计数

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

刷新HDFS的web页面http://hadoop102:9870/explorer.html#/
HDFS 的 / 目录下多出了一个 output 目录
刷新YARN的web页面: http://hadoop103:8088/cluster
在这里插入图片描述

6. 配置历史服务器

上面的YARN的web页面中点击纪录后面的 History会跳转失败, 失败的原因是没有配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器
配置mapred-site.xml

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

在 configuration 标签中添加如下内容

<?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>

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

<!-- 历史服务器web端地址 -->
   <property>
       <name>mapreduce.jobhistory.webapp.address</name>
       <value>hadoop102:19888</value>
   </property>
</configuration>
# 分发配置
/bin/xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
# 在hadoop102启动历史服务器
mapred --daemon start historyserver

查看是否启动成功

[root@hadoop102 hadoop]# jps
12386 JobHistoryServer # 历史服务器
12419 Jps
2952 DataNode
2799 NameNode

Web端查看历史服务信息 http://hadoop102:19888/jobhistory
在这里插入图片描述

7. 配置日志的聚集

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

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

在 configuration 标签中添加如下内容

<?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>

   <!-- 开启日志聚集功能 -->
   <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>
</configuration>
# 分发配置
/bin/xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。

# 进入hadoop目录
cd $HADOOP_HOME
# 关闭NodeManager 、ResourceManager
sbin/stop-yarn.sh
# 关闭HistoryServer
mapred --daemon stop historyserver
# 启动NodeManager 、ResourceManage
start-yarn.sh
# 启动HistoryServer
mapred --daemon start historyserver

删除HDFS中上次执行生成的文件

hadoop fs -rm -r /output

执行WordCount程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

历史记录中多出一条
在这里插入图片描述
在这里插入图片描述

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

cd /opt/module/hadoop-3.1.3/sbin
# 启动HDFS
start-dfs.sh
# 停止HDFS
stop-dfs.sh
# 启动YARN
start-yarn.sh
# 停止YARN
stop-yarn.sh
# 关闭HistoryServer
mapred --daemon stop historyserver

cd /opt/module/hadoop-3.1.3/bin
# 启动NodeManager 、ResourceManage
start-yarn.sh
# 启动HistoryServer
mapred --daemon start historyserver

8.1 集群同时启动与停止脚本

cd /opt/module/hadoop-3.1.3/sbin
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

给脚本执行权限

chmod +x myhadoop.sh

8.2 查看三台服务器Java进程脚本

cd /opt/module/hadoop-3.1.3/sbin
vim jpsall.sh
#!/bin/bash

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

给脚本执行权限

chmod +x jpsall.sh

给整个集群同步刚刚编辑的两个脚本

/bin/xsync /opt/module/hadoop-3.1.3/sbin

8.4 测试脚本

# 启动集群
myhadoop.sh start
# 停止集群
myhadoop.sh stop
# 查看三台服务器Java进程
jpsall.sh

9. 端口变动

端口名称 Hadoop2.x Hadoop3.x
NameNode内部通信端口 8020 / 9000 8020 / 9000/9820
NameNode HTTP UI 50070 9870
MapReduce查看执行任务端口 8088 8088
历史服务器通信端口 19888 19888

10. 集群时间同步

找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。

# 查看 ntpd 状态
systemctl status ntpd
# 启动 ntpd 
systemctl start ntpd
# 设置 ntpd 服务开机自启动
systemctl is-enabled ntpd

修改hadoop102的ntp.conf配置文件

vim /etc/ntp.conf


将 # restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
改成 : 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 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 文件

vim /etc/sysconfig/ntpd

SYNC_HWCLOCK=yes

重新启动ntpd服务

systemctl start ntpd

设置ntpd服务开机启动

systemctl enable ntpd

hadoop103 与 hadoop104中修改

# 停止 ntpd
systemctl stop ntpd
# 设置开机自启动
systemctl disable ntpd
# 添加定时任务
crontab -e
# 定时任务脚本
*/1 * * * * /usr/sbin/ntpdate hadoop102

# 更改时间
date -s "2021-9-11 11:11:11"
# 查看时间, 一分钟后再次查看时间
date

11. 遇到的问题

11.1 在虚拟机上的Hadoop启动正常,xshell 连接正常但是在浏览器中无法访问: http://hadoop102:9870

先看是否已经关闭防火墙

# 启动防火墙: 
systemctl start firewalld
# 查看防火墙状态: 
systemctl status firewalld
# 停止防火墙: 
systemctl disable firewalld
# 禁用防火墙: 
systemctl stop firewalld

再看 hadoop是否启动

jps

再看windows的 host 文件是否配置了 hadoop102映射
打开 C:\Windows\System32\drivers\etc 中的 hosts文件
在这里插入图片描述
配置完成时候要刷新 windows DNS解析
打开 cmd, 输入

ipconfig/flushdns

猜你喜欢

转载自blog.csdn.net/qq_44154912/article/details/127065971