- 环境准备:配置虚拟机、网络、主机名等。
- 基础软件安装:安装 JDK、Hadoop、配置 SSH 免密登录。
- Hadoop 配置:修改核心配置文件,使其在单节点上以“伪分布式”模式运行。
- 格式化与启动:首次格式化 HDFS 文件系统,并启动 Hadoop 相关进程。
- 验证运行:通过 Web UI 和命令行验证 Hadoop 是否正常工作。
第一步:环境准备
在开始之前,请确保你已经准备好一台 Linux 虚拟机(推荐使用 VMware 或 VirtualBox),本教程以 CentOS 7 Minimal (64-bit) 为例。

1 关闭防火墙和 SELinux
为了简化配置,我们先关闭防火墙和 SELinux,在生产环境中,请务必进行正确配置,而不是简单关闭。
# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭 SELinux setenforce 0 # 临时关闭,重启后失效 # 永久关闭,需要编辑 /etc/selinux/config 文件,将 SELINUX=disabled
2 配置静态 IP 和主机名
为了方便后续操作,建议配置静态 IP 和一个有意义的域名。
# 1. 编辑网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 2. 修改以下内容 (根据你的实际情况修改 IP 和网关) BOOTPROTO=static ONBOOT=yes IPADDR=192.168.10.100 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 DNS1=8.8.8.8 # 3. 重启网络服务 systemctl restart network # 4. 配置主机名 hostnamectl set-hostname hadoop-node1 # 5. 配置 hosts 文件,实现主机名到 IP 的映射 vi /etc/hosts
在 /etc/hosts 文件中添加以下内容:
168.10.100 hadoop-node1
3 安装并配置 JDK
Hadoop 需要 Java 环境支持,我们安装 OpenJDK 1.8。

