随着大数据时代的到来,Hadoop作为大数据处理的核心框架,其重要性不言而喻。Hadoop 3.0版本在性能、容错性和功能上都有显著提升。本文将详细介绍如何在Linux环境下搭建一个Hadoop 3.0完全分布式集群,并进行简单的测试。

一、 Linux系统的安装与配置

       构建Hadoop集群的第一步是准备好集群所需的Linux环境。我们将使用虚拟机来模拟集群环境。

(一)准备工作
  1. 安装虚拟化软件
    首先,需要安装一个虚拟化软件,例如 VMware Workstation。下载并安装VMware Workstation 工具。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash

  1. 新建虚拟机
    打开VMware Workstation,选择“创建新的虚拟机”。
  • 在向导界面选择“自定义(高级)”。

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_02

  • 选择虚拟机硬件兼容性,一般选择最新的即可。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_03

  • 在安装客户机操作系统界面,选择“稍后安装操作系统”。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_04

  • 选择客户机操作系统为 Linux,并选择合适的版本(本例中安装的操作系统为OpenEuler22.03)。

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_05

  • 命名虚拟机名称(例如 hadoop3-01),并设置虚拟机文件的保存位置。

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_06

  • 在处理器配置界面,根据需要配置处理器数量和内核数量(例如处理器数量1,每个处理器内核数2)。

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_07

  • 配置虚拟机内存大小,建议至少设置为 2GB (2048MB)。

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_08

  • 在网络类型界面,选择“使用网络地址转换(NAT)”。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_09

  • 在选择 I/O 控制器类型界面,选择 LSI Logic。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_10

  • 在选择磁盘类型界面,选择 SCSI。

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_11

  • 创建新的虚拟磁盘,设置磁盘大小(建议至少 20GB)。选择将虚拟磁盘存储为单个文件。

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_12

  1. 安装Linux操作系统
    虚拟机创建完成后,需要安装Linux操作系统。
  1. 编辑虚拟机设置,在 CD/DVD 驱动器中选择“使用 ISO 镜像文件”,然后浏览到你的Linux系统安装镜像文件(本例中使用的操作系统镜像是:openEuler-22.03-x86_64-dvd.iso)。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_13

  • 启动虚拟机,按照安装向导进行安装。
  • 在安装过程中,选择“自动分区”可以简化步骤。

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_14

  • 设置 root 用户的密码。

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_15

  • 等待安装完成,重启虚拟机。

