Hadoop集群的搭建

在三台服务器上搭建 Hadoop 集群,我们需要配置一个主节点(NameNode)和两个从节点(DataNode)。
环境准备
3 台服务器(推荐配置:2GB 内存以上,2 核 CPU)
操作系统:Ubuntu 24.04 LTS
安装 Java 8(Hadoop 对 Java 8 支持最佳)

apt update && apt install openjdk-8-jdk openjdk-8-jre -y
sudo update-alternatives --config java                //设置java为java8
sudo update-alternatives --config javac               //设置javac为java8

服务器间网络互通
服务器规划
三台服务器的主机名和 IP 如下:

master: 192.168.43.3(主节点)
node01: 192.168.43.4(从节点 1)
node02: 192.168.43.5(从节点 2)

配置步骤

1.配置主机名和 IP 映射(所有节点)

# 修改主机名
# master节点
sudo hostnamectl set-hostname master

# node01节点
sudo hostnamectl set-hostname node01

# node02节点
sudo hostnamectl set-hostname node02

# 配置IP映射
sudo nano /etc/hosts

在/etc/hosts文件中添加以下内容:

192.168.43.3 master
192.168.43.4 node01
192.168.43.5 node02

2.配置免密登录(主节点到所有节点)
在 master 节点执行:

# 生成SSH密钥
ssh-keygen -t rsa -P ""

# 复制公钥到本机
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# 复制公钥到从节点
ssh-copy-id node01
ssh-copy-id node02

3.安装 Hadoop(所有节点)

# 下载Hadoop 3.3.4(可根据最新稳定版调整)
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz

# 解压
sudo tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local/

# 重命名
sudo mv /usr/local/hadoop-3.3.4 /usr/local/hadoop

# 设置权限
sudo chown -R $USER:$USER /usr/local/hadoop

4.配置环境变量(所有节点)
nano ~/.bashrc
在文本末尾添加以下内容:

# Java环境变量
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

# Hadoop环境变量
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_CLASSPATH=$(hadoop classpath)

使环境变量生效:
source ~/.bashrc
5.配置 Hadoop(仅在 master 节点配置,然后复制到从节点)
nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh
同样在文本末尾添加以下内容

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# HDFS组件用户(NameNode、DataNode、SecondaryNameNode)
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"

# YARN组件用户(ResourceManager、NodeManager)
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"

接下来配置核心文件:

6.配置 core-site.xml
nano $HADOOP_HOME/etc/hadoop/core-site.xml
添加以下内容:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master节点ip:9002</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>
</configuration>

7.配置 hdfs-site.xml
nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml
添加以下内容:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>/usr/local/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/usr/local/hadoop/hdfs/data</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
</configuration>

8.配置 mapred-site.xml
nano $HADOOP_HOME/etc/hadoop/mapred-site.xml
添加以下内容

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master节点IP:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master节点IP: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>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME>
    </property>
</configuration>

9.配置 yarn-site.xml
nano $HADOOP_HOME/etc/hadoop/yarn-site.xml
添加以下内容:

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master节点ip:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master节点ip:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master节点ip:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master节点ip:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master节点ip:8088</value>
    </property>
</configuration>

10.配置 workers 文件
nano $HADOOP_HOME/etc/hadoop/workers
添加从节点:

node01
node02

11.编辑 start-dfs.sh 和 stop-dfs.sh

# 编辑启动脚本
nano $HADOOP_HOME/sbin/start-dfs.sh

# 编辑停止脚本
nano $HADOOP_HOME/sbin/stop-dfs.sh

在两个文件的开头(#!/usr/bin/env bash之后)分别添加以下内容:

HDFS_DATANODE_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

12.编辑 start-yarn.sh 和 stop-yarn.sh

# 编辑启动脚本
nano $HADOOP_HOME/sbin/start-yarn.sh

# 编辑停止脚本
nano $HADOOP_HOME/sbin/stop-yarn.sh

在两个文件的开头(#!/usr/bin/env bash之后)分别添加以下内容:

YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_USER=root
YARN_NODEMANAGER_USER=root

13.复制配置到从节点

# 复制到node01
scp -r $HADOOP_HOME/etc/hadoop/* node01:$HADOOP_HOME/etc/hadoop/

# 复制到node02
scp -r $HADOOP_HOME/etc/hadoop/* node02:$HADOOP_HOME/etc/hadoop/

14.格式化 HDFS(仅在 master 节点执行)
hdfs namenode -format
15.启动 Hadoop 集群(在 master 节点执行)

# 启动HDFS
start-dfs.sh

# 启动YARN
start-yarn.sh

# 启动历史服务器
mr-jobhistory-daemon.sh start historyserver

16.验证集群状态(所有节点执行)

# 查看Java进程
jps

# master节点应显示:
# NameNode, ResourceManager, SecondaryNameNode, JobHistoryServer, Jps

# node节点应显示:
# DataNode, NodeManager, Jps

17.访问web端查看是否启动正常
HDFS 管理界面:http://192.168.43.3:9870(可看到 DataNode 数量为 2)

wechat_2025-09-14_154428_982

YARN 管理界面:http://192.168.43.3:8088(可看到活跃节点为 2)

wechat_2025-09-14_154410_608
18.执行一个简单的 Hadoop 命令验证集群功能

# 在HDFS上创建一个测试目录
hdfs dfs -mkdir /test

# 上传一个本地文件到HDFS
echo "Hello Hadoop" > test.txt
hdfs dfs -put test.txt /test/

# 查看HDFS上的文件
hdfs dfs -ls /test/
hdfs dfs -cat /test/test.txt

19.测试 YARN 集群的 MapReduce 功能
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar pi 10 100
输出圆周率即测试功能正常

wechat_2025-09-14_154649_945

都测试正常,说明Hadoop集群搭建完成,可以进行使用啦!

posted @ 2025-09-14 15:55  努力成为OM大师  阅读(103)  评论(0)    收藏  举报