1 环境说明

1.1 软件与硬件配置

CPU:12th Gen Intel(R) Core(TM) i7-12700F
内存:32GB 3600MT/s
操作系统:Windows11
VMware: VMware® Workstation 17 Pro

1.2 虚拟机配置

处理器:4 (处理器数量1,每个处理器内核数量4,处理器内核总数4)
内存:4GB
存储:30GB
操作系统:Ubuntu 24.04.3 LTS
网络适配器:NAT

1.3 网络信息

VMware虚拟网络编辑器
网段:192.168.37.0
网关:192.168.37.2
子网:255.255.255.0

VMnet8网络适配器
地址:192.168.37.1
子网:255.255.255.0

1.4集群节点规划

主机名    IP
master   192.168.37.100
slave1   192.168.37.101
slave2   192.168.37.102

实验全程在root用户下进行


2 基础环境配置

2.1 网络配置 [master、slave1、slave2]

编辑 Netplan:

vim /etc/netplan/50-cloud-init.yaml

配置模板(按节点修改 IP):

network:
  version: 2
  ethernets:
    ens33:
      addresses:
        - 192.168.37.xxx/24
      gateway4: 192.168.37.2
      nameservers:
        addresses:
          - 8.8.8.8

应用配置:

netplan apply
ip add

验证标准:

  • IP 正确绑定

  • 三台机器互相ping 可达


2.2 关闭防火墙 [master、slave1、slave2]

ufw disable
systemctl stop ufw
systemctl disable ufw

验证:

ufw status

输出应为inactive


2.3 SSH Root 登录配置 [master、slave1、slave2]

vim /etc/ssh/sshd_config

找到以下行:

#PermitRootLogin prohibit-password
#PasswordAuthentication no

修改为:

PermitRootLogin yes
PasswordAuthentication yes

重启服务:

systemctl restart ssh

验证:

ssh root@本机IP

2.4 hosts 配置 [master、slave1、slave2]

修改 hosts文件:

vim /etc/hosts

保留原有127.0.0.1 localhost配置,其余127.0.0.1配置删除删除,添加如下配置:

192.168.37.100 master
192.168.37.101 slave1
192.168.37.102 slave2

验证:

ping master
ping slave1
ping slave2

2.5 时间同步 [master、slave1、slave2]

需要换源:

cp /etc/apt/sources.list /etc/apt/sources.list.bak
vim /etc/apt/sources.list
------
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
------
apt-get clean
apt-get update

安装ntpdate 服务:

apt install -y ntpdate

使用 cron:

crontab -e

文件末尾添加:

0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

nano:Ctrl + X 输入 Y 然后 Enter 保存

vim::wq

验证:

date

3 SSH免密登录

3.1 生成密钥 [master、slave1、slave2]

ssh-keygen -t rsa

3.2 分发公钥

在 master:

ssh-copy-id slave1
ssh-copy-id slave2

在 slave1:

ssh-copy-id slave2

在 slave2:

ssh-copy-id slave1

3.3 权限修复 [master、slave1、slave2]

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

3.4 验证 [master、slave1、slave2]

在 master:

ssh root@slave1
ssh root@slave2

在 slave1:

ssh root@slave2

在 slave2:

ssh root@slave1

验证:

  • 不需要密码

  • 能正常登录


4 JDK 安装

jdk-8u171-linux-x64.tar.gz上传至三台服务器中家目录下 ~

4.1 解压JDK安装包 [master、slave1、slave2]

cd ~
tar -xzvf jdk-8u171-linux-x64.tar.gz

4.2 配置环境变量 [master、slave1、slave2]

修改配置文件:

vim ~/.bashrc

文件末尾追加:

# JAVA
export JAVA_HOME=/root/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH

应用生效:

source ~/.bashrc

4.3 验证 [master、slave1、slave2]

java -version

5 Hadoop 安装与部署

hadoop-2.7.7.tar.gz上传至三台服务器中家目录下 ~

5.1 解压 [master、slave1、slave2]

cd ~
tar -xzvf hadoop-2.7.7.tar.gz
cd hadoop-2.7.7

目录功能介绍:

