如何在 Ubuntu 20.04 上以独立模式安装 Hadoop

介绍

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

Hadoop 由四个主要层组成:

  • Hadoop Common 是支持其他 Hadoop 模块的实用程序和库的集合。
  • HDFS ,即Hadoop 分布式文件系统,负责将数据存储到磁盘上。
  • YARN ,简称 Yet Another Resource Negotiator,是 HDFS 的操作系统
  • MapReduce 是 Hadoop 集群的原始处理模型。

Hadoop 集群是相对复杂的设置,所以该项目包括一个独立的模式,适合学习有关 Hadoop,执行简单操作和调试。

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

前提条件

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

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

您可能还想看看 大数据概念和术语的介绍Hadoop的介绍

一旦你完成了前提条件,登录作为你的sudo用户开始。

第1步:安装Java

要开始,您将更新我们的包列表,并安装OpenJDK,在Ubuntu 20.04上的默认Java开发套件:

1sudo apt update
2sudo apt install default-jdk

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

1java -version
1[secondary_label Output]
2openjdk version "11.0.13" 2021-10-19
3OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.20.04)
4OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

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

第2步:安装Hadoop

有了 Java,您将访问 Apache Hadoop 发布页面以找到最新的稳定版本。

在本指南中,您将安装 Hadoop 3.3.1,但您可以用您选择的版本代替本指南中的版本号。

Screenshot of the Hadoop releases page highlighting the link to the latest stable binary

在下一页上,右键单击并复制释放二进制的链接。

Screenshot of the Hadoop mirror page

在服务器上,您将使用wget来检索它:

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

<$>[注] 注: Apache网站将动态引导您到最佳镜子,因此您的URL可能不匹配上面的URL。

为了确保您下载的文件没有被更改,您将使用 SHA-512 或 Secure Hash Algorithm 512 进行快速检查。 返回 发布页面,然后右键单击并复制您下载的版本二进制的检查总和文件的链接:

Screenshot highlighting the .sha512 file

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

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

然后运行验证:

1shasum -a 512 hadoop-3.3.1.tar.gz
1[secondary_label Output]
22fd0bf74852c797dc864f373ec82ffaa1e98706b309b30d1effa91ac399b477e1accc1ee74d4ccbb1db7da1c5c541b72e4a834f131a99f2814b030fbd043df66 hadoop-3.3.1.tar.gz

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

1cat hadoop-3.3.1.tar.gz.sha512
1[label ~/hadoop-3.3.1.tar.gz.sha512]
2...
3SHA512 (hadoop-3.3.1.tar.gz) = 2fd0bf74852c797dc864f373ec82ffaa1e98706b309b30d1effa91ac399b477e1accc1ee74d4ccbb1db7da1c5c541b72e4a834f131a99f2814b030fbd043df66
4...

针对您从镜子中下载的文件执行的命令的输出应匹配您从 apache.org 下载的文件中的值。

现在你已经验证了该文件没有被破坏或更改,你可以提取它:

1tar -xzvf hadoop-3.3.1.tar.gz

使用tar命令与-x标志提取,-z解压缩,-v用于语音输出,和-f来指定您正在从文件中提取。

最后,您将将提取的文件移动到/usr/local,适用于本地安装的软件:

1sudo mv hadoop-3.3.1 /usr/local/hadoop

有了软件,您已经准备好配置其环境。

步骤 3 — 配置 Hadoop 的 Java 主页

Hadoop 要求您将路径设置为 Java,无论是作为环境变量还是在 Hadoop 配置文件中。

通往Java的路径,‘/usr/bin/java’是对‘/etc/alternatives/java’的同义链接,这反过来又是对默认的Java二进制的同义链接。你会用‘readlink’与‘-f’旗帜来追随路径的各个部分的每一个同义链接,反复。然后,你会用‘sed’从输出中切割‘bin/java’来给我们‘JAVA_HOME’的正确值。

寻找默认的Java路径

1readlink -f /usr/bin/java | sed "s:bin/java::"
1[secondary_label Output]
2/usr/lib/jvm/java-11-openjdk-amd64/

您可以复制此输出以将Hadoop的Java主页设置为此特定版本,这确保如果默认Java变更,此值将不会发生。

首先,打开hadoop-env.sh:

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

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

