介绍
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 发布页面以找到最新的稳定版本。
在下一页上,右键单击并复制最新稳定版本的二进制链接。
在服务器上,我们将使用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链接:
Enter the directory for the version you downloaded:
最后,找到您下载的版本的.mds 文件,然后复制相应文件的链接:
再次,我们将右键单击复制文件位置,然后使用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 . . .
选项2:使用 Readlink 动态设置值
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),该教程通过示例背后的代码。