使用WSL2在Windows 11上安装Hadoop


在这篇文章中,我们将看到如何使用 WSL 在同一台 Windows 11 机器上安装完整的 Hadoop 环境。
 
安装依赖
您需要安装两个重要的依赖项才能使Hadoop正常工作。这些不是可选的,除非您已经安装了它们。因此,请确保安装这些依赖项。

  • 安装JDK

第一个依赖项是 java 开发工具包,或 JDK。建议使用 Java 8 或 Java 1.8 for Hadoop。这个建议来自我,因为我在使用较新版本的 Java 时遇到了问题。但是您绝对可以尝试更新版本。
此外,安装 Oracle JDK 或 Open JDK 或任何其他版本的 JDK 都没有关系。你只需要安装它。我使用以下命令在 Windows 11 上安装的 Debian Linux 上安装 JDK 8:
sudo apt install adoptopenjdk-8-hotspot
要在 apt 存储库中提供此包,您首先需要添加 PPA。为此,运行以下命令:
sudo add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
安装 JDK 后,请确保使用 env 变量名称 JAVA_HOME 导出 JDK 的路径。导出命令如下所示:
export JAVA_HOME=/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java
如果您只是在终端中运行此命令,则只会为当前会话导出该变量。要使其永久有效,您必须将此命令添加到.zshrc文件中。
 
  • 安装 OpenSSH

 下一个要安装的依赖项是 OpenSSH,以便 Hadoop 可以通过 SSH 连接到本地主机。这也是一个必要的依赖。如果没有 SSH 到本地主机,Hadoop 的大多数组件将无法工作。要安装 OpenSSH,请在终端中运行以下命令:
sudo apt install openssh-server openssh-client -y
一旦我们为 SSH 安装了服务器和客户端,我们就必须生成用于身份验证的密钥。为此,请运行以下命令并按照您将获得的说明进行操作:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
生成密钥后,您必须将它们复制到授权密钥列表中,这样您就不必每次通过 SSH 进入机器时都输入密码。这一点尤其重要,因为这是 Hadoop 所期望的。至少我还没有看到改变这种行为的选项。因此,运行以下命令将我们刚刚创建的密钥文件的文件内容cat,然后将其复制到authorized_keys文件:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
现在,确保公钥文件具有正确的权限。这是因为如果密钥文件的公共访问权限比所需的多,系统就会认为该密钥可以被复制、复制或篡改,这意味着该密钥是不安全的。这将使系统拒绝密钥并且不允许 SSH 登录。所以运行以下命令来设置正确的权限:
chmod 0600 ~/.ssh/id_rsa.pub
接下来,启动 SSH 服务,以便我们可以测试服务器是否工作正常。为此,请运行以下命令:
sudo service ssh start
最后,运行以下命令以确保 SSH 正常工作:
ssh localhost
 
安装 Hadoop
安装 Hadoop 的第一步是实际下载它。在撰写本文时,Hadoop 的最新版本是 3.3.1 版,您可以从这里下载。您将从那里下载.tar.gz文件。要解压缩该文件,请使用以下命令:
tar xzf hadoop-3.3.1.tar.gz
这将创建一个名为 hadoop-3.3.1 的目录,并将所有文件和目录放在该目录中。因为我们在本地机器上安装Hadoop,所以我们要做单节点部署,也称为伪分布式模式部署。
  • 设置环境变量

我们必须设置一堆环境变量。最好的部分是,您只需自定义一个变量。其他的只是复制粘贴。无论如何,以下是我正在谈论的变量:
export HADOOP_HOME=/mnt/d/bigdata/hadoop-3.3.1
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_OPTS"-Djava.library.path=$HADOOP_HOME/lib/nativ"

您只需更改第一个环境变量HADOOP_HOME 的值。将其设置为反映您放置 Hadoop 目录的路径。此外,将这些导出语句放在.zshrc文件中也是一个好主意,这样每次都会自动导出这些变量,而不必执行此操作。将其放入文件后,请确保将其作为源文件以使其立即生效:
source ~/.zshrc
 
  • 配置 Hadoop