选项1:设置静态值

1[label /usr/local/hadoop/etc/hadoop/hadoop-env.sh]
2 . . .
3#export JAVA_HOME=
4export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
5 . . .
1[label /usr/local/hadoop/etc/hadoop/hadoop-env.sh]
2 . . .
3#export JAVA_HOME=
4export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
5 . . .

如果你发现这些行有问题,请使用CTRL+W快速搜索文本.一旦完成,请使用CTRL+X退出并保存文件。

<$>[注] 注: 对于 Hadoop,在 hadoop-env.sh 中的 JAVA_HOME' 值取代了在环境中由 `/etc/profile’ 或在用户配置文件中设置的任何值。

第4步:运行Hadoop

现在你应该能够运行Hadoop:

1/usr/local/hadoop/bin/hadoop
 1[secondary_label Output]
 2Usage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
 3 or hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
 4  where CLASSNAME is a user-provided Java class
 5
 6  OPTIONS is none or any of:
 7
 8--config dir Hadoop config directory
 9--debug turn on shell script debug mode
10--help usage information
11buildpaths attempt to add class files from build tree
12hostnames list[,of,host,names]   hosts to use in slave mode
13hosts filename list of hosts to use in slave mode
14loglevel level set the log4j level for this command
15workers turn on worker mode
16
17  SUBCOMMAND is one of:
18. . .

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

要做到这一点,在我们的主目录中创建一个名为输入的目录,并将Hadoop的配置文件复制到其中,以便将这些文件作为我们的数据。

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

接下来,您可以使用以下命令运行 MapReduce `hadoop-mapreduce-examples' 程序,它是一个具有多个选项的 Java 档案:

1/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 程序会计算一个字母字或常规表达式的匹配。最后,常规表达式允许(.]*用于在声明句中或句子结束时找到允许字的发生。

当任务完成时,它提供了所处理的内容和遇到的错误的摘要,但不包含实际结果。

 1[secondary_label Output]
 2 . . .
 3   File System Counters
 4        FILE: Number of bytes read=1200956
 5        FILE: Number of bytes written=3656025
 6        FILE: Number of read operations=0
 7        FILE: Number of large read operations=0
 8        FILE: Number of write operations=0
 9    Map-Reduce Framework
10        Map input records=2
11        Map output records=2
12        Map output bytes=33
13        Map output materialized bytes=43
14        Input split bytes=114
15        Combine input records=0
16        Combine output records=0
17        Reduce input groups=2
18        Reduce shuffle bytes=43
19        Reduce input records=2
20        Reduce output records=2
21        Spilled Records=4
22        Shuffled Maps =1
23        Failed Shuffles=0
24        Merged Map outputs=1
25        GC time elapsed (ms)=41
26        Total committed heap usage (bytes)=403800064
27    Shuffle Errors
28        BAD_ID=0
29        CONNECTION=0
30        IO_ERROR=0
31        WRONG_LENGTH=0
32        WRONG_MAP=0
33        WRONG_REDUCE=0
34    File Input Format Counters
35        Bytes Read=147
36    File Output Format Counters
37        Bytes Written=34

<$>[note] 注: 如果输出目录已经存在,程序将失败,而不是查看总结,输出将看起来像:

1[secondary_label Output]
2 . . .
3     at java.base/java.lang.reflect.Method.invoke(Method.java:564)
4    at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
5    at org.apache.hadoop.util.RunJar.main(RunJar.java:158)

美元

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

1cat ~/grep_example/*
1[secondary_label Output]
222 allowed.
31 allowed

MapReduce 任务发现了 19 个允许一词的发生,然后是一个时间段和一个没有发生的发生,运行示例程序验证了我们的独立安装正常工作,并且系统上的非特权用户可以运行 Hadoop 进行探索或调试。

结论

在本教程中,您已在独立模式下安装了 Hadoop,并通过运行其提供的示例程序来验证它。 要了解如何编写自己的 MapReduce 程序,您可能需要访问 Apache Hadoop 的 MapReduce 教程,该教程通过示例背后的代码。

如果您对部署一个完整的集群而不是单独的集群感兴趣,请参阅 如何使用 DigitalOcean 滴滴旋转 Hadoop 集群

Published At
Categories with 技术
comments powered by Disqus