如何在Ubuntu20.04上以单机模式安装Hadoop

来自菜鸟教程
跳转至:导航、​搜索

介绍

Hadoop 是一个基于 Java 的编程框架,支持在廉价机器集群上处理和存储超大型数据集。 它是大数据领域的第一个主要开源项目,由 Apache 软件基金会赞助。

Hadoop由四个主要层组成:

  • Hadoop Common 是支持其他 Hadoop 模块的实用程序和库的集合。
  • HDFS,代表 Hadoop 分布式文件系统,负责将数据持久化到磁盘。
  • YARN 是 Yet Another Resource Negotiator 的缩写,是 HDFS 的“操作系统”。
  • MapReduce是Hadoop集群的原始处理模型。 它在集群或地图中分配工作,然后将来自节点的结果组织并减少为对查询的响应。 许多其他处理模型可用于 Hadoop 3.x 版本。

Hadoop集群搭建起来比较复杂,所以项目包含一个单机模式,适合学习Hadoop、进行简单操作和调试。

在本教程中,您将以独立模式安装 Hadoop 并运行其中包含的示例 MapReduce 程序之一来验证安装。

先决条件

要遵循本教程,您将需要:

  • 具有 sudo 权限的非 root 用户的 Ubuntu 20.04 服务器:您可以在我们的 使用 Ubuntu 20.04 的初始服务器设置指南中了解有关如何设置具有这些权限的用户的更多信息。

您可能还想看看 An Introduction to Big Data Concepts and TerminologyAn Introduction to Hadoop

完成先决条件后,以 sudo 用户身份登录即可开始。

第 1 步 — 安装 Java

首先,您将更新我们的软件包列表并安装 OpenJDK,这是 Ubuntu 20.04 上的默认 Java 开发工具包:

sudo apt update
sudo apt install default-jdk

安装完成后,让我们检查一下版本。

java -version
Outputopenjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

此输出验证 OpenJDK 是否已成功安装。

第 2 步 — 安装 Hadoop

使用 Java 后,您将访问 Apache Hadoop 版本页面 以查找最新的稳定版本。

导航到您要安装的版本的 binary。 在本指南中,您将安装 Hadoop 3.3.1,但您可以将本指南中的版本号替换为您选择的版本号。

在下一页上,右键单击并将链接复制到发布二进制文件。

在服务器上,您将使用 wget 来获取它:

wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz

注意: Apache 网站会动态引导你到最好的镜像,所以你的 URL 可能与上面的 URL 不匹配。


为了确保您下载的文件未被更改,您将使用 SHA-512 或安全哈希算法 512 进行快速检查。 返回 发布页面 ,然后右键单击并将链接复制到您下载的发布二进制文件的校验和文件:

同样,您将在我们的服务器上使用 wget 来下载文件:

wget https://downloads.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz.sha512

然后运行验证:

shasum -a 512 hadoop-3.3.1.tar.gz
Output2fd0bf74852c797dc864f373ec82ffaa1e98706b309b30d1effa91ac399b477e1accc1ee74d4ccbb1db7da1c5c541b72e4a834f131a99f2814b030fbd043df66  hadoop-3.3.1.tar.gz

将此值与 .sha512 文件中的 SHA-512 值进行比较:

cat hadoop-3.3.1.tar.gz.sha512

~/hadoop-3.3.1.tar.gz.sha512

...
SHA512 (hadoop-3.3.1.tar.gz) = 2fd0bf74852c797dc864f373ec82ffaa1e98706b309b30d1effa91ac399b477e1accc1ee74d4ccbb1db7da1c5c541b72e4a834f131a99f2814b030fbd043df66
...

针对从镜像下载的文件运行的命令的输出应该与从 apache.org 下载的文件中的值匹配。

现在您已经验证文件没有损坏或更改,您可以提取它:

tar -xzvf hadoop-3.3.1.tar.gz

使用带有 -x 标志的 tar 命令进行提取,使用 -z 进行解压缩,使用 -v 进行详细输出,使用 -f 指定您正在从文件中提取。

最后,您将提取的文件移动到 /usr/local,这是本地安装软件的适当位置:

sudo mv hadoop-3.3.1 /usr/local/hadoop

安装好软件后,您就可以配置其环境了。

第 3 步 — 配置 Hadoop 的 Java 主页

Hadoop 要求您将 Java 的路径设置为环境变量或在 Hadoop 配置文件中。

