Hadoop是一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS具有高容错性的特点,并且设计用来部署在低廉的硬件上,而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序
Hadoop的框架最核心的设计就是:HDFS和MapReduce。 HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算
Hadoop系统最初的源头来自于Apache Lucene项目下的搜索引擎子项目Nutch,该项目的负责人是Doug Cutting。2003年,Google公司为了解决其搜索引擎中大规模Web网页数据的处理,研究发明了一套称为MapReduce的大规模数据并行处理技术,并于2004年在著名的OSDI国际会议上发表了一篇题为MapReduce的论文,简要介绍MapReduce的基本设计思想。论文发表后,Doug Cutting受到了很大启发,他发现Google MapReduce所解决的大规模搜索引擎数据处理问题,正是他同样面临并急需解决的问题。因而,他尝试依据Google MapReduce的设计思想,模仿Google MapReduce框架的设计思路,用Java设计实现出了一套新的MapReduce并行处理软件系统,并将其与Nutch分布式文件系统NDFS结合,用以支持Nutch搜索引擎的数据处理。2006年,他们把NDFS和MapReduce从Nutch项目中分离出来,成为一套独立的大规模数据处理软件系统,并使用Doug Cutting小儿子当时呀呀学语称呼自己的玩具小象的名字“Hadoop”命名了这个系统。2008年他们把Hadoop贡献出来,成为Apache最大的一个开源项目,并逐步发展成熟,成为一个包含了HDFS、MapReduce、HBase、Hive、Zookeeper等一系列相关子项目的大数据处理平台和生态系统。
Hadoop开源项目自最初推出后,经历了数十个版本的演进。它从最初于2007年推出的Hadoop-0.14.X测试版,一直发展到2011年5月推出了经过4500台服务器产品级测试的最早的稳定版0.20.203.X。到2011年12月,Hadoop又在0.20.205版基础上发布了Hadoop1.0.0,该版本到2012年3月发展为Hadoop1.0.1稳定版。1.0版继续发展,到2013年8月发展为Hadoop1.2.1稳定版。
与此同时,由于Hadoop1.X以前版本在MapReduce基本构架的设计上存在作业主控节点(JobTracker)单点瓶颈、作业执行延迟过长、编程框架不灵活等较多的缺陷和不足,2011年10月,Hadoop推出了基于新一代构架的Hadoop0.23.0测试版,该版本系列最终演化为Hadoop2.0版本,即新一代的Hadoop系统YARN。2013年10月YARN已经发展出Hadoop2.2.0稳定版。
Hadoop的发行版除了有Apache hadoop外cloudera,hortonworks,mapR,华为,DKhadoop等都提供了自己的商业版本。
商业发行版主要是提供了更为专业的技术支持,这对于大型企业更为重要,不同发行版都有自己的一些特点,本文就各发行版做简单对比介绍。
对比版选择:DKhadoop发行版、cloudera发行版、hortonworks发行版。
1、DKhadoop发行版:有效的集成了整个HADOOP生态系统的全部组件,并深度优化,重新编译为一个完整的更高性能的大数据通用计算平台,实现了各部件的有机协调。因此DKH相比开源的大数据平台,在计算性能上有了高达5倍(最大)的性能提升。DKhadoop将复杂的大数据集群配置简化至三种节点(主节点、管理节点、计算节点),极大的简化了集群的管理运维,增强了集群的高可用性、高可维护性、高稳定性。
2、Cloudera发行版:CDH是Cloudera的hadoop发行版,完全开源,比Apache hadoop在兼容性,安全性,稳定性上有增强。
3、Hortonworks发行版:Hortonworks 的主打产品是Hortonworks Data Platform (HDP),也同样是100%开源的产品,其版本特点:HDP包括稳定版本的Apache Hadoop的所有关键组件;安装方便,HDP包括一个现代化的,直观的用户界面的安装和配置工具。
优点
高可靠性:因为 Hadoop 假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理
高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
高效性:在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任务处理速度。
高容错性:自动保存多份副本数据,并且能够自动将失败的任务重新分配。
缺点
Hadoop不适用于低延迟数据访问。
Hadoop不能高效存储大量小文件。
Hadoop不支持多用户写入并任意修改文件
整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过MR来实现对分布式并行任务处理的程序支持。
HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的(在最新的Hadoop2.2版本已经实现多个NameNode的配置-这也是一些大公司通过修改hadoop源代码实现的功能,在最新的版本中就已经实现了)。NameNode作为主服务器,管理文件系统命名空间和客户端对文件的访问操作。DataNode管理存储的数据。HDFS支持文件形式的数据。
从内部来看,文件被分成若干个数据块,这若干个数据块存放在一组DataNode上。NameNode执行文件系统的命名空间,如打开、关闭、重命名文件或目录等,也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写,并在NameNode的统一调度下进行数据库的创建、删除和复制工作。NameNode是所有HDFS元数据的管理者,用户数据永远不会经过NameNode。
NameNode:存储文件的元数据,如文件名称,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等
DataNode:在本地文件系统存储文件块数据,以及数据块的校验
Secondary NameNode:用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
MapReduce是一种可用于数据处理的编程模型,其程序的本质是并行运行的,可以将大规模的数据分析任务分发给任何一个拥有足够多机器的数据中心
MapReduce任务过程分为两个处理阶段:Map阶段与reduce阶段
Map阶段并行处理输入数据
Reduce阶段对map结果进行汇总
Apache YARN 是Hdoop集群资源管理系统。YARN 被引入Hadoop2.x版本,最初是为了改善MapReduce实现,它具有足够的通用性,可以支持其它的分布式计算模型
YARN通过两类长期运行的守护进程提供自己的核心服务:
1)管理集群上资源使用的资源管理器 resource manager: 处理客户端请求、启动/监控 ApplicationMaster、监控 NodeManager、资源分配与调度;
2)运行在集群中所有节点上且能够启动和监控容器的节点管理器node manager:单个节点上的资源管理,处理来自resourceManager的命令、处理来自applicationMaster的命令
3)用于执行特定应用程序的容器container:对任务运行环境的抽象,封装了 CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。
4)applicationMaster :数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。
上图中涉及到的技术名词解释如下:
1)Sqoop:sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql)间进
行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle 等)中的数据导进到
Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。
2)Flume:Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚
合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume
提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
3)Kafka:Kafka 是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
(1)通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息 存储也能够保持长时间的稳定性能。
(2)高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒数百万的消息 (3)支持通过 Kafka 服务器和消费机集群来分区消息。
(4)支持 Hadoop 并行数据加载。
4)Storm:Storm 为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时
处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm 也可被用于“连
续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式
输出给用户。
5)Spark:Spark 是当前最流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数据进行计算。
6)Oozie:Oozie 是一个管理 Hdoop 作业(job)的工作流程调度管理系统。Oozie 协调作业
就是通过时间(频率)和有效数据触发当前的 Oozie 工作流程。
7)Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库,
它是一个适合于非结构化数据存储的数据库。
8)Hive:hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张
数据库表,并提供简单的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。
其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专
门的 MapReduce 应用,十分适合数据仓库的统计分析。
9)Mahout:
Apache Mahout是个可扩展的机器学习和数据挖掘库,当前Mahout支持主要的4个用 例:
推荐挖掘:搜集用户动作并以此给用户推荐可能喜欢的事物。 聚集:收集文件并进行相关文件分组。 分类:从现有的分类文档中学习,寻找文档中的相似特征,并为无标签的文档进行正确 的归类。
频繁项集挖掘:将一组项分组,并识别哪些个别项会经常一起出现。
10)ZooKeeper:Zookeeper 是 Google 的 Chubby 一个开源的实现。它是一个针对大型分布
式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。
ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能
稳定的系统提供给用户。