Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
Hadoop 是 Apache 旗下的一个用 java 语言实现开源软件框架, 是一个开发和运行处理大规模数据的软件平台。 允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。它的核心组件有:
HDFS(分布式文件系统):解决海量数据存储
YARN(作业调度和集群资源管理的框架):解决资源任务调度
MAPREDUCE(分布式运算编程框架): 解决海量数据计算
当下的 Hadoop 已经成长为一个庞大的体系,随着生态系统的成长,新出现的项目越来越多,其中不乏一些非 Apache 主管的项目,这些项目对 HADOOP 是很好的补充或者更高层的抽象。 比如:
HDFS:分布式文件系统
MAPREDUCE:分布式运算程序开发框架
HIVE:基于 HADOOP 的分布式数据仓库,提供基于 SQL 的查询数据操作
HBASE:基于 HADOOP 的分布式海量数据库
ZOOKEEPER:分布式协调服务基础组件
Mahout:基于 mapreduce/spark/flink 等分布式运算框架的机器学习算法库
Oozie:工作流调度框架
Sqoop:数据导入导出工具(比如用于 mysql 和 HDFS 之间)
Flume:日志数据采集框架
Impala: 基于 Hadoop 的实时分析
Hadoop 是 Apache Lucene 创始人 Doug Cutting 创建的。最早起源于 Nutch,它是 Lucene 的子项目。 Nutch 的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题: 如何解决数十亿网页的存储和索引问题。
2003 年 Google 发表了一篇论文为该问题提供了可行的解决方案。 论文中描述的是谷歌的产品架构,该架构称为: 谷歌分布式文件系统(GFS) ,可以解决他们在网页爬取和索引过程中产生的超大文件的存储需求。
2004 年 Google 发表论文向全世界介绍了谷歌版的 MapReduce 系统。同时期, Nutch 的开发人员完成了相应的开源实现 HDFS 和 MAPREDUCE,并从Nutch 中剥离成为独立项目 HADOOP,到 2008 年 1 月, HADOOP 成为 Apache 顶级项目,迎来了它的快速发展期。
2006 年 Google 发表了论文是关于 BigTable 的,这促使了后来的 Hbase 的发
展。
Hadoop的特点
Apache Hadoop 2.9.2是2.xy版本系列中的一个点版本,它基于之前的稳定版本2.9.1。
以下是主要功能和改进的简短概述。
Common
HDFS
YARN
社区版是指由 Apache 软件基金会维护的版本,是官方维护的版本体系。
商业版 Hadoop 是指由第三方商业公司在社区版 Hadoop 基础上进行了一些修改、整合以及各个服务组件兼容性测试而发行的版本, 比较著名的有 cloudera 的 CDH、 mapR 等。
我们介绍的是社区版: Apache Hadoop。 后续如未说明都是指 Apache 版。Hadoop 的版本很特殊,是由多条分支并行的发展着。 大的来看分为 3 个大的系列版本: 1.x、 2.x、 3.x。
依赖的软件:
Apache Hadoop的2.7及更高版本需要Java 7及以上。它在OpenJDK和Oracle(HotSpot)的JDK / JRE 上构建和测试。
早期版本(2.6及更早版本)支持Java 6及以上。
linux平台还需要依赖:必须安装ssh并运行sshd才能使用管理远程hadoop守护进程的hadoop脚本。 $ sudo apt-get install ssh
$ sudo apt-get install rsync
vim /etc/profile 末尾追加以下内容:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/
export CLASSPATH=.:${JAVA_HOME}/lib
export HADOOP_HOME=/home/hadoop-3.2.0
export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile 刷新配置文件
在此Hadoop基本已经安装完成:通过运行命令检查 hadoop version检查安装是否正常;如我机子测试输出信息,代表已经成功安装:
hadoop version
Hadoop 3.2.0
Source code repository https://github.com/apache/hadoop.git -r e97acb3bd8f3befd27418996fa5d4b50bf2e17bf
Compiled by sunilg on 2019-01-08T06:08Z
Compiled with protoc 2.5.0
From source with checksum d3f0795ed0d9dc378e2c785d3668f39
This command was run using /home/hadoop-3.2.0/share/hadoop/common/hadoop-common-3.2.0.jar
默认情况下,Hadoop配置为以非分布式模式运行,作为单个Java进程。这对调试很有用。
测试用例:
$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'
$ cat output/*
Hadoop也可以在伪分布式模式下在单节点上运行,其中每个Hadoop守护程序在单独的Java进程中运行。
1、etc/hadoop/core-site.xml:
fs.defaultFS
hdfs://localhost:9000
2、etc/hadoop/hdfs-site.xml:默认的块复制数量为3
dfs.replication
1
1、先检查自己的环境是否可以通过ssh无密码访问
ssh localhost
2、如果在没有密码短语的情况下无法ssh到localhost,请执行以下命令:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
1、格式化文件系统:
bin/hdfs namenode -format
2、启动NameNode 守候进程和DataNode 守候进程:
sbin/start-dfs.sh
hadoop守护进程日志输出被写入$hadoop_log_dir目录(默认为$hadoop_home/logs)。
3、浏览名称节点的Web界面;默认情况下,该界面位于:
4、使执行MapReduce作业所需的HDFS目录:
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/
5、将输入文件复制到分布式文件系统中:
bin/hdfs dfs -put etc/hadoop input
6、运行提供的一些示例:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'
7、检查输出文件:将输出文件从分布式文件系统复制到本地文件系统,然后检查它们:
bin/hdfs dfs -get output output
cat output/*
或
查看分布式文件系统上的输出文件:
bin/hdfs dfs -cat output/*
8、完成后,使用以下命令停止守护进程:
sbin/stop-dfs.sh
您可以通过设置一些参数并运行ResourceManager守护程序和NodeManager守护程序,以伪分布式模式在YARN上运行MapReduce作业。
以下说明假设已执行上述指令的 1.~4步骤。
1、配置参数如下:etc/hadoop/mapred-site.xml:
mapreduce.framework.name
yarn
etc/hadoop/yarn-site.xml:
yarn.nodemanager.aux-services
mapreduce_shuffle
2、启动 ResourceManager 和 NodeManager 守护进程:
sbin/start-yarn.sh
3、浏览ResourceManager的Web界面;默认情况下,该界面位于:
4、运行MapReduce作业
5、完成后,使用以下命令停止守护进程:
sbin/stop-yarn.sh
有关设置完全分布式、非平凡集群的信息在以后章节中介绍。