介绍
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程序之一来验证安装。
先决条件
要学习本教程,您需要:
- 具有
sudo
权限的非root用户的Ubuntu 18.04服务器 :您可以在使用Ubuntu 18.04指南的初始服务器设置中了解有关如何使用这些权限设置用户的更多信息。
完成此先决条件后,您就可以安装Hadoop及其依赖项了。
在开始之前,您可能还想看看“ 大数据概念和术语 简介”或“Hadoop简介”
第1步 - 安装Java
首先,我们将更新我们的包列表:
sudo apt update
接下来,我们将在Ubuntu 18.04上安装OpenJDK,这是默认的Java Development Kit:
sudo apt install default-jdk
安装完成后,让我们检查一下版本。
java -version
Outputopenjdk 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。
在下一页上,右键单击并将链接复制到发布二进制文件。
在服务器上,我们将使用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
然后运行验证:
shasum -a 256 hadoop-3.0.3.tar.gz
Outputdb96e2c0d0d5352d8984892dfac4e27c0e682d98a497b7e04ee97c3e2019277a hadoop-3.0.3.tar.gz
将此值与.mds
文件中的SHA-256值进行.mds
:
cat 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::"
Output/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:设置静态值
. . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
. . .
选项2:使用Readlink动态设置值
. . .
#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 [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[.]*'
任务完成后,它会提供已处理内容和遇到的错误的摘要,但这不包含实际结果。
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
注意:如果输出目录已经存在,程序将失败,而不是看到摘要,输出将类似于:
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任务发现了19个出现的单词,后跟一个句点,一个出现在不出现的位置。 运行示例程序已验证我们的独立安装正常运行,并且系统上的非特权用户可以运行Hadoop进行探索或调试。
结论
在本教程中,我们以独立模式安装了Hadoop,并通过运行它提供的示例程序对其进行了验证。 要了解如何编写自己的MapReduce程序,您可能需要访问Apache Hadoop的MapReduce教程 ,该教程将介绍示例背后的代码。 准备好设置集群时,请参阅Apache Foundation Hadoop集群设置指南。