成功登录虚拟机(例如 hadoop01)的效果如下图所示。在登录界面输入用户名 root,输入设置的密码(例如 Admin@!@#),按 Enter 键即可登录。

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_16

  1. 克隆虚拟机
    为了快速搭建集群中的其他节点,我们可以克隆已经安装好基础系统的虚拟机 hadoop01。
  • 完整克隆: 复制原虚拟机创建一个完全独立的新虚拟机,不和原虚拟机共享任何资源,可以脱离原虚拟机独立使用。
  • 链接克隆: 需要和原虚拟机共享同一个虚拟磁盘文件,不能脱离原虚拟机独立运行。为了方便管理和节省磁盘空间,通常选择链接克隆。

右键点击虚拟机 hadoop01,选择“管理” -> “克隆”,按照向导完成克隆过程,创建 hadoop02 和 hadoop03 两台虚拟机。

  1. 配置虚拟机网络配置虚拟机的网络参数,将虚拟机 hadoop01、hadoop02 和 hadoop03 的网络由默认的动态 IP 修改为静态 IP。由于虚拟机网络连接使用的是 NAT 模式,其子网地址通常为 192.168.xxx.0,网关地址为 192.168.xxx.2 (具体根据你的VMware NAT设置)。

IP地址规划如下:

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_17

静态IP地址配置(以 hadoop01 为例):
编辑网卡配置文件:
Bash

vi /etc/sysconfig/network-scripts/ifcfg-ens33
  • 1.

修改以下内容(如果不存在则添加):

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_18

BOOTPROTO=static  # 从 dhcp 改为 static
ONBOOT=yes        # 确保网卡开机启动
IPADDR=192.168.199.11  # 设置静态IP地址
GATEWAY=192.168.199.2  # 设置网关地址
NETMASK=255.255.255.0  # 设置子网掩码
DNS1=192.168.199.2     # 设置DNS服务器地址(可以使用网关地址或公共DNS)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

修改完成后,保存并退出。

执行以下命令重新启动网卡使配置生效:

Bash

ifdown ens33 && ifup ens33
  • 1.

测试到外网的连通性:

Bash

ping 8.8.8.8
  • 1.

如果能ping通,说明网络配置成功。

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_19

配置主机名与IP地址的映射关系:

编辑 hosts 文件:

Bash

[root@hadoop01 ~]# vi /etc/hosts
  • 1.

在文件中增加以下映射关系。这3台虚拟机上的 hosts 文件内容应相同。

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_20

192.168.199.11 hadoop1
192.168.199.12 hadoop2
192.168.199.13 hadoop3
  • 1.
  • 2.
  • 3.

保存并退出。

修改主机名:

在 hadoop01 上执行:

Bash

hostnamectl set-hostname hadoop1 & bash
  • 1.

在 hadoop02 上执行:

Bash

hostnamectl set-hostname hadoop2 & bash
  • 1.

在 hadoop03 上执行:

Bash

hostnamectl set-hostname hadoop3 & bash
  • 1.

修改 DNS 配置:

编辑 resolv.conf 文件:

Bash

vi /etc/resolv.conf
  • 1.

确保文件中包含有效的 DNS 服务器地址,例如:

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_21

nameserver 192.168.199.2  # 可以是网关地址或公共DNS
  • 1.
  1. 配置免密登录
    为了方便集群管理和操作,需要配置虚拟机之间的免密登录。在 hadoop1 上生成 SSH 密钥对:
    Bash
[root@hadoop1 ~]# ssh-keygen -t rsa
  • 1.

过程中一直按回车键即可,无需设置密码。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_22

查看生成的密钥文件:

Bash

[root@hadoop1 ~]# ll /root/.ssh/
  • 1.

会看到 id_rsa(私钥)和 id_rsa.pub(公钥)文件。

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_23

复制公钥文件到集群中所有相关联的虚拟机,实现 hadoop1 可以免密登录 hadoop1、hadoop2 和 hadoop3。

Bash

ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
  • 1.
  • 2.
  • 3.

执行这些命令时,首次连接需要输入对应虚拟机 root 用户的密码。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_24

测试免密登录:

在 hadoop1 中执行以下命令验证是否可以免密登录其他节点:

Bash

ssh hadoop2
ssh hadoop3
  • 1.
  • 2.

如果在 hadoop1 上执行 ssh hadoop1 也能免密登录自己,说明配置成功。

注意: 在 hadoop2 和 hadoop3 上也需要重复生成密钥对和复制公钥的步骤,以实现任意节点之间都可以免密登录(尽管对于Hadoop的启动和关闭,只需要主节点能免密登录其他节点即可)。为了完整性,建议在所有节点上都执行 ssh-copy-id hadoop1, ssh-copy-id hadoop2, ssh-copy-id hadoop3

二、 安装Hadoop

1、 Hadoop的集群部署模式

在安装 Hadoop 之前,先了解一下 Hadoop 的几种部署模式:

  • 独立模式 (Standalone Mode): 在单台计算机的单个 JVM 进程中模拟 Hadoop 集群的工作模式。适用于快速安装体验 Hadoop 功能,不适用于生产环境。
  • 伪分布模式 (Pseudo-Distributed Mode): 在单台计算机的不同 JVM 进程中运行 Hadoop 集群的守护进程。适用于开发环境进行测试和调试,不适用于生产环境。
  • 完全分布模式 (Fully Distributed Mode): 在多台计算机的 JVM 进程中运行 Hadoop 集群的每个守护进程。这是实际生产环境的基础部署模式。

本文将重点介绍完全分布式模式的部署。

2、 在Linux中安装JDK(Java Development Kit)

Hadoop 是由 Java 编写的,因此需要安装 JDK。推荐安装 JDK 8 版本。

在 hadoop01 上创建用于存放软件、安装目录和数据的文件夹:

Bash

[root@hadoop01 ~]# mkdir -p /export/software  # 用于保存安装包
[root@hadoop01 ~]# mkdir -p /export/server    # 用于安装软件
[root@hadoop01 ~]# mkdir -p /export/data      # 用于存放数据
  • 1.
  • 2.
  • 3.

(1)上传 JDK 安装文件到 software 文件夹

使用 MobaXterm 或 WinSCP 等工具将 JDK 安装包(例如 jdk-8u371-linux-x64.tar.gz)上传到 /export/software/ 目录。 可以考虑在这里放一张使用 MobaXterm 或 WinSCP 上传文件的截图。

进入 software 目录,解压 JDK 的安装文件:

Bash

[root@hadoop01 software]# cd /export/software/
[root@hadoop01 software]# tar -xzvf jdk-8u371-linux-x64.tar.gz
[root@hadoop01 software]# mv jdk1.8.0_371 /export/server/
  • 1.
  • 2.
  • 3.

将解压后的 JDK 目录移动到 /export/server/ 目录下。

在 hadoop02 和 hadoop03 上执行相同的操作,或者后续直接复制 /export/server/ 目录。

(2)配置 JDK 的环境变量文件

编辑系统配置文件 /etc/profile

Bash

[root@hadoop01]# vi /etc/profile
  • 1.

在文件的最末尾加入以下三行:

Bash

export JAVA_HOME=/export/server/jdk1.8.0_371
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 1.
  • 2.
  • 3.

保存并退出。

使用 source 命令使配置文件的修改生效:

Bash

[root@hadoop01]# source /etc/profile
  • 1.

输入命令,测试 JDK 是否配置完成:

Bash

[root@hadoop01 ~]# java -version
  • 1.

如果能显示 JDK 版本信息,说明配置成功。

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_25

(3)测试 Java 程序

使用 vi 编辑器编写一个简单的 Java 程序:

Bash

[root@hadoop01 ~]# vim HelloWorld.java
  • 1.

输入以下内容:

Java

public class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.println("大家好,欢迎来到Java的世界!!!");
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

保存,退出。

对 java 源程序进行编译:

Bash

[root@hadoop01 ~]# javac HelloWorld.java
  • 1.

编译成功后,在当前目录下会发现一个 .class 结尾的同名文件。 

运行字节码文件:

Bash

[root@hadoop01 ~]# java HelloWorld
  • 1.

如果出现“大家好,欢迎来到Java的世界!!!”的输出,说明程序运行成功。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_26

2.3 Hadoop的安装

(1)下载 hadoop 安装包

可以通过访问 Hadoop 的官网( https://hadoop.apache.org/)下载其安装包。本文使用的是 Hadoop 版本为 3.3.0,安装包为 hadoop-3.3.0-aarch64.tar.gz (请根据实际情况下载对应架构的版本,此处示例为 aarch64)。

(2)上传 hadoop 安装包到 software 目录,解压缩

将 Hadoop 安装包上传到 /export/software/ 目录。

进入 software 目录,解压 hadoop 安装包:

Bash

[root@hadoop01 ~]# cd /export/software/
[root@hadoop01 software]# tar -xzvf hadoop-3.3.0-aarch64.tar.gz
  • 1.
  • 2.

将解压后的目录移到 /export/server

Bash

[root@hadoop01 software]# mv hadoop-3.3.0 /export/server/
  • 1.

(3)配置 hadoop 的环境变量

编辑系统配置文件 /etc/profile,在文件的最后添加以下配置:

Bash

export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
  • 1.
  • 2.

保存退出,执行下面的命令,使修改的配置文件生效:

Bash

[root@hadoop01 software]# source /etc/profile
  • 1.

执行下面的命令,确认 hadoop 是否安装成功:

Bash

[root@hadoop01 ~]# hadoop version
  • 1.

如果能显示 Hadoop 版本信息,说明安装成功。  

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_27

复制安装文件和配置文件到其他节点:

为了方便后续配置,可以将 hadoop01 上已经安装好的 JDK 和 Hadoop 目录复制到 hadoop02 和 hadoop03。同时也要复制修改后的 /etc/hosts/etc/profile 文件。

Bash

[root@hadoop01 ~]# scp -r /export/server/ hadoop02:/export/server/
[root@hadoop01 ~]# scp -r /export/server/ hadoop03:/export/server/

[root@hadoop01 ~]# scp /etc/hosts hadoop02:/etc/hosts
[root@hadoop01 ~]# scp /etc/hosts hadoop03:/etc/hosts

[root@hadoop01 ~]# scp /etc/profile hadoop02:/etc/profile
[root@hadoop01 ~]# scp /etc/profile hadoop03:/etc/profile
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

注意: 在 hadoop02 和 hadoop03 上执行 source /etc/profile 命令使配置文件生效。

(4) hadoop 配置文件的修改

Hadoop 集群的配置文件一般保存在 Hadoop 安装目录下的 etc/hadoop/ 目录中,即 /export/server/hadoop-3.3.0/etc/hadoop/

  • 修改 hadoop-env.sh
    编辑 hadoop-env.sh 文件,配置 JAVA_HOME 和启动用户:
    Bash
vi /export/server/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
  • 1.

找到并修改或添加以下内容:

Bash

export JAVA_HOME=/export/server/jdk1.8.0_371
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 修改配置文件 core-site.xml
    编辑 core-site.xml 文件:
    Bash
vi /export/server/hadoop-3.3.0/etc/hadoop/core-site.xml
  • 1.

<configuration> 标签中增加以下内容:

XML

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/export/data/hadoop-3.3.0</value>
    </property>
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
    <property>
       <name>hadoop.proxyuser.root.hosts</name>
       <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
</configuration>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

fs.defaultFS 指定了 NameNode 的地址和端口。hadoop.tmp.dir 指定了 Hadoop 临时文件的存放目录,建议放在数据盘。fs.trash.interval 配置了 HDFS 回收站的保留时间(单位:分钟)。

  • 修改 hdfs-site.xml
    编辑 hdfs-site.xml 文件:
    Bash
[root@hadoop01 hadoop]# vim hdfs-site.xml
  • 1.

<configuration> 标签中增加以下内容:

XML

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop2:9868</value>
    </property>

</configuration>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

dfs.replication 指定了 HDFS 文件的副本数。dfs.namenode.secondary.http-address 指定了 Secondary NameNode 的地址和端口。

  • 修改 mapred-site.xml 文件
    使用系统提供的模板生成配置文件:
    Bash
[root@hadoop01 hadoop]# cp mapred-site.xml.template mapred-site.xml
  • 1.

修改新生成的配置文件 mapred-site.xml

Bash

[root@hadoop01 hadoop]# vi mapred-site.xml
  • 1.

<configuration> 标签中增加以下内容:

<configuration>
	        <property>
	                <name>mapreduce.framework.name</name>
	                <value>yarn</value>
	        </property>
	        <property>
	                <name>mapreduce.jobhistory.address</name>
	                <value>hadoop1:10020</value>
	        </property>
	        <property>
	                <name>mapreduce.jobhistory.Webapp.address</name>
	                <value>hadoop1:19888</value>
	        </property>
	        <property>
	                <name>yarn.app.mapreduce.am.env</name>
	                <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
	        </property>
	        <property>
	                <name>mapreduce.map.env</name>
	                <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
	        </property>
	        <property>
	                <name>mapreduce.reduce.env</name>
	                <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
	        </property>
	</configuration>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

设置 MapReduce 框架运行在 YARN 上。其他属性配置了 JobHistory Server 的地址和端口。

  • 修改 yarn-site.xml 文件
    编辑 yarn-site.xml 文件:
    Bash
[root@hadoop01 hadoop]# vi yarn-site.xml
  • 1.

<configuration> 标签中增加以下内容:

XML

<configuration>

<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop1</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <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://hadoop1:19888/jobhistory/logs</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

</configuration>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

yarn.resourcemanager.hostname 指定了 ResourceManager 运行的主机。其他属性配置了 NodeManager 的辅助服务、内存检查以及日志聚合等。

  • 修改 workers 文件
    编辑 workers 文件,该文件指定了集群中作为 DataNode 和 NodeManager 的主机列表:
    Bash
[root@hadoop01 /export/server/hadoop-3.3.0/etc/hadoop/]# vi workers
  • 1.

将文件的默认内容修改为以下内容:

hadoop1
hadoop2
hadoop3
  • 1.
  • 2.
  • 3.

每行一个主机名。这意味着 hadoop1、hadoop2 和 hadoop3 都将作为 DataNode 和 NodeManager。

(5)将集群主节点的配置文件分发到其他子节点

完成 hadoop01 的配置后,将修改后的配置文件分发到 hadoop02 和 hadoop03:

Bash

[root@hadoop01 hadoop]# scp /export/server/hadoop-3.3.0/etc/hadoop/* hadoop02:/export/server/hadoop-3.3.0/etc/hadoop/
[root@hadoop01 hadoop]# scp /export/server/hadoop-3.3.0/etc/hadoop/* hadoop03:/export/server/hadoop-3.3.0/etc/hadoop/
  • 1.
  • 2.

(请确保所有配置文件都已复制到其他节点)。

(6)启动 hadoop 集群

初次启动 HDFS 集群时,必须对 NameNode 进行格式化处理。 注意: 格式化 HDFS 文件系统的操作只在初次启动 Hadoop 集群之前进行,重复格式化会丢失 HDFS 中的数据。

在 hadoop01 上执行格式化文件系统指令:

Bash

[root@hadoop01 hadoop]# hdfs namenode -format
  • 1.

看到 "successfully formatted" 等字样表示格式化成功。

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_28

(7)Hadoop 集群启动和关闭

针对 Hadoop 集群的启动,需要启动 HDFS 和 YARN 两个集群框架。

  • 启动 HDFS 集群
    在主节点 hadoop01 上执行指令 start-dfs.sh 启动集群中所有节点的 HDFS 服务进程(NameNode, Secondary NameNode, DataNode):
    Bash
[root@hadoop01 hadoop]# start-dfs.sh
  • 1.

可以使用 jps 命令查看各节点的 Java 进程,确认相关进程是否启动(NameNode, SecondaryNameNode, DataNode)。 

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_29

  • 启动 YARN 集群
    在主节点 hadoop01 上执行指令 start-yarn.sh 启动集群中所有节点的 YARN 服务进程(ResourceManager, NodeManager):
    Bash
[root@hadoop01 hadoop]# start-yarn.sh
  • 1.

同样可以使用 jps 命令确认相关进程是否启动(ResourceManager, NodeManager)。ResourceManager 在 hadoop1 上,NodeManager 在 hadoop1, hadoop2, hadoop3 上。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_30

可以通过Web界面查看集群状态:

  • HDFS NameNode: http://hadoop1:9870
  • YARN ResourceManager: http://hadoop1:8088 (请根据你的实际配置和防火墙设置确认端口是否可访问)
  • 关闭 HDFS 集群
    在主节点 hadoop01 上执行指令 stop-dfs.sh 关闭 HDFS 服务进程:
    Bash
[root@hadoop01 hadoop]# stop-dfs.sh
  • 1.

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_31

  • 关闭 YARN 集群
    在主节点 hadoop01 上执行指令 stop-yarn.sh 关闭 YARN 服务进程:
    Bash
[root@hadoop01 hadoop]# stop-yarn.sh
  • 1.

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_32

(8)Hadoop 集群的初体验 - 词频统计

使用一个简单的 MapReduce 示例程序来测试搭建好的 Hadoop 集群。

  • 创建要统计词频的文本文件
    在 hadoop01 上创建数据目录并创建文本文件 word1.txt
    Bash
[root@hadoop01 ~]# mkdir /export/data
[root@hadoop01 ~]# vim /export/data/word1.txt
  • 1.
  • 2.

在文件中输入一些文本内容,例如:

hello hadoop
hello java
hello python
hello lvu
java development kit
c language
python
python
python is new programing language
Java Virtual Machine
hello hadoop
hello java
hello python
hello lvu
java development kit
c language
python
python
python is new programing language
Java Virtual Machine
hello hadoop
hello java
hello python
hello lvu
java development kit
c language
python
python
python is new programing language
Java Virtual Machine
hello hadoop
hello java
hello python
hello lvu
java development kit
c language
python
python
python is new programing language
Java Virtual Machine
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.

保存退出。

  • 在 HDFS 上创建目录并上传文件
    在 HDFS 上创建 /wordcount/input 目录,并将本地文件 /export/data/word1.txt 上传至该目录下:
    Bash
[root@hadoop01 ~]# hdfs dfs -mkdir -p /wordcount/input
  • 1.

[插入图:hdfs dfs -mkdir 命令执行截图]

Bash

[root@hadoop01 ~]# hdfs dfs -put /export/data/word1.txt /wordcount/input
  • 1.

[插入图:hdfs dfs -put 命令执行截图] 可以使用 HDFS 命令或通过 Web 界面查看文件是否成功上传。

手把手教你搭建Hadoop 3.0完全分布式集群_Bash_33

使用 hdfs dfs -cat 命令查看 HDFS 上的文件内容:

Bash

hdfs dfs -cat /wordcount/input/word1.txt
  • 1.
  • 运行 MapReduce 示例程序
    Hadoop 提供了内置的示例程序,其中包括词频统计 (wordcount)。 进入 MapReduce 示例 jar 包所在的目录:
    Bash
cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/
  • 1.

运行词频统计应用程序:

Bash

hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /wordcount/input /wordcount/output1
  • 1.

这个命令的含义是:使用 hadoop-mapreduce-examples-3.3.0.jar 中的 wordcount 程序,输入目录是 /wordcount/input,输出目录是 /wordcount/output1

手把手教你搭建Hadoop 3.0完全分布式集群_Hadoop_34

等待程序运行完成。

  • 查看统计结果
    词频统计的结果会保存在 /wordcount/output1/ 目录下。结果文件通常命名为 part-r-xxxxx。 使用 hdfs dfs -cat 命令查看统计结果:
    Bash
hdfs dfs -cat /wordcount/output1/part-r-00000
  • 1.

如果看到每个单词及其对应的词频,说明 Hadoop 集群正常工作,并成功运行了 MapReduce 程序。

手把手教你搭建Hadoop 3.0完全分布式集群_hadoop_35

补充知识:hadoop3.x 与 hadoop2.x 中常用端口的比较

Hadoop 3.x 相对于 Hadoop 2.x,一些默认端口发生了变化。了解这些变化有助于进行防火墙配置和访问 Web UI:

服务

Hadoop 2.x 默认端口

Hadoop 3.x 默认端口

NameNode (Web UI)

50070

9870

ResourceManager (Web UI)

8088

8088

JobHistory Server (Web UI)

19888

19888

DataNode (Web UI)

50075

9864

Secondary NameNode (Web UI)

50090

9868

NameNode RPC

8020

9000

DataNode 数据传输

50010

9866

DataNode 内部通信

50020

9867

在进行端口映射或防火墙配置时,请注意这些端口的变化。

总结

      本文详细介绍了如何从零开始搭建一个 Hadoop 3.0 完全分布式集群,包括 Linux 环境准备、JDK 安装、Hadoop 安装配置以及一个简单的 MapReduce 示例。希望这篇博客能帮助您顺利搭建自己的 Hadoop 集群,并为后续的大数据学习和实践打下基础。在实际部署过程中,请根据您的具体环境和需求进行相应的调整。