重要声明:强烈推荐使用 WSL2
在开始之前,请务必了解一个重要事实:Hadoop 并非为 Windows 系统设计,它是一个原生运行在 Linux/Unix 环境下的分布式系统。

在 Windows 上原生安装 Hadoop 会遇到各种各样的问题,
- 路径问题:Hadoop 配置文件中使用 作为路径分隔符,而 Windows 使用
\。 - 权限问题:Windows 的文件权限模型与 Linux 的完全不同。
- Shell 脚本问题:Hadoop 启动/停止脚本通常是
.sh(bash) 脚本,无法在 Windows 命令行中直接运行。 - 性能问题:Windows 原生模拟层性能远不如原生 Linux。
强烈建议使用 WSL2 (Windows Subsystem for Linux 2) 来安装和运行 Hadoop,WSL2 提供了一个完整的、轻量级的 Linux 环境,性能极佳,是 Windows 上开发和学习 Linux 应用(如 Hadoop)的最佳方式。
本教程将分为两部分:
- 【推荐】使用 WSL2 安装 Hadoop
- 【传统】在 Windows 原生环境安装 Hadoop (不推荐,仅作了解)
第一部分:【推荐】使用 WSL2 安装 Hadoop (Ubuntu)
这是最稳定、最接近生产环境体验的安装方式。

步骤 1: 安装 WSL2
- 以管理员身份打开 PowerShell,在开始菜单中搜索
PowerShell,右键点击“Windows PowerShell”,选择“以管理员身份运行”。 - 执行安装命令,在 PowerShell 窗口中输入以下命令并回车:
wsl --install
这个命令会自动完成以下操作:
- 启用所需的 Windows 功能(WSL 和虚拟机平台)。
- 下载最新的 Linux 内核。
- 安装 Ubuntu 发行版。
- 将 Ubuntu 设置为默认的 WSL 发行版。
- 重启电脑,安装完成后,系统会提示你重启电脑,请保存所有工作并重启。
- 初始化 Ubuntu,重启后,Ubuntu 会自动启动,首次启动时,它会提示你创建一个新的用户名和密码。请记住这个用户名和密码,这是你在 WSL2 中的登录凭证,与 Windows 系统密码无关。
步骤 2: 在 WSL2 中安装 Java
Hadoop 依赖 Java 环境,我们将安装 OpenJDK 8,这是 Hadoop 最兼容的版本。
- 更新软件包列表:
sudo apt update
- 安装 OpenJDK 8:
sudo apt install openjdk-8-jdk -y
- 验证 Java 安装:
java -version
你应该能看到类似下面的输出,表明 Java 安装成功:
openjdk version "1.8.0_..." OpenJDK Runtime Environment (build ...) OpenJDK 64-Bit Server VM (build ...)
步骤 3: 创建 Hadoop 用户(可选但推荐)
为了更好的权限管理,可以创建一个专门用于 Hadoop 的用户。

