本地Hadoop完全分布式部署

本地Hadoop集群部署

本文存储于Notion个人笔记:本地Hadoop完全分布式部署

零、先看不后悔

友情链接

CentOS7超详细安装教程

💡 需求:用3台虚拟机进行Hadoop集群部署
💡 虚拟机部署规划:

MasterDatanode02Datanode03
IP192.168.31.200192.168.31.210192.168.31.220
HDFSDataNode
NameNode
DatanodeDatanode
SecondaryNameNode
YarnNodeManagerNodeManager
ResourceManager
NodeManager
HistoryHistoryServer
环境变量规划:
HADOOP_HOME=/opt/hadoop-3.3.3
JAVA_HOME=/usr/java/latest


目录

一、安装虚拟机

1.0 本文用到的软件下载

本文Hadoop部署用到的全部软件及下载地址:

百度网盘全系软件自取:
Hadoop集群部署软件(提取码:yu6u)

阿里云盘JDK和VMware软件自取:
Hadoop集群部署(提取码: z5c9)

1.1 下载安装VMware

选择自定义安装路径,一路默认安装即可。

1.2 下载安装Centos7版Linux操作系统

下载CentOS7:阿里云镜像站http://mirrors.aliyun.com/centos/7/isos/x86_64/
在这里插入图片描述

这里可以查看我的CentOS7安装教程:

CentOS7 超详细安装教程

二、Hadoop配置

2.1 下载安装JDK和Hadoop

2.1.1 下载JDK和Hadoop

在物理机Windows上下载JDK和Hadoop
官网下载
Hadoop-3.3.3
jdk-8u381-linux-x64.rpm

网盘分享
百度网盘
阿里云盘(提取码:z5c9)

  • Hadoop官网下载
    在这里插入图片描述

  • JDK官网下载
    在这里插入图片描述

输入如下命令创建自己的软件存放目录mysoftwares:

[feng@Master ~]$ cd /home/feng/
[feng@Master ~]$ ls
[feng@Master ~]$ mkdir mysoftwares
[feng@Master ~]$ cd mysoftwares/
[feng@Master mysoftwares]$

直接把文件从物理机Windows拖过去MobaXterm的虚拟机目录中:
在这里插入图片描述

2.1.2 卸载Centos自带的JDK

注意:如果你的虚拟机是最小化安装不需要执行这一步。
首先卸载Centos7自带的JDK:

[feng@Master ~]$ su root
# 查看centos自带jdk是否已经安装
[root@Master ~]$ yum list installed | grep java

# 卸载自带jdk
[root@Master ~]$ yum -y remove java-1.8.0-openjdk*
[root@Master ~]$ yum -y remove java-1.7.0-openjdk*

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

💡 注意:这里除了.noarch作为后缀名的文件,其他带java的都删除即可。但noarch的最好不要删除。

网上还有另外一种卸载的方法,只是不适用于我的虚拟机会报错:error: package nodeps is not installed
这里给出卸载命令如下:
rpm -qa | grep jdk rpm -e nodeps <java-name>

在这里插入图片描述

对如下Linux命令的参数进行解读:

