介绍
Hadoop是一个基于Java的编程框架,支持在一组廉价机器上处理和存储极大数据集。它是大数据游戏领域的第一个主要开源项目,由Apache软件基金会赞助。 Hadoop 2.7由四个主要层组成:- Hadoop Common是支持其他Hadoop的模块工具和库集合。
- HDFS,它代表Hadoop分布式文件系统,负责数据持久化到磁盘。
- YARN ,短的又一资源谈判,是“操作系统”的HDFS。
- MapReduce是Hadoop集群原来的处理模型。它在集群或映射中分配工作,然后组织并将节点的结果减少为对查询的响应。许多其他处理模型可用于2.x版本的Hadoop。
先决条件
要遵循本教程,您需要:- 一个Ubuntu 16.04服务器与非root用户
sudo
权限 :您可以了解更多关于如何建立一个用户利用这些权限在我们与Ubuntu 16.04的初始服务器安装指南。
第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的网站将引导您进入动态的最好的镜像,让您的网址可能不符合上面的网址。 为了确保我们下载的文件没有被更改,我们将使用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
比较中的SHA-256值这个值
.mds
文件:
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下载的文件中的值匹配。 现在,我们已经验证该文件没有损坏或更改,我们将使用
tar
命令和
-x
标志来提取,
-z
解压缩,
-v
详细输出,和
-f
来指定我们'从文件中重新提取。使用制表符完成或在以下命令中替换正确的版本号:
tar -xzvf hadoop-2.7.3.tar.gz
最后,我们将提取的文件移动到
/usr/local
,适当的地方为本地安装的软件。如果需要,请更改版本号,以匹配您下载的版本。
sudo mv hadoop-2.7.3 /usr/local/hadoop
随着软件到位,我们准备好配置其环境。
第3步 - 配置Hadoop的Java Home
Hadoop要求您将路径设置为Java,作为环境变量或Hadoop配置文件。 到Java的路径,/usr/bin/java
是一个符号链接
/etc/alternatives/java
,而这又是一个符号连接到默认的Java二进制文件。 我们将使用
readlink
与
-f
标志遵循的路径的每一个部分每符号链接,递归。 然后,我们将使用
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的,价值JAVA_HOME
在hadoop-env.sh
将覆盖在环境下设置的任何值/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进行探查或调试。