# 1. 安装 OpenJDK 1.8 yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y # 2. 验证安装 java -version javac -version # 3. 配置 JAVA_HOME 环境变量 # 编辑 /etc/profile 文件 vi /etc/profile
在文件末尾添加:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.x.x.x.x.el7_9.x86_64 # 可以使用命令 `echo $JAVA_HOME` 来确认你的具体路径 export PATH=$PATH:$JAVA_HOME/bin
使配置生效:
source /etc/profile
第二步:安装和配置 Hadoop
1 创建 Hadoop 用户
为了安全,不建议使用 root 用户运行 Hadoop。
# 创建用户 useradd hadoop # 设置密码 passwd hadoop # 赋予 sudo 权限 (可选) visudo # 在文件末尾添加 hadoop ALL=(ALL) NOPASSWD: ALL
2 配置 SSH 免密登录
Hadoop 的进程间通信需要用到 SSH,配置 hadoop 用户可以免密登录本机。
# 切换到 hadoop 用户 su - hadoop # 生成 SSH 密钥对 (一路回车即可) ssh-keygen -t rsa # 将公钥追加到授权列表中 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 设置授权文件的权限 chmod 600 ~/.ssh/authorized_keys # 测试免密登录 ssh localhost # 如果不需要输入密码就能登录,则配置成功
3 下载并解压 Hadoop
从 Hadoop 官方下载页面下载稳定版本(hadoop-3.3.6)。
# 切换到 hadoop 用户 su - hadoop # 创建一个目录用于存放安装包 mkdir -p /opt/software # 下载 Hadoop (请替换为最新版本的链接) wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz # 将安装包解压到 /usr/local 目录 tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/ # 创建软链接,方便使用 ln -s /usr/local/hadoop-3.3.6 /usr/local/hadoop # 修改 hadoop 目录的所属用户 sudo chown -R hadoop:hadoop /usr/local/hadoop
4 配置 Hadoop 环境变量
在 hadoop 用户的 ~/.bashrc 文件中配置 Hadoop 相关的环境变量。
# 编辑 .bashrc 文件 vi ~/.bashrc
在文件末尾添加:
# Hadoop Environment Variables export HADOOP_HOME=/usr/local/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使配置生效:
source ~/.bashrc
第三步:配置 Hadoop 核心文件
这是整个搭建过程中最关键的一步,我们需要修改 $HADOOP_HOME/etc/hadoop 目录下的几个核心 XML 配置文件。
1 core-site.xml
配置 Hadoop 的核心属性,如 NameNode 的地址。
vi $HADOOP_HOME/etc/hadoop/core-site.xml
在 <configuration> 标签内添加:
<configuration>
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-node1:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data/tmp</value>
</property>
</configuration>
2 hdfs-site.xml
配置 HDFS 的相关属性,如副本数、DataNode 存储目录等。
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
在 <configuration> 标签内添加:
<configuration>
<!-- 指定 HDFS 副本数量,伪分布式模式设置为 1 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 指定 NameNode 数据存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/data/dfs/name</value>
</property>
<!-- 指定 DataNode 数据存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/data/dfs/data</value>
</property>
<!-- 配置 Web UI 允许访问的主机 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop-node1:9870</value>
</property>
</configuration>
3 mapred-site.xml
配置 MapReduce 框架,指定使用 YARN 作为资源调度器。
# 首先需要重命名模板文件 cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml # 然后编辑 vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
在 <configuration> 标签内添加:
<configuration>
<!-- 指定 MapReduce 运行在 YARN 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 配置 MapReduce JobHistory Server 的地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-node1:10020</value>
</property>
<!-- 配置 MapReduce JobHistory Server 的 Web UI 地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop-node1:19888</value>
</property>
</configuration>
4 yarn-site.xml
配置 YARN 的相关属性。
vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
在 <configuration> 标签内添加:
<configuration>
<!-- NodeManager 上运行的辅助服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-node1</value>
</property>
<!-- 配置 Web UI 允许访问的主机 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop-node1:8088</value>
</property>
</configuration>
5 配置 workers
指定哪些节点是 Worker 节点,在伪分布式模式下,只有本机一个节点。
vi $HADOOP_HOME/etc/hadoop/workers ```修改为: ```bash hadoop-node1
注意:在 Hadoop 2.x 中,这个文件可能名为
slaves,Hadoop 3.x 改名为workers。
第四步:格式化与启动 Hadoop
1 格式化 HDFS 文件系统
在第一次启动 HDFS 之前,必须对 NameNode 进行格式化。此操作会清空 HDFS 上的所有数据,请谨慎操作!
# 切换到 hadoop 用户 su - hadoop # 格式化命令 hdfs namenode -format
如果看到 ... has been successfully formatted 的提示,说明格式化成功。
2 启动 Hadoop 集群
Hadoop 提供了便捷的脚本来启动所有相关服务。
# 启动所有 Hadoop 相关服务 (HDFS 和 YARN) start-dfs.sh start-yarn.sh
3 检查进程
使用 jps 命令检查是否所有进程都已成功启动。
jps
如果一切正常,你应该能看到以下进程:
12345 NameNode 23456 DataNode 34567 NodeManager 45678 ResourceManager 56789 SecondaryNameNode
SecondaryNameNode 是 HDFS 的重要进程,必须存在。
第五步:验证 Hadoop 是否正常运行
1 通过 Web UI 验证
打开浏览器,访问以下地址,查看各个服务的 Web 管理界面。
-
HDFS NameNode UI:
http://hadoop-node1:9870- 你可以看到 Datanodes 信息,应该有一个 Live Node。
- 点击 "Utilities" -> "Browse the file system",可以看到
/user目录。
-
YARN ResourceManager UI:
http://hadoop-node1:8088- 你可以看到 Cluster、Nodes 等信息,应该有一个 Active Node。
- 点击 "Applications",可以看到当前运行的任务。
-
MapReduce JobHistory Server UI:
http://hadoop-node1:19888暂时不会有历史任务,但可以确认服务已启动。
2 运行 WordCount 示例
这是验证 Hadoop 是否能正常处理 MapReduce 任务的经典测试。
# 切换到 hadoop 用户 su - hadoop # 1. 创建一个输入文件 echo "hello world hello hadoop" > input.txt # 2. 在 HDFS 上创建一个输入目录 hdfs dfs -mkdir -p /input # 3. 将本地文件上传到 HDFS hdfs dfs -put input.txt /input/ # 4. 运行 WordCount 示例 # hadoop jar <jar_file> <main_class> <input_path> <output_path> hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /input /output # 5. 查看运行结果 hdfs dfs -cat /output/* # 你应该会看到类似下面的输出: # hadoop 1 # hello 2 # world 1 # 6. 也可以查看 Web UI (http://hadoop-node1:8088) 确认任务是否成功完成。
常用管理命令
- 停止集群:
stop-yarn.sh stop-dfs.sh
- 查看 HDFS 文件:
hdfs dfs -ls / hdfs dfs -ls /output
- 删除 HDFS 目录:
hdfs dfs -rm -r /output
- 查看日志:
- 日志文件通常位于
$HADOOP_HOME/logs/目录下。 cat $HADOOP_HOME/logs/hadoop-hadoop-namenode-hadoop-node1.log
- 日志文件通常位于
至此,你已经成功搭建了一个 Hadoop 伪分布式环境!这个环境在单台机器上模拟了 Hadoop 集群的所有核心组件,非常适合用于学习、开发和测试 Hadoop 的各种组件(如 HDFS, MapReduce, YARN)。
如果你遇到问题,请仔细检查:
- 网络配置:
/etc/hosts是否正确。 - 环境变量:
JAVA_HOME和HADOOP_HOME是否配置正确并已生效。 - 配置文件:XML 文件中的路径和端口是否与你的环境匹配。
- 权限问题:
hadoop用户是否有对数据目录和日志目录的读写权限。 - 日志:查看各个服务的日志文件,通常能找到错误原因。
