基于OpenEuler部署Hadoop完全分布式集群

基于OpenEuler部署Hadoop完全分布式集群

前期准备

分析

  • 准备3台主机(关闭防火墙、静态IP、主机名称) 【openEuler 24.03】
  • 安装JDK 【jdk11】
  • 安装Hadoop 【hadoop 3.3.4】
  • 配置环境变量
  • 配置ssh
  • 配置集群
  • 单点启动
  • 群起并测试集群

虚拟机平台

虚拟机平台版本备注
VMware Workstation Pro17.6.0

软件信息

软件版本备注
Hadoop3.3.4
JDK11.0.25

服务器主机规划

主机名IP系统
node110.90.100.101openEuler-24.03-LTS-SP1
node210.90.100.102openEuler-24.03-LTS-SP1
node310.90.100.103openEuler-24.03-LTS-SP1

Hadoop集群规划

node1node2node3
IP10.90.100.10110.90.100.10210.90.100.103
HDFSNameNode、DataNodeDataNodeDataNode、SecondaryNameNode
YARNNodeManagerResourcemanager、NodeManagerNodeManager

注释

这里NameNodeSecondaryNameNode不要安装在同一台服务器上,ResourceManager也很耗内存,不要和NameNodeSecondaryNameNode配置在同一台服务器上

一、基础环境搭建

1.1 Linux操作系统安装

  1. 启动虚拟机,选择安装OpenEuler系统

在这里插入图片描述

  1. 选择语言,这里以选择中文为例。

在这里插入图片描述

  1. 系统安装配置

主要配置的地方是安装目的地、软件选择,用户设置等,以实际需求为准。

在这里插入图片描述

① 系统安装目的地,即磁盘分区。这里以自动分区为例。

在这里插入图片描述

注意

在生产环境中通常要求自定义分区,分区规划以实际需求为准,在此不在赘述,请通过查资料进行参考。

② 系统软件安装。这里为例节省空间,以服务器和安装基本的开发工具为例。

在这里插入图片描述

注意

在生产环境中以实际部署服务器类型为准,并选择相应的软件安装。

③.设置用户名。为例方便操作,这里设置root用户为例。

在这里插入图片描述

④ 配置完成后,选择开始安装

在这里插入图片描述

安装完成后重启系统即可。

在这里插入图片描述

重启系统看到登录提示即表示已经安装完成。

在这里插入图片描述

1.2 Linux环境准备

定义主机名、配置静态IP、关闭防火墙、添加普通用户、克隆主机

1.2.1 Linux基础配置
  1. 修改默认主机名

①查询主机名

[root@localhost ~]# hostname
localhost.localdomain

②修改主机名,这里以主机名为node1为例

[root@localhost ~]# hostnamectl set-hostname node1
#查看主机名
[root@localhost ~]# hostname
node1

③重启生效

[root@localhost ~]# reboot

④重启之后就显示设置的主机名

[root@node1 ~]# 
  1. 配置静态IP

这里以配置node1的静态IP为10.90.100.101为例

配置主机的网卡,设置IP

