Hadoop 安装与搭建全流程教学【全网最全超详细保姆级教学】
一.前言
Hadoop 的安装是一场充满细节的挑战😫!不过别担心,本篇保姆级教程将手把手带你从零搭建一个 3 节点 Hadoop 集群,即便是完全没接触过的新手,也能跟着步骤一遍成功✅!亲测有效,放心上车🚀!
基础知识
常用命令
命令含义例子cd [路径]切换目录cd /etc/hostsvi [文件]编辑文件vi /etc/hostssource [文件]使配置文件生效source ~/.bashrc 注意事项
在 Linux 中使用 vi 编辑文件后,需通过 :wq 保存并退出(按下 Esc 键后输入)。本教程使用 root 用户操作(仅限开发测试环境),生产环境需创建专用用户(如 hadoop)并授权。如果你只想创建只含单个Linux虚拟机的Hadoop集群,只需要不进行虚拟机克隆并对相关配置命令进行适当修改即可。
二、环境准备阶段
1. 软件资源下载
本篇选择创建一个Name Node和两个Data Node来构成Hadoop集群。
在创建Hadoop集群前,需要安装和准备几个必须的软件
java安装包下载
本文中使用的是Oracle提供的java的jdk-8u401-linux-x64.tar.gz安装包(点击这一链接后往下滑即可看到)
下载这一安装包唯一的困难就是需要创建一个Oracle的账户,如下:
邮箱和密码正常填写,其余部分乱填也无所谓(别太夸张即可)
Hadoop 3.3.5 安装包下载
本文中使用的Hadoop是阿里云提供的Apache-Hadoop-common-Hadoop-3.3.5安装包下载_开源镜像站-阿里云
传输文件到虚拟机
下载了上述两个文件后想将其传到虚拟机上有两种方法。 第一种是直接使用指令来传输文件
scp "D:/Downloads/hadoop-3.3.5.tar.gz" hadoop01@192.168.245.128:~/Downloads #改成你自己的路径和ip
第二种是通过使用远程连接软件Xftp,在Xftp中可以直接拖动文件传输,相关下载及安装我就不赘述了,可以参考这一篇: 2024年了!!Xftp新手的下载和安装教程(超详细),以及演示了远程登录和远程文件传输-CSDN博客
虚拟机软件(本文使用VMware Workstation)
具体安装教程就不在此赘述了,可以参考这一篇:
安装虚拟机(VMware)保姆级教程(附安装包)_VMware虚拟机-CSDN博客
注意我们使用的是Linux版本是CentOS7而不是Ubuntu,可以使用上面这一篇中提供的百度网盘链接下载也可以使用阿里云提供的centos-7-isos-x86_64安装包下载_开源镜像站-阿里云(强烈推荐!很快)
2. 虚拟机创建(以 CentOS 7 为例)
(1)基础配置
新建虚拟机
硬件配置
内存:每台 2GB(最低 1GB,生产环境建议 8GB+)。CPU:每台 1 核(最低 1 核,生产环境建议 4 核 +)。硬盘:每台 20GB(动态扩展,生产环境建议单独划分 /data 分区)。 网络模式:选择 使用网络地址转换(Net)
(2)克隆优化(推荐)
创建第一台虚拟机(hadoop01)并完成基础安装。
关机后克隆
!!!(建议在安装完java和Hadoop并配置完环境变量后再进行克隆,不然克隆的两个虚拟机还得再执行一遍下载和配置操作)
# 在VMware中右键虚拟机→管理→克隆→创建完整克隆
# 依次克隆出hadoop02和hadoop03,并修改好主机名(见下文)
三、基础环境配置(所有节点执行)
1. 静态 IP 配置(所有节点)
(1)查看网络设备名称
ip addr # 通常为ens33或eth0
(2)查看网络信息
ifconfig
输出的结果需要记住当前虚拟机的ip地址和mac地址,后面会用到。
(3)配置静态 IP(以 hadoop01 为例)
vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 根据实际设备名修改,一般不用修改
# 需要设置的几个配置
TYPE=Ethernet
BOOTPROTO="static" # 改为静态IP,原先为:"dhcp"
NAME=ens33
DEVICE=ens33
ONBOOT=yes # 开机自动启用网卡
# 添加以下配置
IPADDR=192.168.245.128 # 静态IP地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.245.1 # 网关(与宿主机一致)
DNS1=8.8.8.8 # DNS服务器
(4)重启网络服务
systemctl restart network
(5)验证 IP 配置
ip addr # 确认IP已变更(看不懂也无所谓,能ping通外网即可)
ping www.baidu.com # 测试外网连通性
2. 主机名配置(各节点分别执行)
(1)修改主机名
在各个虚拟机中输入对应指令,并在修改了主机名后重启(重启可以输入reboot或手动重启)以使修改生效。
# hadoop01节点
hostnamectl set-hostname hadoop01
# hadoop02节点
hostnamectl set-hostname hadoop02
# hadoop03节点
hostnamectl set-hostname hadoop03
(2)验证主机名修改
hostname # 应输出对应主机名
3、hosts 文件配置(所有节点)
(1)编辑 /etc/hosts 文件
vi /etc/hosts
(2)添加 IP 与主机名映射
127.0.0.1 localhost localhost.localdomain
......(原来有的不需要动)
192.168.245.128 hadoop01 # 改成对应的ip和名称
192.168.245.129 hadoop02 # 改成对应的ip和名称
192.168.245.130 hadoop03 # 改成对应的ip和名称
4、网络互通测试(所有节点)
(1)测试本地主机名解析
ping hadoop01 -c 3 # 应返回3次192.168.245.128的响应
(2)测试跨节点通信
# 在hadoop01上执行
ping hadoop02 -c 3
ping hadoop03 -c 3
# 在hadoop02上执行
ping hadoop01 -c 3
ping hadoop03 -c 3
# 在hadoop03上执行
ping hadoop01 -c 3
ping hadoop02 -c 3
(3)测试外网连通性(可选)
ping www.baidu.com -c 3 # 若不通,检查网关和DNS配置
5、常见问题排查
(1)ping 不通其他节点
检查防火墙状态
systemctl status firewalld # 确保已关闭
检查 hosts 文件: 确认所有节点的 hosts 文件内容一致,无拼写错误。
(2)能 ping 通 IP 但 ping 不通主机名
检查 DNS 配置: 确保/etc/resolv.conf包含正确的 DNS 服务器(如nameserver 8.8.8.8)。
(3)虚拟机无法访问外网
检查 VMware 网络设置: 确认虚拟机网络模式为 Net,且宿主机可正常上网。
6. 节点角色与功能说明
NameNode(主节点,hadoop01): 负责管理 HDFS 文件系统的元数据(如文件路径、权限、数据块分布),是集群的 “大脑”。DataNode(数据节点,hadoop02/hadoop03): 实际存储数据块,定期向 NameNode 汇报存储状态,是集群的 “存储载体”。JDK 依赖:Hadoop 基于 Java 开发,必须提前安装 JDK 1.8+(本教程使用 1.8.0_401)。软链接优化:通过 /usr/local/hadoop 软链接指向实际安装目录 /usr/local/hadoop-3.3.5,方便后续统一路径引用。
7. 关闭防火墙与 SELinux(重要!)
操作原因:
防火墙可能拦截 Hadoop 节点间通信(如 NameNode 与 DataNode 交换数据块信息)。SELinux 是 Linux 的安全增强机制,可能限制 Hadoop 进程访问文件系统。 操作命令:
systemctl stop firewalld && systemctl disable firewalld # 停止并禁用防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 修改SELinux配置为禁用
setenforce 0 # 立即生效SELinux配置
⚠️ 生产环境注意:需要通过 firewall-cmd 开放 Hadoop 端口(如 9000、9870、8088 等),而非直接关闭防火墙。
四. 创建 hadoop 专用账户(生产环境必选,使用root账户的可以不用管)
1. 创建用户并设置密码
useradd -m -s /bin/bash hadoop # 创建用户并关联家目录
passwd hadoop # 设置密码
参数说明:
-m:自动创建用户家目录 /home/hadoop。-s /bin/bash:指定默认 shell 为 bash。
2. 赋予 sudo 权限(可选但推荐)
vi /etc/sudoers # 编辑 sudo 配置文件
添加内容(在 root ALL=(ALL) ALL 下方):
hadoop ALL=(ALL) NOPASSWD:ALL # 允许hadoop用户无密码执行sudo命令
生效方式:无需重启,直接使用 sudo 命令测试。
3. 切换到 Hadoop 用户
su hadoop # 切换用户,后续操作建议在此用户下进行
五、 安装 JDK:搭建 Java 运行环境
操作步骤:
1. 解压安装
下载 JDK 8 的 Linux 压缩包,上传至 /usr/local/ 目录。
tar -zxvf jdk-8u401-linux-x64.tar.gz -C /usr/local/
# 如果下载到不同的路径,则需要适当修改成你的文件路径。-C指定解压到/usr/local/
2. 配置环境变量
JAVA_HOME 指向 JDK 安装目录,供其他程序调用。PATH 包含 JDK 的 bin 目录,使 java、javac 等命令全局可用。
vi ~/.bashrc # 编辑当前用户的环境变量文件(若需全局生效,编辑/etc/profile),建议两个都添加一遍。
添加:
export JAVA_HOME=/usr/local/jdk1.8.0_401
export PATH=$JAVA_HOME/bin:$PATH # $PATH表示保留原有路径
使配置生效:
source ~/.bashrc # 使环境变量无需重启即可生效
source /etc/profile
3. 验证安装
java -version # 应输出类似"java version "1.8.0_401""的信息
六、Hadoop 安装(Java和Hadoop配置好后进行虚拟机克隆)
1. 下载与解压:获取 Hadoop 二进制文件
tar -zxvf hadoop-3.3.5.tar.gz -C /usr/local/ # 解压到/usr/local/
2. 创建软链接:简化路径引用
操作目的: 避免因版本号变更(如从 3.3.5 升级到 3.4.0)导致配置文件路径频繁修改,提高可维护性。
ln -s /usr/local/hadoop-3.3.5 /usr/local/hadoop # 创建软链接
执行后,/usr/local/hadoop 等同于 /usr/local/hadoop-3.3.5 目录。(这里可以理解为在Linux中创建了一个快捷方式)
3. 配置 Hadoop 环境变量:让命令全局可用
操作逻辑: 将 Hadoop 的 bin(命令工具)和 sbin(服务脚本)目录加入系统路径,方便直接执行 hadoop、start-dfs.sh 等命令。
vi ~/.bashrc
添加:
export HADOOP_HOME=/usr/local/hadoop # 指向软链接路径
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH # 优先搜索Hadoop命令
生效命令
source ~/.bashrc
七、SSH 无密码登录配置(在 hadoop01 执行)
1. 生成密钥对:实现安全免密通信
技术原理: 通过 SSH 公钥认证机制,让 NameNode 节点(hadoop01)无需输入密码即可登录其他节点(hadoop02/hadoop03),便于集群管理脚本自动执行。
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa # -t指定加密算法,-P ""设置空密码,-f指定密钥文件路径
执行后会在 ~/.ssh/ 目录生成 id_rsa(私钥)和 id_rsa.pub(公钥)。
2. 分发公钥:授权目标节点
操作步骤:
向自身授权
(伪分布式必填,分布式集群可选):
ssh-copy-id hadoop01 # 将公钥添加到hadoop01的授权列表
向 DataNode 节点授权
ssh-copy-id hadoop02 # 输入hadoop02的密码后完成授权
ssh-copy-id hadoop03
测试方法
ssh hadoop02 # 若直接进入终端,说明免密登录成功
exit # 退出登录
八、Hadoop 集群配置(仅 hadoop01 执行)
1. 进入配置目录:定位核心配置文件
cd /usr/local/hadoop/etc/hadoop # Hadoop配置文件集中存放于此
该目录包含 core-site.xml(核心配置)、hdfs-site.xml(存储配置)等关键文件。想查看该文件夹下有哪些文件可以通过命令:
ls
2. 编辑 core-site.xml:配置 HDFS 核心参数
核心参数解析:
fs.defaultFS
:指定 HDFS 的默认访问地址,格式为
hdfs://主机名:端口号
hadoop01 是 NameNode 主机名,9000 是 HDFS 服务默认端口。 hadoop.tmp.dir:Hadoop 运行时生成的临时文件路径(如数据块传输临时文件),需手动创建。
3. 编辑 hdfs-site.xml:配置数据存储策略
关键参数说明:
dfs.namenode.name.dir:NameNode 存储元数据的路径(如文件目录结构、数据块映射表)。dfs.datanode.data.dir:DataNode 存储数据块的路径。dfs.replication:数据块副本数,设为 2 表示每个数据块在集群中保留 2 个副本(与 DataNode 数量一致)。
4. 编辑 workers 文件:指定 DataNode 节点列表
作用: Hadoop 通过此文件识别哪些节点作为 DataNode 运行,每行填写一个主机名。
vi workers
内容:
hadoop02 # 注意:无需添加localhost,直接写DataNode主机名
hadoop03
九、同步配置到 DataNode 节点(hadoop01 执行)
操作目的: 确保所有 DataNode 节点使用与 NameNode 一致的配置文件,避免因配置不一致导致集群分裂。 操作命令:
scp -r /usr/local/hadoop/etc/hadoop hadoop02:/usr/local/hadoop/etc/ # -r递归复制目录
scp -r /usr/local/hadoop/etc/hadoop hadoop03:/usr/local/hadoop/etc/
执行说明:
scp 是安全复制命令,-r 表示复制目录及其子文件。输入目标节点密码后,配置文件将同步到 hadoop02和hadoop03 的 /usr/local/hadoop/etc/hadoop/ 目录。
十、创建数据目录(所有节点执行)
1. 创建临时目录
mkdir -p /usr/local/hadoop/tmp # -p确保父目录不存在时自动创建
用途:存储 Hadoop 运行时的临时文件(如 NameNode 启动时的格式化日志)。
2. 创建元数据与数据存储目录
mkdir -p /usr/local/hadoop/dfs/name # NameNode元数据目录
mkdir -p /usr/local/hadoop/dfs/data # DataNode数据块目录
权限说明: 确保当前用户(如 root 或 hadoop 用户)对这些目录有读写权限,可通过 chown 命令调整:
chown -R $USER:$USER /usr/local/hadoop # $USER表示当前用户,-R递归修改权限
十一、初始化与启动集群
1. 初始化 NameNode:创建元数据存储结构
操作作用: 首次启动 HDFS 前必须执行,用于创建 NameNode 的初始元数据文件(如 fsimage、edits)。该命令在使用该Hadoop集群的过程中只需要运行一次,后续启动Hadoop就不需要再次运行。
hdfs namenode -format # 初始化命令
运行结果:
[root@hadoop01 hadoop]# hdfs namenode -format
上一次登录:二 6月 3 08:46:51 PDT 2025pts/0 上
2025-06-03 08:46:57,606 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = hadoop01/192.168.245.128
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 3.3.5
STARTUP_MSG: classpath = /usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/slf4j-
......
......
......
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop01/192.168.245.128
************************************************************/
注意事项:
初始化会清空之前的元数据,生产环境需谨慎操作。若提示 successfully formatted,表示初始化成功。
2. 启动 HDFS 集群:启动所有节点服务
操作命令:
start-dfs.sh # 一键启动NameNode和DataNode服务
后台流程:
在 hadoop01 节点启动 NameNode 和 SecondaryNameNode 进程。通过 SSH 免密登录机制,在 hadoop02/hadoop03 节点启动 DataNode 进程。
3. 启动 YARN(可选):启用资源管理框架
操作场景: 若需运行 MapReduce 作业,需启动 YARN 服务。
start-yarn.sh # 启动ResourceManager(hadoop01)和NodeManager(hadoop02/hadoop03)
十二、验证集群状态
1. 查看进程:确认服务正常运行
操作命令(各节点执行):
jps # Java进程查看命令
hadoop01 节点预期输出(类似如下内容):
1234 NameNode # NameNode主进程
5678 SecondaryNameNode # 辅助元数据管理进程
9012 ResourceManager # YARN资源管理器(若启动)
hadoop02/hadoop03 节点预期输出:
1234 DataNode # 数据存储进程
5678 NodeManager # YARN节点管理器(若启动)
2. 访问 Web 界面:可视化监控集群
NameNode 界面:
地址:http://192.168.245.128:9870(此处需要换成你自己的ip地址,端口可以不动)核心功能:
查看集群总容量、已用空间、副本率。在 Datanodes 标签页查看每个 DataNode 的健康状态和存储使用情况。
ResourceManager 界面(若启动 YARN):
地址:http://192.168.245.128:8088(同上)核心功能:
监控 MapReduce 作业的运行状态。在 Nodes 标签页查看 NodeManager 节点的资源使用情况(CPU、内存)。
十三、常见问题深度解析
1. 以 root 用户启动报错:权限控制机制
错误原因: Hadoop 为避免权限滥用,默认禁止以 root 用户直接启动服务。 解决方案:
方案一(临时)
hadoop-env.sh
声明 root 用户为合法运行用户:
vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh
添加:
export HDFS_NAMENODE_USER=root # 声明NameNode以root运行
export HDFS_DATANODE_USER=root # 声明DataNode以root运行
方案二(推荐):创建专用用户 hadoop 并授权(见本教程 目录四)。
2. jps 命令未找到:环境变量遗漏
排查步骤:
确认 JDK 已安装:java -version 是否输出版本信息?
检查
echo $PATH | grep java # 应看到"/usr/local/jdk1.8.0_401/bin"路径
若未包含,重新执行 source ~/.bashrc 或重启终端。
3. DataNode 未注册:通信或配置故障
排查流程:
网络连通性:在 hadoop01 节点执行 ping hadoop02,确保节点间网络可达。配置同步:检查 hadoop02/hadoop03 的 workers 文件是否包含自身主机名。目录权限:确保 /usr/local/hadoop/dfs/data 目录存在且当前用户有读写权限。
十四、附录:常用命令与资源
1. 命令速查表
文件系统操作:hadoop fs进程查看:jps配置生效:source
操作类型命令示例说明启动 HDFSstart-dfs.sh启动所有 HDFS 相关进程停止 HDFSstop-dfs.sh停止所有 HDFS 相关进程查看集群健康状态hdfs dfsadmin -report显示节点列表、存储使用情况等上传文件到 HDFShadoop fs -put /local/file /hdfs/path将本地文件上传至 HDFS 根目录下载 HDFS 文件hadoop fs -get /hdfs/file /local/path将 HDFS 文件下载到本地重启单个节点ssh hadoop02 stop-dfs.sh && start-dfs.sh远程重启 hadoop02 节点的 DataNode