贝博恩创新科技网

Windows上Hadoop安装为何总出错?

重要声明:强烈推荐使用 WSL2

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

Windows上Hadoop安装为何总出错?-图1
(图片来源网络,侵删)

在 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)的最佳方式。

本教程将分为两部分:

  1. 【推荐】使用 WSL2 安装 Hadoop
  2. 【传统】在 Windows 原生环境安装 Hadoop (不推荐,仅作了解)

第一部分:【推荐】使用 WSL2 安装 Hadoop (Ubuntu)

这是最稳定、最接近生产环境体验的安装方式。

Windows上Hadoop安装为何总出错?-图2
(图片来源网络,侵删)

步骤 1: 安装 WSL2

  1. 以管理员身份打开 PowerShell,在开始菜单中搜索 PowerShell,右键点击“Windows PowerShell”,选择“以管理员身份运行”。
  2. 执行安装命令,在 PowerShell 窗口中输入以下命令并回车:
    wsl --install

    这个命令会自动完成以下操作:

    • 启用所需的 Windows 功能(WSL 和虚拟机平台)。
    • 下载最新的 Linux 内核。
    • 安装 Ubuntu 发行版。
    • 将 Ubuntu 设置为默认的 WSL 发行版。
  3. 重启电脑,安装完成后,系统会提示你重启电脑,请保存所有工作并重启。
  4. 初始化 Ubuntu,重启后,Ubuntu 会自动启动,首次启动时,它会提示你创建一个新的用户名和密码。请记住这个用户名和密码,这是你在 WSL2 中的登录凭证,与 Windows 系统密码无关。

步骤 2: 在 WSL2 中安装 Java

Hadoop 依赖 Java 环境,我们将安装 OpenJDK 8,这是 Hadoop 最兼容的版本。

  1. 更新软件包列表
    sudo apt update
  2. 安装 OpenJDK 8
    sudo apt install openjdk-8-jdk -y
  3. 验证 Java 安装
    java -version

    你应该能看到类似下面的输出,表明 Java 安装成功:

    openjdk version "1.8.0_..."
    OpenJDK Runtime Environment (build ...)
    OpenJDK 64-Bit Server VM (build ...)

步骤 3: 创建 Hadoop 用户(可选但推荐)

为了更好的权限管理,可以创建一个专门用于 Hadoop 的用户。

Windows上Hadoop安装为何总出错?-图3
(图片来源网络,侵删)
  1. 创建新用户hadoopuser):
    sudo adduser hadoopuser
  2. 赋予 sudo 权限
    sudo usermod -aG sudo hadoopuser
  3. 切换到新用户
    su - hadoopuser

    之后的所有操作都在 hadoopuser 下进行。

步骤 4: 下载并解压 Hadoop

  1. 创建一个目录用于存放 Hadoop/home/hadoopuser/hadoop
    mkdir -p ~/hadoop
  2. 下载 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
  3. 解压 Hadoop
    tar -xzvf hadoop-3.3.6.tar.gz -C ~/hadoop
  4. 创建软链接,方便后续操作:
    ln -s ~/hadoop/hadoop-3.3.6 ~/hadoop/hadoop

步骤 5: 配置 Hadoop

这是最关键的一步,我们需要修改几个核心配置文件,所有文件都位于 ~/hadoop/hadoop/etc/hadoop/ 目录下。

  1. 配置 hadoop-env.sh

    • vimnano 编辑器打开文件:
      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
  2. 配置 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>
  3. 配置 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
  4. 配置 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>
  5. 配置 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

  1. 编辑 .bashrc 文件:
    vim ~/.bashrc
  2. 在文件末尾添加以下两行:
    export HADOOP_HOME=/home/hadoopuser/hadoop/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  3. 使配置立即生效:
    source ~/.bashrc

步骤 7: 格式化 HDFS 并启动集群

  1. 格式化 NameNode警告:此操作会清空 HDFS 上的所有数据,仅在首次安装时执行!

    hdfs namenode -format

    如果看到 ... storage directory ... has been successfully formatted. 的信息,说明格式化成功。

  2. 启动 Hadoop 集群

    start-dfs.sh
    start-yarn.sh

    你会看到一系列启动日志,如果没有报错,说明启动成功。

  3. 验证集群状态

    • 检查 Java 进程

      jps

      你应该能看到以下进程(顺序可能不同):

      • NameNode
      • DataNode
      • SecondaryNameNode
      • ResourceManager
      • NodeManager 如果缺少任何一个,说明启动失败,请检查日志。
    • 访问 Web UI

      • HDFS UI: 在 Windows 浏览器中访问 http://localhost:9870
      • YARN UI: 在 Windows 浏览器中访问 http://localhost:8088 如果能看到 Web 界面,恭喜你,Hadoop 集群已成功运行!