[root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

文件修改核心内容如下

BOOTPROTO=static

ONBOOT=yes

IPADDR=10.90.100.101
GATEWAY=10.90.100.2
NETMASK=255.255.255.0

DNS1=10.90.100.2
DNS2=114.114.114.114
  • BOOTPROTO设置为static,表示IP为静态的。
  • ONBOOT设置为yes,表示开机启动网卡。
  • GATEWAY设置为实际网关地址。
  • IPADDR设置为网关所在的网段的主机地址。

提示

VMware查看网络的方式为:编辑 → 虚拟网络编辑器 ,选择相应的虚拟网卡就可以看到子网所在的网段及网关,如下图所示。

在这里插入图片描述

重启网卡

[root@node1 ~]# systemctl restart NetworkManager

#测试网络,如果有回复包说明通了
[root@node1 ~]# ping www.baidu.com
PING www.baidu.com (183.240.99.169) 56(84) 字节的数据。
64 字节,来自 183.240.99.169 (183.240.99.169): icmp_seq=1 ttl=128 时间=113 毫秒
64 字节,来自 183.240.99.169 (183.240.99.169): icmp_seq=2 ttl=128 时间=48.1 毫秒
^C
--- www.baidu.com ping 统计 ---
已发送 2 个包, 已接收 2 个包, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 48.066/80.627/113.189/32.561 ms
[root@node1 ~]# 

通过ifconfig命令查看如果显示的IP不是配置的静态IP地址,重启主机即可。

[root@node1 ~]# ifconfig             
ens33: flags=4163  mtu 1500         
        inet 10.90.100.128  netmask 255.255.255.0  broadcast 10.90.100.255  
        inet6 fe80::20c:29ff:fe7d:3b1a  prefixlen 64  scopeid 0x20  
 #通过观察显示的IP还是默认分配的IP ,其实系统的真实的IP已经为设置的静态IP,只是显示还默认的,重启主机即可看到配置IP
[root@node1 ~]# reboot   


[root@node1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.90.100.101  netmask 255.255.255.0  broadcast 10.90.100.255
#重启后显示的IP就变为配置的静态IP
  1. 关闭防火墙

关闭防火墙并设置防火墙开机不启动

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld

检查防火墙状态,确认是否已经关闭

[root@node1 ~]# systemctl status firewalld
○ firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)
     Active: inactive (dead)
       Docs: man:firewalld(1)
#显示的内容说明已经关闭       
  1. 新建普通用户

因为root用户权限太高,误操作可能会造成不可挽回的损失,所以我们需要新建一个普通用户来安装操作。

添加一个普通用户并设置密码,用户名例如:hadoop,方法如下:

[root@node1 ~]# adduser hadoop
[root@node1 ~]# passwd hadoop       
更改用户 hadoop 的密码 。            
新的密码:                            
无效的密码: 密码少于 8 个字符       
重新输入新的密码:                   
passwd:所有的身份验证令牌已经成功更新。
[root@node1 ~]#   

给普通用户添加sudo执行权限,且执行sudo不需要输入密码

[root@node1 ~]# vim /etc/sudoers

sudoers文件的%wheel ALL=(ALL) ALL这一行的下面添加如下语句:

hadoop    ALL=(ALL)       NOPASSWD: ALL

注意

修改sudoers文件完成后,执行保存退出命令要加! 才能保存成功即 wq!

1.2.2 创建集群主机

根据规划集群有3台主机,此时node1基础环境已经配置好,可以用node1克隆出node2和node3,并配置好相关配置即可,并不需要重新再安装node2和node3。

  1. 克隆主机

选中node1用来克隆出node2和node3主机。点击 虚拟机管理克隆下一步

克隆当前状态:

在这里插入图片描述

创建完整克隆

在这里插入图片描述

设置虚拟机名称信息

在这里插入图片描述

用同样的方法克隆出node3。

  1. 修改主机名

进入node2系统使用普通用户hadoop登录,此时主机名还是原理克隆的node1,需要改成node2。

① 修改主机名

[hadoop@node1 ~]$ sudo hostnamectl set-hostname node2

② 查看主机名

[hadoop@node1 ~]$ hostname
node2

③ 重启机器,

[hadoop@node1 ~]$ sudo reboot  

重启后,主机就变为设置的node2了

[hadoop@node2 ~]$ 

使用同样的方法修改node3的主机名为node3

  1. 设置静态IP

此时的IP还是node1的IP,需要把IP改为node2规划的IP 10.90.100.102。

[hadoop@node2 ~]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33 

进入网卡文件后修改IPADDR的值

IPADDR=10.90.100.102

如果重启网卡不生效就重启主机

[hadoop@node2 ~]$ sudo systemctl restart NetworkManager

#重启
[hadoop@node2 ~]$ sudo reboot

使用同样的方法配置node3的IP为10.90.100.103

  1. 修改hosts文件,配置IP和主机名的映射
[hadoop@node1 ~]$ sudo vim /etc/hosts

添加如下内容

10.90.100.101 node1
10.90.100.102 node2
10.90.100.103 node3

添加后的结果如下:

[hadoop@node1 ~]$ cat /etc/hosts
#略
10.90.100.101 node1
10.90.100.102 node2
10.90.100.103 node3

在node2、node3主机执行相同的操作,在hosts文件添加映射的配置。

1.2.3 配置主机之间的免密登录
  1. 生产秘钥

使用以下命令在node1主机秘钥:

ssh-keygen -t rsa

执行命令后,如果没有特殊的配置需求,连续敲击三次回车键即可。

[hadoop@node1 ~]$ ssh-keygen -t rsa      
Generating public/private rsa key pair. 
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):  
Created directory '/home/hadoop/.ssh'.           
Enter passphrase (empty for no passphrase):      
Enter same passphrase again:                    
Your identification has been saved in /home/hadoop/.ssh/id_rsa   
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub    
The key fingerprint is:                                           
SHA256:slyEQ1rFv6KPsItZAJOvqhenUlKdh8H0ekMEqdvSK1o hadoop@node1   
The key's randomart image is:                          
+---[RSA 3072]----+                              
|   ooo+o.        |                  
| .  +* ..        |                 
|+  o.+= ..       |                 
| +o +o.o  .      |                 
| .o+..+ S  .     |                 
|..=.+o =. .      |                 
|.oE=o.o. .       |                
|o.++.o..         |                 
|=+o.o....        |                 
+----[SHA256]-----+                 
[hadoop@node1 ~]$   
  1. 拷贝公钥到集群主机

