如何在Debian9上以单机模式安装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 程序之一来验证安装。
在开始之前,您可能还想看看 大数据概念和术语简介 或 Hadoop 简介
先决条件
要遵循本教程,您将需要:
- 具有非 root 用户且具有 sudo 权限的 Debian 9 服务器 和防火墙,您可以按照 使用 Debian 9 的初始服务器设置教程进行设置。
- 按照 How to Install Java with Apt on Debian 9 安装 Java。 您可以在本教程中使用 OpenJDK。
/etc/environment
中设置的JAVA_HOME
环境变量,如How to Install Java with Apt on Debian 9所示。 Hadoop 需要设置此变量。
第 1 步 — 安装 Hadoop
要安装 Hadoop,首先访问 Apache Hadoop 版本页面 以查找最新的稳定版本。
导航到您要安装的版本的 binary。 在本指南中,我们将安装 Hadoop 3.0.3。
在下一页上,右键单击并将链接复制到发布二进制文件。
在您的服务器上,使用 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 进行快速检查。 返回 发布页面 ,然后右键单击并将链接复制到您下载的发布二进制文件的校验和文件:
同样,在您的服务器上使用 wget
下载文件:
wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz.mds
然后运行验证:
sha256sum hadoop-3.0.3.tar.gz
Outputdb96e2c0d0d5352d8984892dfac4e27c0e682d98a497b7e04ee97c3e2019277a hadoop-3.0.3.tar.gz
将此值与 .mds
文件中的 SHA-256 值进行比较:
cat hadoop-3.0.3.tar.gz.mds | grep SHA256
~/hadoop-3.0.3.tar.gz.mds
... SHA256 = DB96E2C0 D0D5352D 8984892D FAC4E27C 0E682D98 A497B7E0 4EE97C3E 2019277A
您可以放心地忽略大小写和空格的差异。 您针对我们从镜像下载的文件运行的命令的输出应该与您从 apache.org 下载的文件中的值匹配。
现在您已经验证文件没有损坏或更改,使用带有 -x
标志的 tar
命令进行解压缩,使用 -z
解压缩,[ X159X] 用于详细输出,-f
用于指定您正在从文件中提取存档。 使用制表符补全或在以下命令中替换正确的版本号:
tar -xzvf hadoop-3.0.3.tar.gz
最后,将解压后的文件移动到/usr/local
,适合本地安装软件的地方。 如果需要,更改版本号以匹配您下载的版本。
sudo mv hadoop-3.0.3 /usr/local/hadoop
有了软件,我们就可以配置它的环境了。
第 2 步 — 运行 Hadoop
让我们确保 Hadoop 运行。 执行以下命令启动 Hadoop 并显示其帮助选项:
/usr/local/hadoop/bin/hadoop
您将看到以下输出,它让您知道您已成功将 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: . . .
我们将通过运行它附带的示例 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[.]*'
任务完成后,它会提供已处理内容和遇到的错误的摘要,但这不包含实际结果:
Output . . . 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
结果存储在 ~/grep_example
目录中。
如果这个输出目录已经存在,程序将会失败,你会看到如下内容,而不是看到摘要:
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/*
你会看到这个输出:
Output19 allowed. 1 allowed
MapReduce 任务发现单词 allowed
出现了 19 次,后面跟着一个句点,还有一次没有出现。 运行示例程序已验证我们的独立安装工作正常,并且系统上的非特权用户可以运行 Hadoop 进行探索或调试。
结论
在本教程中,我们以独立模式安装了 Hadoop,并通过运行它提供的示例程序对其进行了验证。 要了解如何编写自己的 MapReduce 程序,请访问 Apache Hadoop 的 MapReduce 教程,该教程将介绍您在本教程中使用的示例背后的代码。 当您准备好设置集群时,请参阅 Apache Foundation Hadoop Cluster Setup 指南。