接下来,我们必须编辑一些文件来更改各种 Hadoop 组件的配置。让我们从文件hadoop-env.sh 开始。运行以下命令在编辑器中打开文件:
sudo vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
接下来,找到导出$JAVA_HOME变量的行并取消注释。在这里,您必须提供与之前安装 Java 时所做的相同的路径。对我来说,这就是以下内容:
export JAVA_HOME=/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java
接下来,我们必须编辑core-site.xml文件。这里我们必须提供 Hadoop 的临时目录以及 Hadoop 文件系统的默认名称。使用以下命令在编辑器中打开文件:
sudo vim $HADOOP_HOME/etc/hadoop/core-site.xml
您会在此处找到一个空文件,其中包含一些注释和一个空配置块。您可以删除所有内容并将其替换为以下内容:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/mnt/d/hdfs/tmp/</value>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://127.0.0.1:9000</value>
    </property>
</configuration>

确保创建了在此处配置的临时目录。接下来,我们必须编辑 HDFS 配置文件hdfs-site.xml。为此,请使用以下命令在编辑器中打开文件:
sudo vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
在这个配置文件中,我们设置了 HDFS 数据节点目录、HDFS 名称节点目录和 HDFS 复制因子。在这里,您应该再次获得一个带有空配置块的文件。将其替换为以下内容:

<configuration>
  <property>
      <name>dfs.data.dir</name>
      <value>/mnt/d/hdfs/namenode</value>
  </property>
  <property>
      <name>dfs.data.dir</name>
      <value>/mnt/d/hdfs/datanode</value>
  </property>
  <property>
      <name>dfs.replication</name>
      <value>1</value>
  </property>
</configuration>

再次确保您创建了数据节点和名称节点目录。接下来,我们有 MapReduce 配置文件。要在编辑器中打开它,请运行以下命令:
sudo vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
您可以使用以下内容替换配置块:

<configuration> 
  <property> 
    <name>mapreduce.framework.name</name> 
    <value>yarn</value> 
  </property> 
</configuration>

这是一个简单的配置,它指定了 MapReduce 框架名称。最后,我们有 YARN 配置文件yarn-site.xml。使用以下命令在编辑器中打开文件:
sudo vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
将以下配置添加到文件中:

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>127.0.0.1</value>
  </property>
  <property>
    <name>yarn.acl.enable</name>
    <value>0</value>
  </property>
  <property>
    <name>yarn.nodemanager.env-whitelist</name>   
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PERPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  </property>
</configuration>


这个配置没有什么可以改变的。最后,我们完成了 Hadoop 的配置。我们现在可以继续格式化名称节点并启动 Hadoop。

  • 格式化 HDFS 名称节点

在第一次启动 Hadoop 服务之前首先格式化 HDFS 名称节点很重要。显然,这可以确保名称节点中的任何地方都没有垃圾。一旦您开始更频繁地使用 HDFS,您就会意识到您正在更频繁地格式化名称节点,至少在您的开发机器上是这样。无论如何,要格式化名称节点,请使用以下命令:
hdfs namenode -format
收到名称节点的关闭通知后,格式化就完成了。
  • 启动所有 Hadoop

最后,我们正处于本活动的最佳部分,即启动和使用 Hadoop。现在,根据您实际想要使用的组件,有多种启动 Hadoop 的方法。例如,您可以只启动 YARN,或同时启动 HDFS 等。对于本活动,我们将启动所有内容。为此,Hadoop 发行版提供了一个方便的脚本。而且因为您之前已经导出了一堆环境变量,您甚至不必搜索该脚本,它已经在您的路径中。只需运行以下命令并等待它完成:
start-all.sh
这将需要几秒钟的时间,因为脚本只等待前 10 秒钟而不做任何事情,以便在您错误启动操作时为您提供取消操作的选项。
为了确保,如果您愿意,您可以运行jps命令以获取所有正在运行的进程的列表。您应该至少看到以下服务:
977 ResourceManager
353 NameNode
438 DataNode
615 SecondaryNameNode
1499 Jps

您现在正在使用 WSL 1 或 2 上的 Linux 发行版在 Windows 11 PC 上运行 Hadoop。为了确保,您可以使用以下简单的 HDFS 命令:
hdfs dfs -ls /
此命令将列出根 HDFS 目录中的所有文件和目录。