在 Windows 上安装和运行 Hadoop 和 Spark 在 Windows 上安装和运行 Hadoop 和 Spark 获取软件 设置环境变量 配置 Hadoop 补丁 Hadoop 启动 HDFS 测试 Hadoop 和 Spark

2025-06-08

在 Windows 上安装和运行 Hadoop 和 Spark

在 Windows 上安装和运行 Hadoop 和 Spark

获取软件

设置环境变量

配置 Hadoop

修补 Hadoop

启动 HDFS

测试 Hadoop 和 Spark

在 Windows 上安装和运行 Hadoop 和 Spark

我们最近在工作中获得了一台大型新服务器来运行 Hadoop 和 Spark(H/S),以便对我们为生物制药行业编写的一些软件进行概念验证测试,我在尝试在 Windows Server 2016/Windows 10 上启动和运行 H/S 时遇到了一些障碍。我在这里一步一步地记录了如何设法直接在 Windowscmd提示符下安装和运行这对 Apache 产品,而无需任何 Linux 仿真。

2019 年 12 月 16 日更新:软件版本号已更新,文本已澄清。

获取软件

第一步是下载 Java、Hadoop 和 Spark。Spark 似乎无法与较新版本的 Java 兼容,因此我暂时坚持使用 Java 8:

我无法保证本指南适用于较新版本的 Java。如果您遇到问题,请尝试使用 Java 8。此外,由于新的 Oracle 许可结构(2019 及以上),您可能需要创建一个 Oracle 帐户才能下载 Java 8。为避免这种情况,请直接通过 AdoptOpenJDK 下载

对于 Java,我下载了 AdoptOpenJDK HotSpot JVM 的“Windows x64”版本 ( jdk8u232-b09);对于 Hadoop,我下载了 v3.1.3 的二进制版本 ( hadoop-3.1.3.tar.gz);对于 Spark,我下载了 v3.0.0“针对 Apache Hadoop 2.7 及更高版本预构建”版本 ( spark-3.0.0-preview-bin-hadoop2.7.tgz)。从现在开始,我将统称这些版本为hadoop-<version>spark-<version>;在本教程的其余部分,请将这些版本替换为您的版本号。

尽管目前已有较新版本的 Hadoop 和 Spark 可用,但Windows 上的 Hadoop 3.2.1 存在一个错误,导致安装失败。在修补版本(3.3.0、3.1.4 或 3.2.2)可用之前,您必须在 Windows 上使用较早版本的 Hadoop。

接下来,下载 7-Zip来解压*gz压缩包。请注意,您可能需要解压两次(第一次将文件移动*gz到 到*.tar,第二次解压)。解压完成后(Hadoop 解压需要一段时间),您可以删除所有*.tar*gz文件。现在,您的 Downloads 目录中应该有两个目录和 JDK 安装程序:

请注意,如上所示,“Hadoop”目录和“Spark”目录分别包含LICENSENOTICEREADME三个文件。对于特定版本的 Hadoop,您可能会提取并得到类似这样的目录结构

C:\Users\<username>\Downloads\hadoop-<version>\hadoop-<version>\...
Enter fullscreen mode Exit fullscreen mode

如果是这种情况,请将内层 目录的内容通过复制粘贴移动hadoop-<version>到外层目录,然后删除内层目录。例如,该文件的路径应为:hadoop-<version> hadoop-<version>LICENSE

C:\Users\<username>\Downloads\hadoop-<version>\LICENSE
Enter fullscreen mode Exit fullscreen mode

...与“Spark”目录类似。

警告:如果您在 7-Zip 中看到类似“无法创建符号链接:客户端不具备所需权限”的消息,必须以管理员模式运行 7-Zip然后解压目录。如果您跳过这些文件,可能会导致 Hadoop 安装失败。

将 Spark 和 Hadoop 目录移动到该C:\目录中(您可能需要计算机的管理员权限才能执行此操作)。然后,运行 Java 安装程序,但将目标文件夹从默认文件夹更改为C:\Program Files\AdoptOpenJDK\jdk-<version>\C:\Java(H/S 可能无法处理名称中带有空格的目录。)

安装完成后,您可以删除 Java*.msi安装程序。创建两个名为C:\Hadoop和的新目录,并将和目录分别C:\Spark复制到这两个目录中:hadoop-<version>spark-<version>

如果您收到“名称太长”类型的警告,请跳过这些文件。这些只是*.html文件,对运行 H/S 并非至关重要。

设置环境变量

接下来,我们需要设置一些环境变量。前往Control Panel > System and Security > System > Advanced System Settings > Environment Variables...

...并添加新的系统变量(底部框),名为:

  • JAVA_HOME-->C:\Java
  • HADOOP_HOME-->C:\Hadoop\hadoop-<version>
  • SPARK_HOME-->C:\Spark\spark-<version>

(根据您下载的Hadoop和Spark版本进行调整。)