- 创建新用户(
hadoopuser):sudo adduser hadoopuser
- 赋予 sudo 权限:
sudo usermod -aG sudo hadoopuser
- 切换到新用户:
su - hadoopuser
之后的所有操作都在
hadoopuser下进行。
步骤 4: 下载并解压 Hadoop
- 创建一个目录用于存放 Hadoop,
/home/hadoopuser/hadoop。mkdir -p ~/hadoop
- 下载 Hadoop,我们下载稳定版本 3.3.x,你可以从 Hadoop 官网 找到下载链接。
# 下载 Hadoop 3.3.6 wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.6/hadoop-3.3.6.tar.gz
- 解压 Hadoop:
tar -xzvf hadoop-3.3.6.tar.gz -C ~/hadoop
- 创建软链接,方便后续操作:
ln -s ~/hadoop/hadoop-3.3.6 ~/hadoop/hadoop
步骤 5: 配置 Hadoop
这是最关键的一步,我们需要修改几个核心配置文件,所有文件都位于 ~/hadoop/hadoop/etc/hadoop/ 目录下。
-
配置
hadoop-env.sh- 用
vim或nano编辑器打开文件:vim ~/hadoop/hadoop/etc/hadoop/hadoop-env.sh
- 找到
# export JAVA_HOME=这一行,取消注释并修改为你的 Java 安装路径,在 WSL2 的 Ubuntu 中,通常路径是/usr/lib/jvm/java-8-openjdk-amd64,你可以用echo $JAVA_HOME来确认。export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- 用
-
配置
core-site.xml- 打开文件:
vim ~/hadoop/hadoop/etc/hadoop/core-site.xml
- 在
<configuration>和</configuration>标签之间添加以下内容,这指定了 Hadoop 的文件系统基础地址,使用hdfs://localhost:9000表示在本地运行 HDFS。<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
- 打开文件:
-
配置
hdfs-site.xml- 打开文件:
vim ~/hadoop/hadoop/etc/hadoop/hdfs-site.xml
- 在
<configuration>标签内添加以下内容,这指定了 HDFS 的数据存储目录和副本数。<configuration> <property> <name>dfs.replication</name> <value>1</value> <!-- 单机模式,副本数设为1 --> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/hadoopuser/hadoop/hadoopdata/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/hadoopuser/hadoop/hadoopdata/datanode</value> </property> </configuration> - 创建这些目录:
mkdir -p ~/hadoop/hadoopdata/namenode mkdir -p ~/hadoop/hadoopdata/datanode
- 打开文件:
-
配置
mapred-site.xml- Hadoop 提供的是一个模板文件
mapred-site.xml.template,我们需要先复制一份并重命名:cp ~/hadoop/hadoop/etc/hadoop/mapred-site.xml.template ~/hadoop/hadoop/etc/hadoop/mapred-site.xml
- 然后编辑新文件:
vim ~/hadoop/hadoop/etc/hadoop/mapred-site.xml
- 在
<configuration>标签内添加以下内容,这指定了 MapReduce 运行在 YARN 上。<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
- Hadoop 提供的是一个模板文件
-
配置
yarn-site.xml- 打开文件:
vim ~/hadoop/hadoop/etc/hadoop/yarn-site.xml
- 在
<configuration>标签内添加以下内容。<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> </configuration>
- 打开文件:
步骤 6: 设置环境变量
为了让系统能够在任何位置识别 hadoop 命令,需要配置 PATH。
- 编辑
.bashrc文件:vim ~/.bashrc
- 在文件末尾添加以下两行:
export HADOOP_HOME=/home/hadoopuser/hadoop/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 使配置立即生效:
source ~/.bashrc
步骤 7: 格式化 HDFS 并启动集群
-
格式化 NameNode: 警告:此操作会清空 HDFS 上的所有数据,仅在首次安装时执行!
hdfs namenode -format
如果看到
... storage directory ... has been successfully formatted.的信息,说明格式化成功。 -
启动 Hadoop 集群:
start-dfs.sh start-yarn.sh
你会看到一系列启动日志,如果没有报错,说明启动成功。
-
验证集群状态:
-
检查 Java 进程:
jps
你应该能看到以下进程(顺序可能不同):
NameNodeDataNodeSecondaryNameNodeResourceManagerNodeManager如果缺少任何一个,说明启动失败,请检查日志。
-
访问 Web UI:
- HDFS UI: 在 Windows 浏览器中访问
http://localhost:9870 - YARN UI: 在 Windows 浏览器中访问
http://localhost:8088如果能看到 Web 界面,恭喜你,Hadoop 集群已成功运行!
- HDFS UI: 在 Windows 浏览器中访问
-
步骤 8: 运行一个示例程序
-
创建 HDFS 目录:
hdfs dfs -mkdir -p /user hdfs dfs -mkdir -p /user/hadoopuser
-
将 Hadoop 自带的示例文件上传到 HDFS:
hdfs dfs -put ~/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar /user/hadoopuser/
-
运行 WordCount 示例: 我们将 Hadoop 的
LICENSE文件作为输入。hdfs dfs -put ~/hadoop/hadoop/LICENSE.txt /user/hadoopuser/input hadoop jar /user/hadoopuser/hadoop-mapreduce-examples-*.jar wordcount /user/hadoopuser/input /user/hadoopuser/output
-
查看结果:
hdfs dfs -cat /user/hadoopuser/output/*
你会看到单词和它们出现的次数。
-
停止集群:
stop-yarn.sh stop-dfs.sh
第二部分:【传统】在 Windows 原生环境安装 Hadoop (不推荐)
如果你因为某些特殊原因必须在 Windows 原生环境安装,请务必降低预期,这更像是一个“玩具”环境。
步骤 1: 安装 Cygwin
Cygwin 提供了一个类 Linux 的命令行环境。
- 下载 Cygwin 安装程序:https://www.cygwin.com/
- 运行安装程序,选择
Install from Internet。 - 选择一个本地下载目录。
- 选择一个安装目录(
C:\cygwin64)。 - 选择一个本地网络镜像。
- 在
Select Packages步骤,搜索并安装以下包:openssl(用于 SSH)openssh(用于 SSH)wget(用于下载文件)curl(可选)vim(可选,用于编辑文件)net(包含ping等工具)
- 完成安装。
步骤 2: 配置 SSH
Hadoop 节点之间通过 SSH 通信,在 Windows 原生环境中,我们使用 Cygwin 提供的 OpenSSH。
- 启动 Cygwin Terminal。
- 生成 SSH 密钥:
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
- 将公钥添加到授权列表:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 测试 SSH 连接:
ssh localhost
如果不需要密码就能登录,说明配置成功,输入
exit退出。
步骤 3: 安装 Java 和 Hadoop
这部分与 WSL2 中的步骤类似,但路径需要特别注意。
- 安装 Java:下载 Windows 版本的 JDK (如 AdoptOpenJDK) 并安装,例如安装到
C:\Program Files\Java\jdk-8。 - 下载 Hadoop:下载 Windows 版本的 Hadoop (如
hadoop-3.3.6-winutils.zip)。 - 解压 Hadoop:将 Hadoop 解压到一个路径,
C:\hadoop。
步骤 4: 修改 Hadoop 配置文件
使用记事本或 VS Code 等编辑器修改 C:\hadoop\etc\hadoop\ 下的文件。核心区别在于路径和 Windows 工具。
-
hadoop-env.sh:export JAVA_HOME=C:\Program Files\Java\jdk-8(注意使用 Windows 路径格式)。
-
core-site.xml和hdfs-site.xml:- 路径必须使用 Windows 格式,并且需要将
\转义为\\。 - 在
hdfs-site.xml中:<property> <name>dfs.namenode.name.dir</name> <value>file:///C:/hadoop/hadoopdata/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///C:/hadoop/hadoopdata/datanode</value> </property> - 创建这些目录:在 Windows 资源管理器中创建
C:\hadoop\hadoopdata\namenode和C:\hadoop\hadoopdata\datanode。
- 路径必须使用 Windows 格式,并且需要将
-
【关键】替换
winutils.exe:- Hadoop 依赖一些 Linux 特有的工具,Windows 上没有,你需要从
hadoop-3.3.6-winutils.zip中解压bin目录下的winutils.exe和hadoop.dll到C:\hadoop\bin目录。 - 将
hadoop.dll复制到C:\Windows\System32。
- Hadoop 依赖一些 Linux 特有的工具,Windows 上没有,你需要从
-
配置
PATH:- 将
C:\hadoop\bin添加到系统的环境变量PATH中。
- 将
步骤 5: 格式化并启动
-
格式化 NameNode: 打开 Cygwin Terminal,进入 Hadoop 的
bin目录:cd /cygdrive/c/hadoop/bin ./hdfs namenode -format
-
启动集群:
./start-dfs.cmd ./start-yarn.cmd
-
验证:
- 在 Cygwin Terminal 中运行
jps。 - 在 Windows 浏览器中访问
http://localhost:9870和http://localhost:8088。
- 在 Cygwin Terminal 中运行
| 特性 | WSL2 (推荐) | Windows 原生 (不推荐) |
|---|---|---|
| 环境 | 真正的 Linux 内核,性能好 | Windows 模拟,性能差 |
| 路径 | 标准 Linux 路径 () | Windows 路径 (\),需转义 |
| Shell | 原生 Bash,支持 .sh 脚本 |
CMD/PowerShell,不支持 .sh |
| 依赖 | 标准的 Linux 依赖包 | 需要 winutils.exe 等补丁 |
| 稳定性 | 高,接近生产环境 | 低,问题多,仅用于测试 |
| 易用性 | 配置简单,体验一致 | 配置繁琐,处处是坑 |
请毫不犹豫地选择 WSL2 方案。 它能让你以最小的精力搭建一个稳定可用的 Hadoop 学习环境,为你后续的学习和开发打下坚实的基础。
