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

在本教程中,您将学习如何在Ubuntu 18.04服务器上以独立模式安装Hadoop。您还将运行一个示例MapReduce程序来搜索文本文件中正则表达式的出现。

介绍

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

Hadoop由四个主要层组成:

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

Hadoop集群的设置相对复杂,因此该项目包含一个独立模式,适用于学习Hadoop,执行简单操作和调试。

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

先决条件

要学习本教程,您需要:

完成此先决条件后,您就可以安装Hadoop及其依赖项了。

在开始之前,您可能还想看看“ 大数据概念和术语 简介”“Hadoop简介”

第1步 - 安装Java

首先,我们将更新我们的包列表:

sudo apt update

接下来,我们将在Ubuntu 18.04上安装OpenJDK,这是默认的Java Development Kit:

sudo apt install default-jdk

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

java -version
openjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

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

第2步 - 安装Hadoop

有了Java,我们将访问Apache Hadoop Releases页面以查找最新的稳定版本。

导航到您要安装的发行版的二进制文件 在本指南中,我们将安装Hadoop 3.0.3。

Hadoop发布页面的屏幕截图,突出显示最新稳定二进制文件的链接

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

Hadoop镜像页面的屏幕截图

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

wget http://www-us.apache.org/dist/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz

注意: Apache网站将动态引导您访问最佳镜像,因此您的URL可能与上面的URL不匹配。

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

突出显示.mds文件的屏幕截图

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

wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz.mds

然后运行验证:

shasum -a 256 hadoop-3.0.3.tar.gz
db96e2c0d0d5352d8984892dfac4e27c0e682d98a497b7e04ee97c3e2019277a  hadoop-3.0.3.tar.gz

将此值与.mds文件中的SHA-256值进行.mds

cat hadoop-3.0.3.tar.gz.mds
〜/ Hadoop的3.0.3.tar.gz.mds
...
/build/source/target/artifacts/hadoop-3.0.3.tar.gz:
SHA256 = DB96E2C0 D0D5352D 8984892D FAC4E27C 0E682D98 A497B7E0 4EE97C3E 2019277A
...

您可以放心地忽略大小写和空格的区别。 我们针对从镜像下载的文件运行的命令输出应该与我们从apache.org下载的文件中的值相匹配。

现在我们已经验证文件没有被破坏或更改,我们将使用带有-x标志的tar命令来解压缩, -z用于解压缩, -v用于详细输出, -f用于指定我们'从文件中重新提取。 使用tab-completion或在下面的命令中替换正确的版本号:

tar -xzvf hadoop-3.0.3.tar.gz

最后,我们将提取的文件移动到/usr/local ,这是本地安装软件的适当位置。 如果需要,请更改版本号以匹配您下载的版本。

sudo mv hadoop-3.0.3 /usr/local/hadoop

有了这个软件,我们就可以配置它的环境了。

第3步 - 配置Hadoop的Java Home

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::"
/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=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
 . . . 
/usr/local/hadoop/etc/hadoop/hadoop-env.sh
 . . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
 . . . 

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

第4步 - 运行Hadoop

现在我们应该能够运行Hadoop:

/usr/local/hadoop/bin/hadoop
Usage: 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程序来确保它正常运行。 为此,在我们的主目录中创建一个名为input目录,并将Hadoop的配置文件复制到其中,以将这些文件用作我们的数据。

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

接下来,我们可以使用以下命令来运行MapReduce hadoop-mapreduce-examples程序,这是一个包含多个选项的Java归档文件。 我们将调用它的grep程序,这是hadoop-mapreduce-examples包含的众多示例之一,后面是输入目录, input和输出目录grep_example MapReduce grep程序将计算文字或正则表达式的匹配。 最后,我们将提供正则表达式allowed[.]*来查找声明性句子内或结尾处allowed的单词的出现。 表达式区分大小写,因此如果在句子开头大写,我们就找不到该单词:

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

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

 . . .
        File System Counters
        FILE: Number of bytes read=1330690
        FILE: Number of bytes written=3128841
        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=115
        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)=3
        Total committed heap usage (bytes)=478150656
    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

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

 . . .
    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/*
19  allowed.
1   allowed

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

结论

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


分享按钮