☰
Hadoop 完全分布式搭建(一):集群规划、网络配置与三节点环境准备
2026/10/23 3:03:57 网站建设 项目流程

一、集群规划

主机名 IP 部署进程
master 192.168.xxx.101 NameNode、SecondaryNameNode、ResourceManager
slave1 192.168.xxx.102 DataNode、NodeManager
slave2 192.168.xxx.103 DataNode、NodeManager

/etc/hosts(三台机器都要写,不能只写本机):

192.168.xxx.101 master 192.168.xxx.102 slave1 192.168.xxx.103 slave2

二、虚拟机与网络基础配置

2.1 分区(OpenEuler / CentOS 手动分区)

挂载点 大小
/boot 300 MB (引导操作系统启动)
swap 4 GB(内存 2 GB 时取两倍。交换分区,大小设置为内存的两倍 4G)
biosboot 1 GB(仅 OpenEuler 需要)
/ (根目录,剩余空间全部分配给根目录)

2.2 静态 IP

编辑网卡配置(以 ens33 为例):

vi/etc/sysconfig/network-scripts/ifcfg-ens33

修改:

BOOTPROTO=static ONBOOT=yes

文末追加(以 master 为例,slave 改最后一位):

IPADDR=192.168.xxx.101 NETMASK=255.255.255.0 GATEWAY=192.168.xxx.2 DNS1=114.114.114.114

修改好就保存并退出
:wq
重启网络(使生效):

systemctl restart network

验证(测试网络连通性):

pingwww.163.com

2.3 主机名

三台机器分别执行(以 master 为例):

hostnamectl set-hostname master

改完永久主机名之后,新开终端或者执行 bash 才会看到新主机名并且使命令生效。
还可以直接重启主机,输入reboot。
补充提示:
(1) 临时性修改主机名称: hostname 主机名 (重启失效)
(2) 永久修改主机名称: hostnamectl set-hostname 主机名
(3) 查看主机名称: hostname
2.4 关闭并禁用防火墙(每台机器)

systemctl stop firewalld systemctl disable firewalld systemctl status firewalld

补充:
使用远程连接工具连接虚拟机(推荐)
(1)Finalshell
(2)Mobaxterm
(3)Xshell

三、工作目录与环境变量
压缩包自己去下载好,并且根据自己下载的版本进行配置,特别需要注意自己下载的版本之间是否兼容。(下面以我的版本为示例)

3.1 创建工作目录

mkdir-p/opt/data /opt/module /opt/software

/opt/software压缩包存放地,/opt/module解压路径,数据目录一次性创建。
3.2 安装 JDK

将 JDK 压缩包上传到 /opt/software,解压:

tar-zxvf/opt/software/jdk-8u221-linux-x64.tar.gz-C/opt/module

配置环境变量:

vi/etc/profile

文末追加(路径按实际目录名修改):

exportJAVA_HOME=/opt/module/jdk1.8.0_221exportPATH=$PATH:$JAVA_HOME/bin

刷新并验证:

source/etc/profilejava-version

3.3 安装 Hadoop

解压:

tar-zxvf/opt/software/hadoop-3.3.4.tar.gz-C/opt/module

环境变量(追加到 /etc/profile):

exportHADOOP_HOME=/opt/module/hadoop-3.3.4exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

刷新并验证:

source/etc/profile hadoop version

四、克隆与 Slave 节点修改

master 安装配置完成后,克隆出 slave1 和 slave2。克隆后每台 slave 必须改两样东西:

  1. IP 最后一段:slave1 改为 192.168.xxx.102,slave2 改为 192.168.xxx.103,重启网卡。
  2. 主机名:
    hostnamectl set-hostname slave1# slave2 改为 slave2reboot

克隆后需要修改主机名与ip地址的映射关系(三台机器都需要执行)
Vi /etc/hosts
文末添加:
192.168.xxx.101 master
192.168.xxx.102 slave1
192.168.xxx.103 slave2
保存并退出

五、SSH 免密登录

5.1 生成密钥(三台机器都执行一次)

ssh-keygen-trsa

补充提要:
三台机器每台执行一次,一路回车,不设置密钥密码。
错误提醒;ssh-keygen之间没有空格
5.2 本机免密(发送密钥)

cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys#cat >> 之后默认权限通常能用,但部分系统对 .ssh 目录和 authorized_keys 权限检查严格,建议补两行。也可根据情况添加。chmod700~/.sshchmod600~/.ssh/authorized_keys

5.3 从 master 分发公钥到所有节点

在 master 上执行:

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

补充提要:三台机器全部做完,一共9次ssh-copy-id,每次执行输入一次目标主机密码,一共输入9次密码,实现集群全节点互相免密登录。
验证(应该不输入密码就能返回主机名):

sshmasterhostnamesshslave1hostnamesshslave2hostname

如果 slave 节点也要能免密 SSH 到其他节点,按同样方式在 slave 上执行 ssh-copy-id。完全分布式下一键启动脚本从 master 发起,master 到 slave1/slave2 的免密是必须的。

六、Hadoop 核心配置(在 master 上完成)

进入配置目录:

cd$HADOOP_HOME/etc/hadoop

6.1 hadoop-env.sh (vi hadoop-env.sh)

在文件头部附近添加(JAVA_HOME 必须替换成你实际的 JDK 路径):

exportJAVA_HOME=/opt/module/jdk1.8.0_221exportHDFS_NAMENODE_USER=rootexportHDFS_SECONDARYNAMENODE_USER=rootexportHDFS_DATANODE_USER=rootexportYARN_RESOURCEMANAGER_USER=rootexportYARN_NODEMANAGER_USER=root

6.2 core-site.xml(vi core-site.xml)核心配置文件

<configuration><property><name>fs.defaultFS</name><value>hdfs://master:9000</value></property><property><name>hadoop.tmp.dir</name><value>/opt/data/hadoop</value></property></configuration>

fs.defaultFS这段的代码:指定NameNode地址
hadoop.tmp.dir这段代码:指定Hadoop数据存放目录
补充提要:
/opt/data/hadoop
修改成为自己实际的Hadoop的路径

fs.defaultFS 用主机名 master,不要写 IP,也不要写 localhost。主机名必须与 /etc/hosts 一致。

6.3 hdfs-site.xml(vi hdfs-site.xml)编辑HDFS配置文件

<configuration><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.namenode.name.dir</name><value>/opt/data/hadoop/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>/opt/data/hadoop/dfs/data</value></property></configuration>

3 节点集群 dfs.replication=3 是合理的;如果只是做实验想省磁盘,可以改成 2。
6.4 mapred-site.xml (vi mapred-site.xml)编辑MapReduce配置文件

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.4</value></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.4</value></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.4</value></property></configuration>

6.5 yarn-site.xml (vi yarn-site.xml)编辑YARN配置文件

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>

只跑 MapReduce 的话这一条就够用。

6.6 workers(为了一键启停脚本指定集群的数据节点列表,master通过免密的ssh启停slave1和slave2)

清空原内容,只保留两行,不要有空行、不要有行尾空格:

slave1 slave2

七、分发配置到 Slave 节点

在 master 上执行(远程传递分发配置):

scp-r/opt/module/hadoop-3.3.4/etc/hadoop root@slave1:/opt/module/hadoop-3.3.4/etc/scp-r/opt/module/hadoop-3.3.4/etc/hadoop root@slave2:/opt/module/hadoop-3.3.4/etc/

八、格式化与启动

8.1 创建数据目录(三台机器都执行)

mkdir-p/opt/data/hadoop/dfs/namemkdir-p/opt/data/hadoop/dfs/datachown-Rroot:root /opt/data/hadoop

8.2 格式化 NameNode(只在 master 执行一次)

hdfs namenode-format

看见successfully,算格式化成功并且配置没有出现问题
如果没有格式化成功,可以一步步排查
8.3 启动集群

在 master 上:

start-all.sh

8.4 验证

jps

master 应看到:NameNode、SecondaryNameNode、ResourceManager
slave1 / slave2 应看到:DataNode、NodeManager

如果某个节点少了进程,可以去看一下hadoop-env.sh,看是否有配置错误,可能单词有错误。

停止集群:

stop-all.sh

全分布搭建结束

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询