[root@Master ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

➢ rpm -qa:查询所安装的所有 rpm 软件包

➢ grep -i:忽略大小写

➢ xargs -n1:表示每次只传递一个参数
➢ rpm -e –nodeps:强制卸载软件

2.1.3 安装JDK

安装JDK,命令如下

# 首先回到当前用户
[root@Master ~]$ exit
[feng@Master ~]$ 

# 安装JDK
[feng@Master ~]$ sudo rpm -ivh /home/feng/mysoftwares/jdk-8u381-linux-x64.rpm

# 检验是否安装成功
[feng@Master ~]$ java -version
[feng@Master ~]$ javac -version

在这里插入图片描述

2.1.4 安装Hadoop

使用如下命令分别解压刚刚的Hadoop压缩包和将Hadoop的权限转移给当前用户:

# 解压3.1.1下载得到的Hadoop安装包
[root@Master ~]$ sudo tar -zxvf /home/feng/mysoftwares/hadoop-3.3.3-20220517.tar.gz -C /opt/
# 将Hadoop的权限转移给当前用户
[root@Master ~]$ sudo chown -R feng:feng /opt/hadoop-3.3.3

在这里插入图片描述
然后配置HADOOP_HOME,命令如下:

# 配置Hadoop环境变量
[feng@Master ~]$ sudo vi /etc/profile.d/hadoop.sh
[feng@Master ~]$ source /etc/profile

# hadoop.sh中添加的内容:
export HADOOP_HOME=/opt/hadoop-3.3.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

在这里插入图片描述
最后,去创建HDFS的工作目录big_data:

# 创建HDFS工作目录
[feng@Master ~]$ ls /var/
[feng@Master ~]$ sudo mkdir /var/big_data
[feng@Master ~]$ ls /var/

# 授予feng用户big_data文件夹的权限
[feng@Master ~]$ sudo chown -R feng:feng /var/big_data

在这里插入图片描述

2.2 修改配置文件

首先查看Hadoop的配置文件的位置,在/opt/hadoop-3.3.3/etc/hadoop目录下:
在这里插入图片描述
本节内容主要针对Hadoop的配置文件进行修改,注意修改原则和最开始的部署规划搭建要一致

2.2.0 全部命令

进入/opt/hadoop-3.3.3/etc/hadoop目录下执行以下命令:

# 首先进入root用户
[feng@Master ~]$ su root

1、为Hadoop提供JAVA解释器路径信息,主要目的是解决远程访问hadoop时候JAVA_HOME无法继承的问题
[root@Master ~]$ vim hadoop-env.sh
export JAVA_HOME=/usr/java/default

2、为Yarn任务、资源管理器提供Java运行环境
[root@Master ~]$ vim yarn-env.sh
export JAVA_HOME=/usr/java/default

3、配置HDFS主节点信息、持久化和数据文件的主目录
[root@Master ~]$ vim core-site.xml
<configuration>
    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://Master:9000</value>
    </property>

    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/big_data</value>
    </property>

    <!-- 配置HDFS网页登陆使用的静态用户为feng -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>feng</value>
    <property>
</configuration>

4、配置HDFS默认的数据存放策略
[root@Master ~]$ vim hdfs-site.xml
<configuration>
    <!-- nn Web端访问地址 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>Master:9870</value>
    </property>

    <!-- 2nn Web端访问地址 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>Datanode03:9868</value>
    </property>
</configuration>

5、配置mapreduce任务调度策略
[root@Master ~]$ vim mapred-site.xml 
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

6、配置Yarn资源管理角色的信息
[root@Master ~]$ vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>Datanode02</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_Y
ARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

7、配置datanode节点信息
[root@Master ~]$ vim slaves
Master
Datanode02
Datanode03

2.2.1 hadoop-env.sh

为Hadoop提供JAVA解释器路径信息,主要目的是解决远程访问hadoop时JAVA_HOME无法继承的问题
在这里插入图片描述

2.2.2 yarn-env.sh

为Yarn任务、资源管理器提供Java运行环境
在这里插入图片描述

2.2.3 core-site.xml

配置HDFS主节点信息、持久化和数据文件的主目录
在这里插入图片描述

2.2.4 hdfs-site.xml:

配置HDFS默认的数据存放策略
在这里插入图片描述

2.2.5 mapred-site.xml

配置mapreduce任务调度策略
在这里插入图片描述

2.2.6 yarn-site.xml

Yarn资源管理角色的信息
在这里插入图片描述

2.2.7 slaves

配置datanode节点信息
在这里插入图片描述

2.3 修改主机名并关机

2.3.1 修改主机名

用命令修改节点名/主机名如下:

[feng@Master ~]$ sudo vi /etc/hostname
# 将主机名替换为Master
Master

在这里插入图片描述

2.3.2 配置虚拟机域名解析

进入虚拟机的/etc/hosts文件,设置IP与主机名对应:

[feng@Master ~]$ sudo vi /etc/hosts
# 将里面的全部内容替换为
192.168.31.200 Master
192.168.31.210 Datanode02
192.168.31.220 Datanode03

在这里插入图片描述
这里设置好之后,就可以使用ssh 主机名进行登录啦。

2.3.3 关闭虚拟机

sudo reboot命令关闭当前虚拟机feng,或者直接在VMware中关闭虚拟机。

三、克隆

说明:本文采用先配置再克隆的方法,避免了挨个配置虚拟机的麻烦。

3.1 克隆配置好的虚拟机Master

进入VMware的Master的克隆界面,首先克隆第一台虚拟机命名为Datanode02:
在这里插入图片描述
然后按如下步骤完成克隆:
在这里插入图片描述
Datanode03虚拟机的克隆同理。

3.2 修改节点名和IP

开启Datanode02和Datanode03两台虚拟机,对Datanode02虚拟机,编辑如下:

注:这里因为还没修改hostname,所以虚拟机名称还是Master)

