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

介绍

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

Hadoop 2.7 由四个主要层组成:

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

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

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

前提条件

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

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

一旦您完成了此前提条件,您就可以安装 Hadoop 及其依赖。

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

第1步:安装Java

为了开始,我们将更新我们的包列表:

1sudo apt-get update

接下来,我们将安装OpenJDK,在Ubuntu 16.04上默认的Java开发套件。

1sudo apt-get install default-jdk

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

1java -version
1[secondary_label Output]
2openjdk version "1.8.0_91"
3OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
4OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)

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

第2步:安装Hadoop

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

Screenshot of the Hadoop Releases page highlighting the link the mirrors page

在下一页上,右键单击并复制最新稳定版本的二进制链接。

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

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

1wget http://apache.mirrors.tds.net/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz

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

为了确保我们下载的文件没有被更改,我们将使用SHA-256进行快速检查。返回 发布页面,然后按照Apache链接:

Screenshot highlighting the .mds file

Enter the directory for the version you downloaded: Screenshot highlighting the .mds file

最后,找到您下载的版本的.mds 文件,然后复制相应文件的链接:

Screenshot highlighting the .mds file

再次,我们将右键单击复制文件位置,然后使用wget来传输文件:

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

然后运行验证:

1shasum -a 256 hadoop-2.7.3.tar.gz
1[secondary_label Output]
2d489df3808244b906eb38f4d081ba49e50c4603db03efd5e594a1e98b09259c2 hadoop-2.7.3.tar.gz

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

1cat hadoop-2.7.3.tar.gz.mds
1[label ~/hadoop-2.7.3.tar.gz.mds]
2...
3hadoop-2.7.3.tar.gz: SHA256 = D489DF38 08244B90 6EB38F4D 081BA49E 50C4603D B03EFD5E 594A1E98 B09259C2
4...

您可以安全地忽略案例和空格的差异. 对我们从镜子下载的文件进行的命令的输出应匹配我们从apache.org下载的文件中的值。

现在我们已经验证了该文件没有被破坏或更改,我们将使用tar命令与-x标志提取,-z解压缩,-v用于语音输出,和-f来指定我们正在从一个文件中提取。

1tar -xzvf hadoop-2.7.3.tar.gz

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

1sudo mv hadoop-2.7.3 /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-8-openjdk-amd64/jre/

您可以复制此输出以将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=${JAVA_HOME}
4export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
5 . . .
1[label /usr/local/hadoop/etc/hadoop/hadoop-env.sh]
2 . . .
3#export JAVA_HOME=${JAVA_HOME}
4export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
5 . . .

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

第4步:运行Hadoop

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

1/usr/local/hadoop/bin/hadoop
 1[secondary_label Output]
 2Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
 3  CLASSNAME run the class named CLASSNAME
 4 or
 5  where COMMAND is one of:
 6  fs run a generic filesystem user client
 7  version print the version
 8  jar <jar>            run a jar file
 9                       note: please use "yarn jar" to launch
10                             YARN applications, not this command.
11  checknative [-a|-h]  check native hadoop and compression libraries availability
12  distcp <srcurl> <desturl> copy file or directories recursively
13  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
14  classpath prints the class path needed to get the
15  credential interact with credential providers
16                       Hadoop jar and the required libraries
17  daemonlog get/set the log level for each daemon

帮助意味着我们已经成功配置了Hadoop以运行独立模式,我们将通过运行其运行的示例MapReduce程序来确保它正常运作。

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

接下来,我们可以使用以下命令来运行MapReduce的hadoop-mapreduce-examples程序,一个具有多个选项的Java档案。我们将召唤其grep程序,其中包括在hadoop-mapreduce-examples中的许多例子之一,其次是输入目录input和输出目录grep_example。MapReduce grep程序将计算一个字母单词或常规表达式的匹配。最后,我们将提供一个常规表达式,以便在声明句中或句子结束时找到主要字的发生。这个表达式是案例敏感的,所以如果在句子开始时使用的话,我们不会找到这个词:

1/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep ~/input ~/grep_example 'principal[.]*'

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

 1[secondary_label Output]
 2 . . .
 3        File System Counters
 4                FILE: Number of bytes read=1247674
 5                FILE: Number of bytes written=2324248
 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=37
13                Map output materialized bytes=47
14                Input split bytes=114
15                Combine input records=0
16                Combine output records=0
17                Reduce input groups=2
18                Reduce shuffle bytes=47
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)=61
26                Total committed heap usage (bytes)=263520256
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=151
36        File Output Format Counters
37                Bytes Written=37

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

1[secondary_label Output]
2 . . .
3        at java.lang.reflect.Method.invoke(Method.java:498)
4        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
5        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

美元

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

1cat ~/grep_example/*
1[secondary_label Output]
26 principal
31 principal.

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

结论

在本教程中,我们在独立模式下安装了Hadoop,并通过运行其提供的示例程序来验证它。 要学习如何编写自己的MapReduce程序,您可能需要访问Apache Hadoop的MapReduce教程(https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html),该教程通过示例背后的代码。

Published At
Categories with 技术
comments powered by Disqus