bin          # 存放Hadoop的各类程序(命令)
etc          # 存放Hadoop的配置文件
include      # C语言的一些头文件
lib          # 存放Linux系统的动态链接库(.so文件)
libexec      # 存放配置Hadoop系统的脚本文件(.sh和.cmd)
LICENSE.txt
NOTICE.txt
README.txt
sbin         # 管理员程序(super bin)
share        # 存放二进制源码(Java jar包)

5.2 环境变量 [master、slave1、slave2]

修改配置文件:

vim ~/.bashrc

文件末尾追加:

# hadoop
export HADOOP_HOME=/root/hadoop-2.7.7
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

应用生效:

source ~/.bashrc

6 Hadoop 配置

进入配置文件目录:

cd ~/hadoop-2.7.7/etc/hadoop

配置HDFS集群,主要涉及到如下文件的修改:

hadoop-env.sh    配置Hadoop的相关环境变量
core-site.xml    Hadoop核心配置文件
hdfs-site.xml    HDFS 核心配置文件
workers          配置从节点(DataNode)有哪些

6.1配置 HDFS 集群 [master、slave1、slave2]

6.1.1配置hadoop-env.sh文件

vim hadoop-env.sh
------
:set number
:25
------
# 修改 JDK 环境变量
export JAVA_HOME=/root/jdk1.8.0_171
------

6.1.2 配置core-site.xml文件

vim core-site.xml
------
<configuration>       # 添加的代码需要嵌套在此标签中
  <property>          # 指定 HDFS 的默认文件系统地址
     <name>fs.default.name</name>
     <value>hdfs://master:9000</value>
  </property>
  <property>          # Hadoop 的临时目录,存放 NameNode/DataNode 的运行时数据
     <name>hadoop.tmp.dir</name>
     <value>/root/hadoopdata</value>
  </property>
</configuration>
------

6.1.3配置 hdfs-site.xml 文件

vim hdfs-site.xml
------
<configuration>       # 添加的代码需要嵌套在此标签中
    <property>        # 指定 HDFS 文件块的副本数量
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>
------

6.2配置 YARN 集群 [master、slave1、slave2]

6.2.1配置 yarn-env.sh 文件

vim yarn-env.sh
------
:set number
:26
------
# 修改 JDK 环境变量
export JAVA_HOME=/root/jdk1.8.0_171
------

6.2.2配置 yarn-site.xml 文件

vim yarn-site.xml
------
<configuration>    # 添加的代码需要嵌套在此标签中
  <property>       # 指定 ResourceManager 所在的主机名
     <name>yarn.resourcemanager.hostname</name>
     <value>master</value>
  </property>
  <property>       # NodeManager 启动的辅助服务
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
  </property>
</configuration>
------

6.2.3配置 mapred-env.sh 文件

vim mapred-env.sh
------
:set number
:16
------
# 修改 JDK 环境变量
export JAVA_HOME=/root/jdk1.8.0_171
------

6.2.4 配置 mapred-site.xml 文件

复制模板:

cp mapred-site.xml.template mapred-site.xml

修改文件:

vim mapred-site.xml
------
<configuration>    # 添加的代码需要嵌套在此标签中
  <property>       # 指定 MapReduce 运行在 YARN 上
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
  </property>
</configuration>
------

6.3 配置 workers 集群节点 [master、slave1、slave2]

vim workers
------
master
slave1
slave2
------

6.4 配置 slaves 文件 [master]

vim slaves
--------------------
slave1
slave2
--------------------

6.5 配置master文件 [master]

vim master
--------------------
master
--------------------

7 集群启动

7.1 初始化 hadoop [master]

hdfs namenode -format

7.2启动hadoop集群 [master]

cd ~/hadoop-2.7.7/bin
start-all.sh

7.3 进程验证 [master、slave1、slave2]

jps

在 master会显示:

Jps
SecondaryNameNode
NameNode
ResourceManager

在 slave1会显示:

Jps
DataNode
NodeManager

在 slave2会显示:

Jps
DataNode
NodeManager

8 功能验证 [master]

hadoop jar /root/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi 10 10

验证标准:

  • 正常输出 π 估算值

  • 无报错


9 关闭 hadoop 集群 [master]

cd ~/hadoop-2.7.7/bin
stop-all.sh