在node1主机执行拷贝公钥的命令,具体命令如下:

ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3

执行ssh-copy-id命令后,根据提示输入yes,再输入登录主机的登录密码:

在这里插入图片描述

验证从node1发起ssh登录到node2,即执行ssh node2,过程中不需要输入登录密码即为配置成功。使用exit退出当前免密登录。

在node2、node3主机上执行相同的操作,配置主机之间的免密登录操作。

1.2.4 配置分发脚本

为了后续的在集群中分发文件操作方便,需要配置分发脚本。

  1. 分别在主机node1、node2和node3上安装rsync命令
sudo yum install rsync -y   

如:

[hadoop@node1 ~]$ sudo yum install rsync -y   

提示

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

  1. 在node1主机上的用户主目录下创建bin目录
[hadoop@node1 ~]$ cd  ~
[hadoop@node1 ~]$ mkdir bin
[hadoop@node1 ~]$ ls
bin

进入新建的bin目录,并在该目录下创建分发脚本文件xsync

[hadoop@node1 ~]$ cd  bin
[hadoop@node1 bin]$ vim xsync

xsync文件的内容如下

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi
#2. 遍历集群所有机器
for host in node1 node2 node3
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

修改权限,改文件增加执行权限:

[hadoop@node1 bin]$ chmod +x xsync  

[hadoop@node1 bin]$ ls
xsync
#xsync文件所在的路径
[hadoop@node1 bin]$ pwd
/home/hadoop/bin

配置环境变量

[hadoop@node1 bin]$ cd ~
[hadoop@node1 ~]$ vim .bashrc

在用户级的环境变量文件.bashrc中添加xsync脚本文件的配置,方便后续执行脚本实现分发操作。

[hadoop@node1 ~]$ vim .bashrc 

.bashrc文件最后一行添加环境变量的配置

export PATH=/home/hadoop/bin:$PATH

添加之后的结果如下

[hadoop@node1 ~]$ cat .bashrc 
# Source default setting
[ -f /etc/bashrc ] && . /etc/bashrc

# User environment PATH
export PATH

export PATH=/home/hadoop/bin:$PATH

执行source命令让环境变量配置生效。

[hadoop@node1 ~]$ source .bashrc
  1. 测试

在node1主机执行xsync命令发送xsync脚本到node2、node3

[hadoop@node1 ~]$ xsync /home/hadoop/bin

登到node2或node3主机就可以看到/home/hadoop/bin目录下有xsync脚本文件且内容与node1的xsync文件一样。如要在node2和node3也能使用该命令实现分发,需要配置相应的环境变量,与node1配置方法一样,在此将不再赘述。

二、安装JDK

  1. 下载jdk安装包并上传该JDK 软件包到已经node1主机。

    上传方式有很多,任选一种方式即可,在此不再赘述。

  2. 上传成功后,通过 ls 命令查看是否上传成功。

这里以上传到用户主目录为例。

[hadoop@node1 ~]$ ls
 jdk-11.0.25_linux-x64_bin.tar.gz
  1. 解压jdk压缩包到安装软件目录下。这里以软件安装路径是/opt/software目录为例,可以根据实际需求设定。
[hadoop@node1 ~]$ tar zxvf jdk-11.0.25_linux-x64_bin.tar.gz  -C /opt/software/

注意:

① 本文设定软件安装路径为/optsoftware目录下,如果不存在/opt/software目录需先创建。

[hadoop@node1 ~]$ ls /opt/              
patch_workspace 
#没有software目录,需要创建
[hadoop@node1 ~]$ sudo mkdir  /opt/software       
[hadoop@node1 ~]$ ls /opt/               
patch_workspace  software                 
[hadoop@node1 ~]$   

② 因为是使用hadoop普通用户,而/opt目录普通是没有写的权限,需要把/opt/software目录的所属用户改为hadoop,否则会报没有权限的错误提示。修改所属用户的命令如下:

[hadoop@node1 ~]$ sudo chown hadoop:hadoop -R /opt/software

#验证所属用户是否修改成功
[hadoop@node1 ~]$  cd /opt
[hadoop@node1 opt]$ ll
总计 8
drwxr-xr-x. 4 root   root   4096 202537日 patch_workspace
drwxr-xr-x. 2 hadoop hadoop 4096  3623:33 software
#所属用户已经是hadoop
  1. 建立JDK 软链接,以方便后续使用,操作命令如下。
[hadoop@node1 ~]$ cd /opt/software/
[hadoop@node1 software]$ ls
jdk-11.0.25
[hadoop@node1 software]$ ln -s /opt/software/jdk-11.0.25 jdk
[hadoop@node1 software]$ ls
jdk  jdk-11.0.25
[hadoop@node1 software]$ 
  1. 配置 JDK 环境变量
[hadoop@node1 software]$ sudo vim /etc/profile 

在profile文件内容的末尾添加如下配置(注意:等号两侧不要有空格)

export JAVA_HOME=/opt/software/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:.
export PATH=${JAVA_HOME}/bin:$PATH
  1. 使环境变量的配置生效
[hadoop@node1 software]$ source /etc/profile   
  1. 校验jdk是否安装完成。
[hadoop@node1 software]$ java -version
java version "11.0.25" 2024-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.25+9-LTS-256)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.25+9-LTS-256, mixed mode)
[hadoop@node1 software]$ 

至此,node1的JDK已经安装完成。

在node2、node3主机执行相同的操作,完成JDK的安装和配置。

三、Hadoop集群安装部署

3.1 安装Hadoop

  1. 下载hadoop安装包并上传该hadoop软件包到node1主机。

    上传方式有很多,任选一种方式即可,在此不再赘述。

  2. 上传成功后,通过 ls 命令查看是否上传成功。

[hadoop@node1 ~]$ ls
bin  hadoop-3.3.4.tar.gz
  1. 解压hadoop-3.3.4.tar.gz/opt/software/目录下
[hadoop@node1 ~]$ tar -xzvf hadoop-3.3.4.tar.gz -C  /opt/software/ 
  1. 建立 hadoop软链接,以方便后续使用,操作如下
[hadoop@node1 ~]$ cd /opt/software/
[hadoop@node1 software]$ ls
hadoop-3.3.4  jdk  jdk-11.0.25
[hadoop@node1 software]$ ln -s /opt/software/hadoop-3.3.4  hadoop
[hadoop@node1 software]$ ls
hadoop  hadoop-3.3.4  jdk  jdk-11.0.25
[hadoop@node1 software]$ 
  1. 配置 hadoop 环境变量
[hadoop@node1 software]$ sudo vim /etc/profile      

在profile文件内容的末尾添加如下代码(注意:等号两侧不要有空格)。

export HADOOP_HOME=/opt/software/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. 使配置生效 :
[hadoop@node1 software]$ source /etc/profile   
  1. 验证
[hadoop@node1 software]$ hadoop version
Hadoop 3.3.4
Source code repository https://github.com/apache/hadoop.git -r a585a73c3e02ac62350c136643a5e7f6095a3dbb
Compiled by stevel on 2022-07-29T12:32Z
Compiled with protoc 3.7.1
From source with checksum fb9dd8918a7b8a5b430d61af858f6ec
This command was run using /opt/software/hadoop-3.3.4/share/hadoop/common/hadoop-common-3.3.4.jar
[hadoop@node1 software]$ 

看到hadoop版本号输出,说明环境变量配置成功。

提示:3.2节的1-9步都是在node1主机执行。

3.2 配置Hadoop 集群

  1. 核心配置文件

配置core-site.xml