# 这里首先给出全部命令
# 修改主机名
[feng@Master ~]$ sudo vi /etc/hostname
# 仅替换为**Datanode02**即可

# 修改静态IP
[feng@Master ~]$ ifconfig
[feng@Master ~]$ sudo vi /etc/sysconfig/network-scripts/ifcfg-ens32 
# 仅将**IPADDR=192.168.31.200**修改**IPADDR=192.168.31.210**这一行即可

# 重启网络服务
[feng@Master ~]$ service network restart
[feng@Master ~]$ ifconfig

在这里插入图片描述
修改Datanode02的静态IP,最后看到如下两个红框的IP改变即说明修改成功:
在这里插入图片描述
最后,对Datanode03虚拟机进行同样的操作即可:

# 修改主机名
[feng@Master ~]$ sudo vi /etc/hostname
# 仅替换为**Datanode03**即可

# 修改静态IP
[feng@Master ~]$ ifconfig
[feng@Master ~]$ sudo vi /etc/sysconfig/network-scripts/ifcfg-ens32 
# 仅将**IPADDR=192.168.31.200**修改**IPADDR=192.168.31.220**这一行即可

# 重启网络服务
[feng@Master ~]$ service network restart
[feng@Master ~]$ ifconfig

四、配置集群ssh免密登录

4.1 配置虚拟机静态IP

Linux中网络配置相关文件的位置:
位置1(网络配置):/etc/sysconfig/network-scripts/ifcfg-ens32 # 这里的ens32也可能是ens33、ens36等等,根据自己虚拟机的网络名称来确定

位置2(DNS配置):/etc/resolv.conf

全部静态IP配置如下:

节点名IP地址
Master192.168.31.200
Datanode2192.168.31.210
Datanode3192.168.31.220

4.1.1 虚拟机VMware的网络编辑配置

在VMware的虚拟网络编辑器中编辑设置如下:
在这里插入图片描述

拓展:在Linux虚拟机中如何查看IP、网关、子网掩码etc

输入命令ifconfig,可以看到IP、子网掩码和广播地址如下:
在这里插入图片描述
查看网关命令为route -n
在这里插入图片描述
输入ipconfig时报错:-bash: ifconfig: command not found

解决方法:这是因为该虚拟机缺少网络配置的相关组件,所以这里需要下载安装net-tools,命令如下:

[root@Master ~]$ yum search ifconfig
[root@Master ~]$ yum install net-tools.x86_64

在这里插入图片描述

4.1.2 编辑虚拟机网卡配置

输入命令对虚拟机网卡进行配置

[root@Master ~]$ vi /etc/sysconfig/network-scripts/ifcfg-ens33

# 以下配置,有的就修改,没有的就加上
TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.31.200
NETMASK=255.255.255.0
GATEWAY=192.168.31.2
DNS1=192.168.31.2
DNS2=114.114.114.114

参数解释
TYPE=Ethernet # 网络类型:以太网,默认就行,不用改 BOOTPROTO=static # ip设置为静态 DEVICE=ens32 # 网卡名,默认即可(也可以在ifconfig中查看) ONBOOT=yes # 设置开机自启动 IPADDR=192.168.31.200 # 自己任意设置的IP地址 NETMASK=255.255.255.0 # 子网掩码,在VMware的网络虚拟编辑器中查看 GATEWAY=192.168.31.2 # 网关,在VMware的网络虚拟编辑器中查看 DNS1=192.168.31.2 # 设置为跟网关一样即可 DNS2=114.114.114.114 # 国内免费DNS DNS3=8.8.8.8 # 谷歌免费DNS(可选)

本人的虚拟机完整参数配置如下,可供参考:
在这里插入图片描述

4.1.3 重启网络服务:

有如下两种命令进行网络服务重启
systemctl restart network 和 service network restart