Java 的路径 /usr/bin/java/etc/alternatives/java 又是默认 Java 二进制文件的符号链接。 您将使用带有 -f 标志的 readlink 递归地跟踪路径每个部分中的每个符号链接。 然后,您将使用 sed 从输出中修剪 bin/java,从而为我们提供 JAVA_HOME 的正确值。

查找默认 Java 路径

readlink -f /usr/bin/java | sed "s:bin/java::"
Output/usr/lib/jvm/java-11-openjdk-amd64/

您可以复制此输出以将 Hadoop 的 Java 主页设置为此特定版本,这可确保如果默认 Java 更改,此值不会更改。 或者,您可以在文件中动态使用 readlink 命令,这样 Hadoop 将自动使用设置为系统默认值的任何 Java 版本。

首先,打开 hadoop-env.sh

sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

然后,通过选择以下选项之一来修改文件:

选项 1:设置静态值

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

 . . .
#export JAVA_HOME=
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
 . . .

选项 2:使用 Readlink 动态设置值

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

 . . .
#export JAVA_HOME=
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
 . . .

如果找不到这些行,请使用 CTRL+W 快速搜索文本。 完成后,使用 CTRL+X 退出并保存文件。

注意: 对于 Hadoop,hadoop-env.sh 中的 JAVA_HOME 的值会覆盖环境中由 /etc/profile 或用户配置文件中设置的任何值.


第 4 步 — 运行 Hadoop

现在您应该能够运行 Hadoop:

/usr/local/hadoop/bin/hadoop
OutputUsage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
 or    hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
  where CLASSNAME is a user-provided Java class

  OPTIONS is none or any of:

--config dir                     Hadoop config directory
--debug                          turn on shell script debug mode
--help                           usage information
buildpaths                       attempt to add class files from build tree
hostnames list[,of,host,names]   hosts to use in slave mode
hosts filename                   list of hosts to use in slave mode
loglevel level                   set the log4j level for this command
workers                          turn on worker mode

  SUBCOMMAND is one of:
. . .

此输出意味着您已成功将 Hadoop 配置为在独立模式下运行。

您将通过运行随附的示例 MapReduce 程序来确保 Hadoop 正常运行。 为此,在我们的主目录中创建一个名为 input 的目录,并将 Hadoop 的配置文件复制到其中以将这些文件用作我们的数据。

mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input

接下来,您可以使用以下命令运行 MapReduce hadoop-mapreduce-examples 程序,这是一个带有多个选项的 Java 存档:

/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar grep ~/input ~/grep_example 'allowed[.]*'

这将调用 grep 程序,这是 hadoop-mapreduce-examples 中包含的众多示例之一,然后是输入目录 input 和输出目录 grep_example。 MapReduce grep 程序将计算文字词或正则表达式的匹配。 最后,给出正则表达式 allowed[.]* 以在陈述句内或结尾处查找单词 allowed 的出现。 该表达式区分大小写,因此如果该词在句首大写,您将找不到该词。

任务完成后,它会提供已处理内容和遇到的错误的摘要,但这不包含实际结果。

Output . . .
   File System Counters
        FILE: Number of bytes read=1200956
        FILE: Number of bytes written=3656025
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
    Map-Reduce Framework
        Map input records=2
        Map output records=2
        Map output bytes=33
        Map output materialized bytes=43
        Input split bytes=114
        Combine input records=0
        Combine output records=0
        Reduce input groups=2
        Reduce shuffle bytes=43
        Reduce input records=2
        Reduce output records=2
        Spilled Records=4
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=41
        Total committed heap usage (bytes)=403800064
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=147
    File Output Format Counters
        Bytes Written=34

注意:如果输出目录已经存在,程序将失败,而不是看到摘要,输出将类似于:

Output . . .
     at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:158)

结果存储在输出目录中,可以通过在输出目录上运行 cat 来检查:

cat ~/grep_example/*
Output22    allowed.
1    allowed

MapReduce 任务发现单词 allowed 出现了 19 次,后面跟着一个句点,还有一次没有出现。 运行示例程序已验证我们的独立安装工作正常,并且系统上的非特权用户可以运行 Hadoop 进行探索或调试。

结论

在本教程中,您以独立模式安装了 Hadoop,并通过运行它提供的示例程序对其进行了验证。 要了解如何编写您自己的 MapReduce 程序,您可能需要访问 Apache Hadoop 的 MapReduce 教程,该教程介绍了示例背后的代码。 当您准备好设置集群时,请参阅 Apache Foundation Hadoop Cluster Setup 指南。

如果您有兴趣部署一个完整的集群而不仅仅是一个独立的集群,请参阅 如何使用 DigitalOcean Droplets 启动 Hadoop 集群。