步骤 8: 运行一个示例程序

  1. 创建 HDFS 目录

    hdfs dfs -mkdir -p /user
    hdfs dfs -mkdir -p /user/hadoopuser
  2. 将 Hadoop 自带的示例文件上传到 HDFS

    hdfs dfs -put ~/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar /user/hadoopuser/
  3. 运行 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
  4. 查看结果

    hdfs dfs -cat /user/hadoopuser/output/*

    你会看到单词和它们出现的次数。

  5. 停止集群

    stop-yarn.sh
    stop-dfs.sh

第二部分:【传统】在 Windows 原生环境安装 Hadoop (不推荐)

如果你因为某些特殊原因必须在 Windows 原生环境安装,请务必降低预期,这更像是一个“玩具”环境。

步骤 1: 安装 Cygwin

Cygwin 提供了一个类 Linux 的命令行环境。

  1. 下载 Cygwin 安装程序:https://www.cygwin.com/
  2. 运行安装程序,选择 Install from Internet
  3. 选择一个本地下载目录。
  4. 选择一个安装目录(C:\cygwin64)。
  5. 选择一个本地网络镜像。
  6. Select Packages 步骤,搜索并安装以下包:
    • openssl (用于 SSH)
    • openssh (用于 SSH)
    • wget (用于下载文件)
    • curl (可选)
    • vim (可选,用于编辑文件)
    • net (包含 ping 等工具)
  7. 完成安装。

步骤 2: 配置 SSH

Hadoop 节点之间通过 SSH 通信,在 Windows 原生环境中,我们使用 Cygwin 提供的 OpenSSH。

  1. 启动 Cygwin Terminal
  2. 生成 SSH 密钥
    ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
  3. 将公钥添加到授权列表
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  4. 测试 SSH 连接
    ssh localhost

    如果不需要密码就能登录,说明配置成功,输入 exit 退出。

步骤 3: 安装 Java 和 Hadoop

这部分与 WSL2 中的步骤类似,但路径需要特别注意。

  1. 安装 Java:下载 Windows 版本的 JDK (如 AdoptOpenJDK) 并安装,例如安装到 C:\Program Files\Java\jdk-8
  2. 下载 Hadoop:下载 Windows 版本的 Hadoop (如 hadoop-3.3.6-winutils.zip)。
  3. 解压 Hadoop:将 Hadoop 解压到一个路径,C:\hadoop

步骤 4: 修改 Hadoop 配置文件

使用记事本或 VS Code 等编辑器修改 C:\hadoop\etc\hadoop\ 下的文件。核心区别在于路径和 Windows 工具

  1. hadoop-env.sh:

    • export JAVA_HOME=C:\Program Files\Java\jdk-8 (注意使用 Windows 路径格式)。
  2. core-site.xmlhdfs-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\namenodeC:\hadoop\hadoopdata\datanode
  3. 【关键】替换 winutils.exe:

    • Hadoop 依赖一些 Linux 特有的工具,Windows 上没有,你需要从 hadoop-3.3.6-winutils.zip 中解压 bin 目录下的 winutils.exehadoop.dllC:\hadoop\bin 目录。
    • hadoop.dll 复制到 C:\Windows\System32
  4. 配置 PATH:

    • C:\hadoop\bin 添加到系统的环境变量 PATH 中。

步骤 5: 格式化并启动

  1. 格式化 NameNode: 打开 Cygwin Terminal,进入 Hadoop 的 bin 目录:

    cd /cygdrive/c/hadoop/bin
    ./hdfs namenode -format
  2. 启动集群

    ./start-dfs.cmd
    ./start-yarn.cmd
  3. 验证

    • 在 Cygwin Terminal 中运行 jps
    • 在 Windows 浏览器中访问 http://localhost:9870http://localhost:8088
特性 WSL2 (推荐) Windows 原生 (不推荐)
环境 真正的 Linux 内核,性能好 Windows 模拟,性能差
路径 标准 Linux 路径 () Windows 路径 (\),需转义
Shell 原生 Bash,支持 .sh 脚本 CMD/PowerShell,不支持 .sh
依赖 标准的 Linux 依赖包 需要 winutils.exe 等补丁
稳定性 高,接近生产环境 低,问题多,仅用于测试
易用性 配置简单,体验一致 配置繁琐,处处是坑

请毫不犹豫地选择 WSL2 方案。 它能让你以最小的精力搭建一个稳定可用的 Hadoop 学习环境,为你后续的学习和开发打下坚实的基础。

分享:
扫描分享到社交APP
上一篇
下一篇