重启后尝试ping一下百度,接收十几个包测试一下就行,手动按Ctrl+C终止ping操作:
在这里插入图片描述
但是,如果restart重启报错如下:
Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.

解决方法:进入network-scripts目录查看该目录下的文件,发现有两个ifcfg-ensxx ,所以这里需要删除一个,根据前面ifconfig命令看到的是ens32,所以这里删除ens33文件夹。
在这里插入图片描述
然后再次重启网络服务即可成功,能看到这里的IP已经变为了自己手动设置的IP啦:
在这里插入图片描述

4.2 配置Windows域名解析

💡 注:如果这里不配置Windows上的域名解析,后续可能无法使用Windows物理机上的浏览器打开Hadoop网址

在Windows的如下目录C:\Windows\System32\drivers\etc打开hosts文件,在最末尾添加以下内容:

192.168.31.200 Master
192.168.31.210 Datanode02
192.168.31.220 Datanode03

在这里插入图片描述

4.3 密钥配置

4.3.1 密钥生成

分别在三个虚拟机输入如下命令生成私钥、公钥:

# 密钥生成
[root@Master ~]$ ssh-keygen -t rsa # 点击三次enter即可
[root@Master ~]$ ssh Datanode1

[root@Datanode02 ~]$ ssh-keygen -t rsa # 点击三次enter即可
[root@Datanode02 ~]$ ssh Datanode2

[root@Datanode03 ~]$ ssh-keygen -t rsa # 点击三次enter即可

在这里插入图片描述

4.3.2 拷贝密钥到Master主机

然后依次退出Datanode02和Datanode03节点,回到Master主机,执行命令:

[root@Master ~]$ ls /home/feng/.ssh/ # 查看初始时.ssh目录下的文件

# 执行以下两行命令分别将Datanode02、Datanode03的密钥拷贝过来Master主机
[root@Master ~]$ scp feng@Datanode02:/home/feng/.ssh/id_rsa.pub /home/feng/.ssh/id_rsa.pub.Datanode02
[root@Master ~]$ scp feng@Datanode03:/home/feng/.ssh/id_rsa.pub /home/feng/.ssh/id_rsa.pub.Datanode03

# 查看是否拷贝成功,可以看到多了“id_rsa.pub.Datanode02  id_rsa.pub.Datanode03”两个文件
[root@Master ~]$ ls /home/feng/.ssh/ 

在这里插入图片描述

4.3.3 密钥交互

在Master主机中执行如下命令授权密钥来进行密钥交互:

[feng@Master ~]$ cd /home/feng/.ssh/  # 进入密钥配置目录

[feng@Master .ssh]$ cat id_rsa.pub >> authorized_keys
[feng@Master .ssh]$ cat id_rsa.pub.Datanode02 >> authorized_keys
[feng@Master .ssh]$ cat id_rsa.pub.Datanode03 >> authorized_keys

[feng@Master .ssh]$ chmod 644 authorized_keys  # 更改密钥权限给当前用户(默认仅root用户)

# 复制密钥授权文件
[feng@Master .ssh]$ scp authorized_keys feng@Datanode02:/root/.ssh/authorized_keys
[feng@Master .ssh]$ scp authorized_keys feng@Datanode03:/root/.ssh/authorized_keys

在这里插入图片描述
Tips:如果你是在root用户中配置,相应的命令如下:
在这里插入图片描述
接着关闭防火墙,命令如下:

# 关闭Master主机的防火墙
[feng@Master ~]$ systemctl stop firewalld
[feng@Master ~]$ ssh Datanode02

# 关闭Datanode02节点的防火墙
[feng@Datanode02 ~]$ systemctl stop firewalld
[feng@Datanode02 ~]$ ssh Datanode03

# 关闭Datanode03节点的防火墙
[feng@Datanode03 ~]$ systemctl stop firewalld

4.4 免密登录测试

依次登录各节点,来测试是否能免密登录。如果能直接登录而不用输入密码,说明免密配置成功。
(严谨的可以按照1—>2、2—>3、3—>2、2—>1、1—>3、3—>1的思路来依次测试)。
在这里插入图片描述

五、集群配置

5.1 集群部署规划

MasterDatanode02Datanode03
HDFSDataNode
NameNode
DatanodeDatanode
SecondaryNameNode
YarnNodeManagerNodeManager
ResourceManager
NodeManager
HistoryHistoryServer

