如何在Ubuntu16.04上以单机模式安装Hadoop
介绍
Hadoop 是一个基于 Java 的编程框架,支持在廉价机器集群上处理和存储超大型数据集。 它是大数据领域的第一个主要开源项目,由 Apache 软件基金会赞助。
Hadoop 2.7 由四个主要层组成:
- Hadoop Common 是支持其他 Hadoop 模块的实用程序和库的集合。
- HDFS,代表 Hadoop 分布式文件系统,负责将数据持久化到磁盘。
- YARN 是 Yet Another Resource Negotiator 的缩写,是 HDFS 的“操作系统”。
- MapReduce是Hadoop集群的原始处理模型。 它在集群或地图中分配工作,然后将来自节点的结果组织并减少为对查询的响应。 许多其他处理模型可用于 Hadoop 2.x 版本。
Hadoop集群搭建起来比较复杂,所以项目包含一个单机模式,适合学习Hadoop、进行简单操作和调试。
在本教程中,我们将以独立模式安装 Hadoop 并运行其中包含的示例示例 MapReduce 程序之一以验证安装。
先决条件
要遵循本教程,您将需要:
- 具有 sudo 权限的非 root 用户的 Ubuntu 16.04 服务器:您可以在我们的 使用 Ubuntu 16.04 的初始服务器设置指南中了解有关如何设置具有这些权限的用户的更多信息。
完成此先决条件后,您就可以安装 Hadoop 及其依赖项了。
在开始之前,您可能还想看看 大数据概念和术语简介 或 Hadoop 简介
第 1 步 — 安装 Java
首先,我们将更新我们的包列表:
sudo apt-get update
接下来,我们将安装 OpenJDK,这是 Ubuntu 16.04 上的默认 Java 开发工具包。
sudo apt-get install default-jdk
安装完成后,让我们检查一下版本。
java -version
Outputopenjdk version "1.8.0_91" OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14) OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
此输出验证 OpenJDK 是否已成功安装。
第 2 步 — 安装 Hadoop
使用 Java 后,我们将访问 Apache Hadoop 版本页面 以查找最新的稳定版本。 按照当前版本的二进制文件:
在下一页上,右键单击并复制最新稳定版本二进制文件的链接。
在服务器上,我们将使用 wget
来获取它:
wget http://apache.mirrors.tds.net/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
注意: Apache 网站会动态引导你到最好的镜像,所以你的 URL 可能与上面的 URL 不匹配。
为了确保我们下载的文件没有被更改,我们将使用 SHA-256 进行快速检查。 返回 发布页面 ,然后点击 Apache 链接:
输入您下载的版本的目录:
最后,找到您下载的版本的 .mds
文件,然后复制相应文件的链接:
同样,我们将右键单击以复制文件位置,然后使用 wget
传输文件:
wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz.mds
然后运行验证:
shasum -a 256 hadoop-2.7.3.tar.gz
Outputd489df3808244b906eb38f4d081ba49e50c4603db03efd5e594a1e98b09259c2 hadoop-2.7.3.tar.gz
将此值与 .mds
文件中的 SHA-256 值进行比较:
cat hadoop-2.7.3.tar.gz.mds
~/hadoop-2.7.3.tar.gz.mds
... hadoop-2.7.3.tar.gz: SHA256 = D489DF38 08244B90 6EB38F4D 081BA49E 50C4603D B03EFD5E 594A1E98 B09259C2 ...
您可以放心地忽略大小写和空格的差异。 我们针对从镜像下载的文件运行的命令的输出应该与我们从 apache.org 下载的文件中的值匹配。
现在我们已经验证文件没有损坏或更改,我们将使用带有 -x
标志的 tar
命令进行解压缩,-z
进行解压缩,[ X160X] 用于详细输出,-f
用于指定我们从文件中提取。 使用制表符补全或在以下命令中替换正确的版本号:
tar -xzvf hadoop-2.7.3.tar.gz
最后,我们将提取的文件移动到 /usr/local
,这是本地安装软件的适当位置。 如果需要,更改版本号以匹配您下载的版本。
sudo mv hadoop-2.7.3 /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-8-openjdk-amd64/jre/
您可以复制此输出以将 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-8-openjdk-amd64/jre/ . . .
选项 2:使用 Readlink 动态设置值
/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.sh
中的 JAVA_HOME
的值会覆盖环境中由 /etc/profile
或用户配置文件中设置的任何值.
第 4 步 — 运行 Hadoop
现在我们应该能够运行 Hadoop:
/usr/local/hadoop/bin/hadoop
OutputUsage: hadoop [--config confdir] [COMMAND | CLASSNAME] CLASSNAME run the class named CLASSNAME or where COMMAND is one of: fs run a generic filesystem user client version print the version jar <jar> run a jar file note: please use "yarn jar" to launch YARN applications, not this command. checknative [-a|-h] check native hadoop and compression libraries availability distcp <srcurl> <desturl> copy file or directories recursively archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive classpath prints the class path needed to get the credential interact with credential providers Hadoop jar and the required libraries daemonlog get/set the log level for each daemon
帮助意味着我们已经成功地将 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 程序将计算文字词或正则表达式的匹配。 最后,我们将提供一个正则表达式来查找在陈述句内或结尾处出现的单词 principal
。 该表达式区分大小写,因此如果它在句首大写,我们将找不到该词:
/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep ~/input ~/grep_example 'principal[.]*'
任务完成后,它会提供已处理内容和遇到的错误的摘要,但这不包含实际结果。
Output . . . File System Counters FILE: Number of bytes read=1247674 FILE: Number of bytes written=2324248 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=37 Map output materialized bytes=47 Input split bytes=114 Combine input records=0 Combine output records=0 Reduce input groups=2 Reduce shuffle bytes=47 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)=61 Total committed heap usage (bytes)=263520256 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=151 File Output Format Counters Bytes Written=37
注意:如果输出目录已经存在,程序将失败,而不是看到摘要,输出将类似于:
Output . . . at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
结果存储在输出目录中,可以通过在输出目录上运行 cat
来检查:
cat ~/grep_example/*
Output6 principal 1 principal.
MapReduce 任务发现单词 principal
出现一次,后面跟着一个句点和六次没有出现的单词。 运行示例程序已验证我们的独立安装工作正常,并且系统上的非特权用户可以运行 Hadoop 进行探索或调试。
结论
在本教程中,我们以独立模式安装了 Hadoop,并通过运行它提供的示例程序对其进行了验证。 要了解如何编写自己的 MapReduce 程序,您可能需要访问 Apache Hadoop 的 MapReduce 教程,其中会介绍示例背后的代码。 当您准备好设置集群时,请参阅 Apache Foundation Hadoop Cluster Setup 指南。