然后,编辑Path(再次在底部的系统变量框中)并添加\bin附加的变量(也\sbin适用于 Hadoop):

如果您现在echo %PATH%在,cmd您应该会在路径中间的某个位置看到这三个目录,因为用户路径已附加到%PATH变量的系统路径。现在您应该检查java -versionhdfs -versionspark-shell --version返回的版本号,如下所示。这意味着它们已正确安装并添加到您的%PATH%

请注意,如果您尝试从路径中包含任何空格的位置运行上述命令,则命令可能会失败。例如,如果您的用户名是“Firstname Lastname”,并且您尝试检查 Hadoop 版本,则可能会看到类似以下错误消息:

C:\Users\Firstname Lastname>hdfs -version
Error: Could not find or load main class Lastname
Enter fullscreen mode Exit fullscreen mode

要解决此问题,只需移动到路径中没有任何空格的工作目录(正如我在上面的屏幕截图中所做的那样):

C:\Users\Firstname Lastname>cd ..

C:\Users>hdfs -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.232-b09, mixed mode)
Enter fullscreen mode Exit fullscreen mode

配置 Hadoop

接下来,转到%HADOOP_HOME%\etc\hadoop并编辑(或创建)文件core-site.xml,使其如下所示:

核心站点.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>
Enter fullscreen mode Exit fullscreen mode

在同一目录中,编辑(或创建)mapred-site.xml以下内容:

mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
Enter fullscreen mode Exit fullscreen mode

接下来,编辑(或创建)hdfs-site.xml

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///C:/Hadoop/hadoop-<version>/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///C:/Hadoop/hadoop-<version>/datanode</value>
  </property>
</configuration>
Enter fullscreen mode Exit fullscreen mode

是的,它们应该是正斜杠,即使 Windows 使用反斜杠。这是由于 Hadoop 解释这些文件路径的方式所致。另外,请确保将其替换<version>为适当的 Hadoop 版本号。最后,将yarn-site.xml其编辑如下:

纱线-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>  
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
</configuration>
Enter fullscreen mode Exit fullscreen mode

我们需要做的最后一件事是创建我们引用的目录hdfs-site.xml

修补 Hadoop

现在,您需要应用由用户 cdarlint 创建并发布到 GitHub 的补丁。(请注意,此补丁特定于您正在安装的 Hadoop 版本,但如果没有确切的版本,请尝试使用所需版本之前的版本……有时这种方法有效。)

备份您的%HADOOP_HOME%\bin目录(将其复制到\bin.old或类似位置),然后将修补的文件(特定于您的 Hadoop 版本,从上面的 git repo 下载)复制到旧%HADOOP_HOME%\bin目录,用新文件替换旧文件。

现在,如果你运行hdfs namenode -formatcmd你应该会看到:

还有一件事要做:hadoop-yarn-server-timelineservice-<version>从复制C:\Hadoop\hadoop-<version>\share\hadoop\yarn\timelineserviceC:\Hadoop\hadoop-<version>\share\hadoop\yarn(父目录)。(这些是短版本号,例如,并且文件名和目录名3.1.3之间可能不匹配。)JAR

启动 HDFS

最后,您可以通过运行start-dfs.cmd启动HDFS start-yarn.cmdcmd

您应该使用以下命令验证namenode、、是否都在datanode运行resourcemanagernodemanagerjps

您还可以在浏览器中打开localhost:8088localhost:9870监控您全新的 Hadoop 分布式文件系统:

最后,通过运行来测试您是否可以编辑文件系统,这将在根目录中hadoop fs -mkdir /test创建一个名为的目录:test

测试 Hadoop 和 Spark

现在我们知道了如何在 HDFS 中创建目录 ( fs -mkdir) 并列出其内容 ( fs -ls),那么如何创建和编辑文件呢?可以使用 将文件从本地文件系统复制到 HDFS 。然后,我们可以使用fs -put读取文件spark-shellsc.textFile(...)

请注意,您从 HDFS 读取文件,hdfs://localhost:9000/而不仅仅是hdfs://。这是因为这是defaultFS我们在中定义的core-site.xml

如果要停止 HDFS,可以运行以下命令:

C:\Users> stop-dfs.cmd
Enter fullscreen mode Exit fullscreen mode


C:\Users> stop-yarn.cmd
Enter fullscreen mode Exit fullscreen mode

好了,现在你已经完成了!Spark 已经在 Windows 上运行,可以读取存储在 HDFS 中的文件了。这需要一些时间才能开始,非常感谢之前遇到过和我一样 bug 的人,以及之前写过教程并被我用作框架的人。以下是我用来构建本教程的博客、GitHub 代码库和 SO 文章:

鏂囩珷鏉ユ簮锛�https://dev.to/awwsmm/installing-and-running-hadoop-and-spark-on-windows-33kc
PREV
超级简单的 Markdown 常见格式标题超级秘密的 Markdown 技巧(他们*不想让你知道!)
NEXT
如何在 Java 中安全地存储密码