[hadoop@node1 software]$ cd $HADOOP_HOME/etc/hadoop
[hadoop@node1 hadoop]$ vim  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://node1:9820</value>
    </property>
    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/software/hadoop-3.3.4/data</value>
    </property>
 
    <!-- 配置HDFS网页登录使用的静态用户为hadoop -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
    </property>
 
    <!-- 配置该hadoop(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
    <!-- 配置该hadoop(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
    <!-- 配置该hadoop(superUser)允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.hadoop.users</name>
        <value>*</value>
    </property>
</configuration>  
  1. 配置hdfs-site.xml
[hadoop@node1 hadoop]$ vim 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>node1:9870</value>
    </property>
    <!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node3:9868</value>
    </property>
</configuration>    

  1. 配置yarn-site.xml
[hadoop@node1 hadoop]$ vim yarn-site.xml

配置后完整内容如下:

<?xml version="1.0"?>
<configuration>
    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
	</property>
    
    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node2</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>
    
    <!-- yarn容器允许分配的最大最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>2048</value>
    </property>
    
    <!-- yarn容器允许管理的物理内存大小 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
    </property>
    
    <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
  
</configuration>

  1. 配置mapred-site.xml
[hadoop@node1 hadoop]$ vim mapred-site.xml   

配置后完整内容如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    

</configuration>

  1. 配置workers
[hadoop@node1 hadoop]$ vim workers

把原有的内容替换成如下内容:

node1
node2
node3

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

  1. 配置历史服务器 (选做,如有需求就配置)

修改mapred-site.xml

[hadoop@node1 hadoop]$ vim mapred-site.xml  

mapred-site.xml添加如下配置

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

文件最终内容:

<?xml version="1.0"?>
<?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>node1:10020</value>
    </property>
 
    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node1:19888</value>
    </property> 

</configuration>

  1. 配置日志聚集(选做,如有需求就配置)

修改yarn-site.xml

[hadoop@node1 hadoop]$ vim yarn-site.xml 

yarn-site.xml在添加如下配置

    <!-- 开启日志聚集功能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
 
    <!-- 设置日志聚集服务器地址 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://node1:19888/jobhistory/logs</value>
    </property>
 
    <!-- 设置日志保留时间为7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

文件最终内容:

<?xml version="1.0"?>
<configuration>
    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
	</property>
    
    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node2</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>
    
    <!-- yarn容器允许分配的最大最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>2048</value>
    </property>
    
    <!-- yarn容器允许管理的物理内存大小 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
    </property>
    
    <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
   


     <!-- 开启日志聚集功能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
 
    <!-- 设置日志聚集服务器地址 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://node1:19888/jobhistory/logs</value>
    </property>
 
    <!-- 设置日志保留时间为7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

</configuration>

  1. 配置hadoop-env.sh
[hadoop@node1 hadoop]$ vim hadoop-env.sh  

hadoop-env.sh 配置JDK的环境变量,添加如下内容:

export JAVA_HOME=/opt/software/jdk


  1. 将hadoop软件及配置分发到node2主机和node3主机
[hadoop@node1 hadoop]$  xsync /opt/software/ node2 node3 

提示:3.2节的1-9步都是在node1主机执行。执行以上操作后,查看node2和node3主机 /opt/software/目录下是否有hadoop相关文件。

  1. 修改环境变量

修改node2、node3主机的环境变量,分别在node2、node3主机上执行以下操作:

sudo vim /etc/profile

在profile文件末尾添加如下内容

#Hadoop
export HADOOP_HOME=/opt/software/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

让环境变量生效

source /etc/profile  

验证是否已经安装好。

3.3 格式化文件系统

在NameNode进程所在的主机node1执行格式化hdfs操作。

[hadoop@node1 ~]$ hdfs namenode -format

在这里插入图片描述

看到successfully formatted为格式化成功。

注意:
格式化成功后,以后就不能再次格式化了。

3.4启动集群

  1. 启动hdfs

在NameNode所在的主机node1上执行启动hdfs命令,如下:

[hadoop@node1 ~]$ start-dfs.sh
  1. 启动yarn

在Resourcemanage进程所在的node2机器上执行启动yarn命令,如下:

[hadoop@node2 ~]$ start-yarn.sh  

至此,如果过程中没有报错就已经部署完成,接下来可以进行验证。

3.5 验证

3.5.1 进程验证

分别在集群的主机node1、node2、node3执行jps命令:

node1:

[hadoop@node1 hadoop]$ jps
7431 NameNode
8088 NodeManager
7724 DataNode
8303 Jps

node2:

[hadoop@node2 ~]$ jps
7138 ResourceManager
7300 NodeManager
7764 Jps
6925 DataNode

node3:

[hadoop@node3 hadoop]$ jps
6657 DataNode
7059 NodeManager
6869 SecondaryNameNode
7277 Jps

通过结果观察符合集群规划:

node1node2node3
IP10.90.100.10110.90.100.10210.90.100.103
HDFSNameNode、DataNodeDataNodeDataNode、SecondaryNameNode
YARNNodeManagerResourcemanager、NodeManagerNodeManager
3.5.2 浏览器验证

浏览器访问NameNode,输入NameNode所在的主机的IP及配置的端口

http://10.90.100.101:9870

在这里插入图片描述

浏览器访问Yarn,输入Yarn所在的节点IP及配置的端口

http://10.90.100.102:8088

在这里插入图片描述

浏览器访问SecondaryNameNode

http://10.90.100.103:9868

在这里插入图片描述

都能正常访问。

3.5.3 测试文件上传

将 hadoop-3.3.4.tar.gz文件上传到hdfs的/目录下

[hadoop@node1 ~]$ hdfs dfs -put hadoop-3.3.4.tar.gz /        

查看上传结果:

[hadoop@node1 ~]$ hdfs dfs -ls  /  
Found 1 items                       
-rw-r--r--   3 hadoop supergroup  695457782 2025-03-07 01:34 /hadoop-3.3.4.tar.gz     
[hadoop@node1 ~]$   

说明hdfs是能正常运行

3.5.4 验证任务

创建文件data.txt,添加内容保存后上传至hdfs。

[hadoop@node1 ~]$ vim data.txt
#data.txt文件添加内容如下
[hadoop@node1 ~]$ cat data.txt
hello world
hello hadoop

#上传data.txt执hdfs的/目录下
[hadoop@node1 ~]$ hdfs dfs -put data.txt /

执行wordcount程序实现词统计

[hadoop@node1 ~]$ hadoop jar /opt/software/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar  wordcount /data.txt /output/wordcount

运行成功后查看统计结果

[hadoop@node1 ~]$ hdfs dfs -ls  /output/wordcount
Found 2 items
-rw-r--r--   3 hadoop supergroup          0 2025-03-07 02:26 /output/wordcount/_SUCCESS
-rw-r--r--   3 hadoop supergroup         25 2025-03-07 02:26 /output/wordcount/part-r-00000
[hadoop@node1 ~]$ hdfs dfs -cat  /output/wordcount/part-r-00000
hadoop  1
hello   2
world   1
[hadoop@node1 ~]$ 

说明MapReduce是能正常运行。

至此,Hadoop完全分布式集群已经部署完成。

附:集群管理脚本

现在HDFSNameNodeYarnResourceManager运行在不同的主机上,启动或关闭服务需要分别到两台主机执行相关命令,在此为了更加便捷的启动和停止集群运行,可以写一个脚本实现集群管理。在此以集群管理脚本放在node1主机上,具体操作如下:

  1. /home/hadoop/bin目录下创建hdp.sh脚本文件
[hadoop@node1 ~]$ vim ~/bin/hdp.sh
  1. hdp.sh脚本文件写入以下内容:
#!/bin/bash
if [ $# -lt 1 ]
then
   echo "No Args Input..."
   exit ;
fi
case $1 in
"start")
       echo " =================== 启动 hadoop集群 ==================="

       echo " --------------- 启动 hdfs ---------------"
       ssh node1 "/opt/software/hadoop/sbin/start-dfs.sh"
       echo " --------------- 启动 yarn ---------------"
       ssh node2 "/opt/software/hadoop/sbin/start-yarn.sh"
       #echo " --------------- 启动 historyserver ---------------"
       #ssh node1 "/opt/software/hadoop/bin/mapred --daemon start historyserver"
;;
"stop")
       echo " =================== 关闭 hadoop集群 ==================="

       #echo " --------------- 关闭 historyserver ---------------"
       #ssh node1 "/opt/software/hadoop/bin/mapred --daemon stop historyserver"
       echo " --------------- 关闭 yarn ---------------"
       ssh node2 "/opt/software/hadoop/sbin/stop-yarn.sh"
       echo " --------------- 关闭 hdfs ---------------"
       ssh node1 "/opt/software/hadoop/sbin/stop-dfs.sh"
;;
"jps")
 for host in node1 node2 node3
   do
       echo ====================  $host  ====================   
       ssh $host "/opt/software/jdk/bin/jps"
   done
;;
*)
   echo "Input Args Error..."
;;
esac

  1. 给增加执行权限
[hadoop@node1 ~]$ chmod 777 ~/bin/hdp.sh 

至此,在node1主机上就可以执行hdp.sh命令管理集群,不再需要单独到node2启动yarn。相关操作命令如下:

  • 查看进程操作
[hadoop@node1  ~]$ hdp.sh jps
  • 启动集群
[hadoop@node1  ~]$ hdp.sh start
  • 停止集群
[hadoop@node1  ~]$ hdp.sh stop
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值