5.2 编写xsync集群分发脚本

5.2.1 需求

需求:循环复制文件到所有节点的相同目录下
期望脚本:xsync 要同步的文件名称

5.2.2 脚本实现

在/home/feng/bin目录下创建xsync文件

[feng@Master ~]$ cd /home/feng
[feng@Master ~]$ mkdir bin
[feng@Master ~]$ cd bin
[feng@Master bin]$ vim xsync

在该文件中编写如下代码

#!/bin/bash

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

#2. 遍历集群所有机器
for host in Master Datanode02 Datanode03
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

然后继续执行

# 1 修改脚本 xsync 具有执行权限
[feng@Master bin]$ chmod +x xsync
# 2 测试脚本
[feng@Master ~]$ xsync /home/feng/bin
# 3 将脚本复制到/bin中,以便全局调用
[feng@Master bin]$ sudo cp xsync /bin/
# 4 同步环境变量配置(root所有者)
[feng@Master ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh

注意:如果用了sudo,那么xsync一定要给它的路径补全。
让环境变量生效

[feng@Master bin]$ source /etc/profile
[feng@Master opt]$ source /etc/profile

5.3 群起集群

5.3.1 配置workers

进入目录/opt/hadoop-3.3.3/etc/hadoop/修改workers配置:

# 进入Hadoop安装目录下的etc/hadoop/目录
[feng@Master ~]$ cd /opt/hadoop-3.3.3/etc/hadoop/
[feng@Master hadoop]$ vim workers

# 添加如下内容到末尾
Master
Datanode02
Datanode03

在这里插入图片描述
再同步workers配置到另外两个节点:

[feng@Master hadoop]$ xsync /opt/hadoop-3.3.3/etc

在这里插入图片描述

5.3.2 启动集群

💡 千万注意!!!
仅在第一次启动集群时,需要采用如下格式化命令。后续启动集群万万不可再次执行格式化,否则会报错,无法启动集群。

首次启动集群时,需要使用如下命令格式化主机节点Master:

[feng@Master hadoop-3.3.3]$ hdfs namenode -format

在这里插入图片描述
格式化完后,在配置的HDFS存储目录/var/big_data/下会产生一个hdfs的文件夹:
在这里插入图片描述

然后使用如下命令启动:

# 在Master主节点上执行启动HDFS
[feng@Master hadoop-3.3.3]$ sbin/start-dfs.sh
# 在配置了ResourceManager的Datanode03节点上执行启动YARN
[feng@Datanode02 hadoop-3.3.3]$ sbin/start-yarn.sh

在Web端(可以用虚拟机的浏览器,如果配置了Windows物理机的IP地址映射也可以使用Windows的浏览器查看)查看HDFS的NameNode,查看HDFS的存储信息:http://Master:9870
在这里插入图片描述

在Web端查看Yarn的ResouceManager,查看Yarn上运行的Job信息:http://Datanode02:8088
在这里插入图片描述

5.3.3 集群基本测试:上传、下载、查看

5.3.3.1 上传

首先在/var/big_data/目录下新建一个word.txt的文件,并编辑如下内容:

hadoop yarn
hadoop mapreduce
feng
yu
su

在这里插入图片描述

然后在hadoop中创建一个文件夹myinput,并上传上述word.txt文件和/home/feng/mysoftwares/目录下的hadoop安装包(即hadoop-3.3.3-20220517.tar.gz文件)到该文件夹中:

[feng@Master ~]$ cd /var/big_data/
[feng@Master big_data]$ vim word.txt

[feng@Master ~]$ hadoop fs -mkdir /myinput

# 上传文件到myinput文件夹
[feng@Master ~]$ hadoop fs -put /var/big_data/word.txt /myinput
[feng@Master ~]$ hadoop fs -put /home/feng/mysoftwares/hadoop-3.3.3-20220517.tar.gz /myinput

Hadoop中查看创建的文件夹和上传的文件:
在这里插入图片描述
在这里插入图片描述

5.3.3.2 查看

在Master主节点上查看Hadoop上的word.txt文件内容

[feng@Master ~]$ cd /var/big_data/dfs/data/current/BP-1924136331-192.168.31.200-1691723490018/current/finalized/subdir0/subdir0
[feng@Master subdir0]$ pwd
/var/big_data/dfs/data/current/BP-1924136331-192.168.31.200-1691723490018/current/finalized/subdir0/subdir0
[feng@Master subdir0]$ ll
total 634872
-rw-rw-r-- 1 feng feng 134217728 Aug 11 11:16 blk_1073741825
-rw-rw-r-- 1 feng feng   1048583 Aug 11 11:16 blk_1073741825_1001.meta
-rw-rw-r-- 1 feng feng 134217728 Aug 11 11:16 blk_1073741826
-rw-rw-r-- 1 feng feng   1048583 Aug 11 11:16 blk_1073741826_1002.meta
-rw-rw-r-- 1 feng feng 134217728 Aug 11 11:16 blk_1073741827
-rw-rw-r-- 1 feng feng   1048583 Aug 11 11:16 blk_1073741827_1003.meta
-rw-rw-r-- 1 feng feng 134217728 Aug 11 11:16 blk_1073741828
-rw-rw-r-- 1 feng feng   1048583 Aug 11 11:16 blk_1073741828_1004.meta
-rw-rw-r-- 1 feng feng 108169686 Aug 11 11:17 blk_1073741829
-rw-rw-r-- 1 feng feng    845083 Aug 11 11:17 blk_1073741829_1005.meta
-rw-rw-r-- 1 feng feng        40 Aug 11 11:53 blk_1073741830
-rw-rw-r-- 1 feng feng        11 Aug 11 11:53 blk_1073741830_1006.meta
[feng@Master subdir0]$ cat blk_1073741830
hadoop yarn
hadoop mapreduce
feng
yu
su
[feng@Master subdir0]$

在这里插入图片描述

5.3.3.3 下载

首先,重命名hadoop上的word.txt文件,然后下载该myword.txt文件到Master虚拟机中:

[feng@Master ~]$ hadoop fs -mv /myinput/word.txt /myinput/myword.txt
[feng@Master ~]$ hadoop fs -get /myinput/myword.txt /var/big_data/
[feng@Master ~]$ ls /var/big_data/
dfs  myword.txt  nm-local-dir  word.txt

当文件已经存在时,会无法下载覆盖(所以前面需要先重命名):
在这里插入图片描述

5.4 配置历史服务器

前提:启动了Hadoop集群。

全部代码执行如下:

# 配置Mapred-site.xml文件
[feng@Master hadoop]$ vim mapred-site.xml
# 分发配置
[feng@Master hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
# 启动历史服务器
[feng@Master hadoop]$ mapred --daemon start historyserver
# 查看历史服务器是否启动
[feng@Master hadoop]$ jps

在这里插入图片描述

文件Mapred-site.xml中添加如下配置(完整配置如下图):

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

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

在这里插入图片描述

在浏览器中http://master:19888/jobhistory查看结果(前面Mapred-site.xml配置的19888端口):
在这里插入图片描述

5.5 配置日志的聚集

注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryServer。
在这里插入图片描述

全部代码如下:

# 1、编辑并分发配置文件
[feng@Master ~]$ cd /opt/hadoop-3.3.3/etc/hadoop/
[feng@Master hadoop]$ vim yarn-site.xml
[feng@Master hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarnsite.xml

# 2、停止yarn服务
[feng@Master ~]$ ssh datanode02
[feng@Datanode02 ~]$ stop-yarn.sh
[feng@Datanode02 ~]$ exit

# 3、停止historyserver服务并重启hdfs服务
[feng@Master ~]$ mapred --daemon stop historyserver
[feng@Master ~]$ start-dfs.sh

# 4、重启yarn服务
[feng@Master ~]$ ssh datanode02
[feng@Datanode02 ~]$ start-yarn.sh
[feng@Datanode02 ~]$ jps
[feng@Datanode02 hadoop]$ exit

# 5、重启historyserver服务
[feng@Master ~]$ mapred --daemon start historyserver
[feng@Master ~]$ jps

# 6、删除已经存在的输出文件
[feng@Master ~]$ hadoop fs -rm -r /output

# 7、执行wordcount程序
[feng@Master ~]$ hadoop jar /opt/hadoop-3.3.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /myinput /output

对yarn-site.xml文件的配置如下:

<!-- 开启日志聚集功能 --> 
<property> 
	<name>yarn.log-aggregation-enable</name> 
	<value>true</value>
</property> 

<!-- 设置日志聚集服务器地址 --> 
<property> 
	<name>yarn.log.server.url</name> 
	<value>http://Master:19888/jobhistory/logs</value>
</property> 

<!-- 设置日志保留时间为 7 天 --> 
<property> 
	<name>yarn.log-aggregation.retain-seconds</name> 
	<value>604800</value>
</property>

在这里插入图片描述

执行wordcount程序:
在这里插入图片描述

查看wordcount结果:
在这里插入图片描述

运行结束查看Job作业运行历史记录:
历史服务器地址:http://master:19888/jobhistory
查看历史任务列表:
在这里插入图片描述

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

查看日志详情:
在这里插入图片描述

5.6 集群启动/停止方式汇总

根据前述资源规划:

MasterDatanode02Datanode03
HDFSDataNode NameNodeDatanodeDataNode SecondaryNameNode
YarnNodeManagerNodeManager ResourceManagerNodeManager
HistoryHistoryServer

首先,我们可以使用jps 命令查看当前正在运行的服务组件(注:以下为开启全部HDFS和Yarn组件后分别在三个节点输出的结果):

[feng@Master ~]$ jps
3825 NodeManager
2706 DataNode
6009 NameNode
6669 Jps

[feng@Datanode02 ~]$ jps
6480 ResourceManager
7144 Jps
4044 NodeManager

[feng@Datanode03 ~]$ jps
4608 Jps
4241 SecondaryNameNode
4329 NodeManager

集群整体启动/停止的命令:

# 整体启动/停止HDFS
[feng@Master ~]$ start-dfs.sh
[feng@Master ~]$ stop-dfs.sh

# 整体启动/停止Yarn
[feng@Datanode02 ~]$ start-yarn.sh
[feng@Datanode02 ~]$ stop-yarn.sh

如果想单独启动/停止某个服务组件,命令如下:

# HDFS的(下面的namenode可替换为datanode、secondarynamenode)
[feng@Master ~]$ hdfs --daemon start namenode
[feng@Master ~]$ hdfs --daemon stop namenode

# Yarn的(下面的resourcemanager可替换为nodemanager)
[feng@Datanode02 ~]$ yarn --daemon start resourcemanager
[feng@Datanode02 ~]$ yarn --daemon stop resourcemanager

5.7 配置Hadoop集群常用脚本

首先需要开启root权限编辑,否则无法保存脚本文件。全部命令如下:

# 开启root权限编辑,否则无法保存脚本文件
[feng@Master ~]$ su root
Password:
# 将自己编写的脚本文件全部保存至/home/feng/bin目录下
[root@Master feng]# cd /home/feng/bin
[root@Master bin]# pwd
/home/feng/bin
[root@Master bin]# ls
xsync

# hadoop启停脚本
[root@Master bin]# vim myhadoop.sh
# Java进程查看脚本
[root@Master bin]# vim jpsall
# 赋予两个脚本文件执行权限
[root@Master bin]# chmod +x myhadoop.sh
[root@Master bin]# chmod +x jpsall

[root@Master bin]# ls
jpsall  myhadoop.sh  xsync
# 分发脚本至另外两个节点,保证自定义脚本在三台机器上都可以使用
[root@Master bin]# xsync /home/feng/bin/
====================  Master  ====================
root@master's password:
root@master's password:
sending incremental file list

sent 127 bytes  received 17 bytes  41.14 bytes/sec
total size is 1,928  speedup is 13.39
====================  Datanode02  ====================
root@datanode02's password:
root@datanode02's password:
sending incremental file list
bin/
bin/jpsall
bin/myhadoop.sh

sent 1,429 bytes  received 58 bytes  424.86 bytes/sec
total size is 1,928  speedup is 1.30
====================  Datanode03  ====================
root@datanode03's password:
root@datanode03's password:
sending incremental file list
bin/
bin/jpsall
bin/myhadoop.sh

sent 1,429 bytes  received 58 bytes  594.80 bytes/sec
total size is 1,928  speedup is 1.30
[root@Master bin]#

5.7.1 Hadoop集群启停脚本:myhadoop.sh

注释:包含HDFS、Yarn、Historysever的启动与停止

编辑的myhadoop.sh脚本文件如下:

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input!"
    exit;
fi

case $1 in
"start")
        echo "\n================= 启动 hadoop集群 ================="
				echo " ------------------- 启动 hdfs --------------------"
        ssh Master "/opt/hadoop-3.3.3/sbin/start-dfs.sh"
				echo " ------------------- 启动 yarn --------------------"
        ssh Datanode02 "/opt/hadoop-3.3.3/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh Master "/opt/hadoop-3.3.3/bin/mapred --daemon start historyserver"
;;
"stop")
        echo "================= 关闭 hadoop集群 ================="
        echo " --------------- 关闭 historyserver ---------------"
        ssh Master "/opt/hadoop-3.3.3/bin/mapred --daemon stop historyserver"
        echo " ------------------- 关闭 yarn --------------------"
        ssh Datanode02 "/opt/hadoop-3.3.3/sbin/stop-yarn.sh"
        echo " ------------------- 关闭 hdfs --------------------"
        ssh Master "/opt/hadoop-3.3.3/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error!"
;;
esac

在这里插入图片描述

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

编辑的jpsall脚本文件内容如下:

#!/bin/bash

for host in Master Datanode02 Datanode03
do 
	echo =============== $host =============== 
	ssh $host jps
done

在这里插入图片描述

5.8 集群时间同步

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

5.8.1 主节点Master配置

# 1、查看所有节点ntpd服务状态和开机自启动状态
[feng@Master ~]$ sudo systemctl status ntpd
[feng@Master ~]$ sudo systemctl start ntpd
[feng@Master ~]$ sudo systemctl is-enabled ntpd

# 2、修改Master的ntp.conf配置文件
[feng@Master ~]$ sudo vim /etc/ntp.conf

# 3、修改Master的/etc/sysconfig/ntpd文件
[feng@Master ~]$ sudo vim /etc/sysconfig/ntpd

# 4、重新启动ntpd服务
[feng@Master ~]$ sudo systemctl start ntpd

# 5、设置ntpd服务开机自启动
[feng@Master ~]$ sudo systemctl enable ntpd
  • 对/etc/ntp.conf配置文件修改如下①②,添加③,共三处:
    在这里插入图片描述

  • 对/etc/sysconfig/ntpd文件添加如下内容:SYNC_HWCLOCK=yes
    在这里插入图片描述

5.8.2 其他两个节点的配置

对Datanode02节点进行配置:

# 1、关闭所有节点上的ntp服务和自启动
[feng@Datanode02 ~]$ sudo systemctl stop ntpd
[sudo] password for feng:
[feng@Datanode02 ~]$ sudo systemctl disable ntpd

# 2、在Datanode02节点配置每隔一分钟与时间服务器同步一次
[feng@Datanode02 ~]$ sudo crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
# 编辑定时任务命令如下:【*/1 * * * * /usr/sbin/ntpdate Master】

# 3、修改为任意时间来测试
[feng@Datanode02 ~]$ sudo date -s "2022-11-11 11:11:11"
Fri Nov 11 11:11:11 CST 2022

# 4、一分钟后查看机器是否已经与时间服务器同步
[feng@Datanode02 ~]$ sudo date
Thu Aug 17 18:39:38 CST 2023

在这里插入图片描述

编辑定时任务命令如下:

*/1 * * * * /usr/sbin/ntpdate Master

在这里插入图片描述
在Datanode03节点上的配置同理。

Last、一些可能的报错情况

报错1:集群启动异常

在这里插入图片描述

原因:

2023-08-11 09:26:35,196 ERROR conf.Configuration: error parsing conf core-site.xml
/opt/hadoop-3.3.3/etc/hadoop/目录下找到core-site.xml文件,如下,显然是细节问题
在这里插入图片描述

解决:

将core-site.xml文件中如上部分的<property>修改为</property> ,然后保存修改,并使用xsync分发修改到另外两个节点即可解决问题。

[feng@Master hadoop-3.3.3]$ xsync /opt/hadoop-3.3.3/etc/hadoop/

报错02:Windows物理机无法解析虚拟机地址

在这里插入图片描述

原因:

Windows物理机中未添加虚拟机的IP地址映射。

解决:

C:\Windows\System32\drivers\etc目录下配置hosts文件,添加如下的IP地址映射,即可解决问题。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值