3.2 Hadoop架构
3-2 Hadoop架构
3.2.1 Hadoop介绍
1.Hadoop概述
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS)和MapReduce为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。HDFS的高容错性、高伸缩性等优点允许用户将Hadoop部署在低廉的硬件上,形成分布式系统,为海量的数据提供了存储方法。MapReduce分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,为海量的数据提供了计算方法。所以用户可以利用Hadoop轻松地组织计算机资源,从而搭建自己的分布式计算平台,并可以充分利用集群的计算和存储能力,完成海量数据的处理。经过业界和学术界长达10年的锤炼,目前的Hadoop 2.0版已经趋于完善,在实际的数据处理和分析任务中担当着不可替代的角色。
Hadoop起源于谷歌的集群系统,谷歌的数据中心使用廉价Linux PC组成集群,运行各种应用,即使是分布式开发新手也可以迅速使用谷歌的基础设施。如今广义的Hadoop已经包括Hadoop本身和基于Hadoop的开源项目,并已经形成了完备的Hadoop生态链系统。
从狭义上来说,Hadoop就是单独指代Hadoop这个软件。从广义上来说,Hadoop指代大数据的一个生态圈,包括很多其他的软件,如图3-3所示。
图3-3 Hadoop生态圈
2.Hadoop的特点
Hadoop有以下几个特点。
(1)Hadoop是一个框架
很多初学者在学习Hadoop时,对Hadoop的本质并不十分了解,Hadoop其实是由一系列的软件库组成的框架。这些软件库也可称作功能模块,它们各自负责Hadoop的一部分功能,其中最主要的是Common、HDFS和YARN。Common提供远程调用RPC、序列化机制,HDFS负责数据的存储,YARN则负责统一资源调度和管理等。
从字面上来看,Hadoop没有任何实际的意义。Hadoop这个名字不是缩写,它是一个虚构的名字。Hadoop的创建者Doug Cutting这样解释Hadoop这一名称的来历:“这个名字是我的孩子给一头吃饱了的棕黄色大象取的。我的命名标准是简短,容易发音和拼写,没有太多含义,并且不会被用于别处,小孩子是这方面的高手。”Hadoop的标志如图3-4所示,欢快的黄色大象如今已深入人心。
图3-4 Hadoop的标志
(2)Hadoop适合处理大规模数据
这是Hadoop一个非常重要的特点和优点,Hadoop处理海量数据的能力十分可观,并能够实现分布式存储和分布式计算,有统一的资源管理和调度平台,扩展能力十分优秀。2008年,Hadoop打破297s的世界纪录,成为最快的TB级数据排序系统,仅用时209s。
(3)Hadoop被部署在一个集群上
承载Hadoop的物理实体是一个物理的集群。所谓集群,是一组通过网络互联的计算机,集群里的每一台计算机称为一个节点。Hadoop被部署在集群之上,对外提供服务。当节点数量足够多时,故障将成为一种常态而不是异常现象,Hadoop在设计之初就将故障的发生作为常态进行考虑,数据的灾备及应用的容错对于用户来说都是透明的,用户得到的只是一个提供高可用服务的集群。图3-5所示为Hadoop集群。
图3-5 Hadoop集群
3.2.2 Hadoop发展史
Hadoop原本来自于谷歌一款名为MapReduce的编程模型包。谷歌的MapReduce框架可以把一个应用程序分解为许多并行计算指令,跨大量的计算节点运行巨大的数据集。使用该框架的一个典型例子就是在网络数据上运行的搜索算法。Hadoop最初只与网页索引有关,之后迅速发展成为分析大数据的领先平台。
Hadoop的源头是Apache Nutch,该项目始于2002年,是Apache Lucene的子项目之一。
Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。之后,谷歌发表的两篇论文为该问题提供了可行的解决方案。一篇是2003年发表的关于谷歌分布式文件系统的论文,该论文描述了谷歌搜索引擎网页相关数据的存储架构。该结构可以解决Nutch遇到的网页抓取和索引过程中超大文件存储需求的问题。但由于谷歌未开源代码,Nutch项目组便根据论文完成了一个开源实现,即Nutch分布式文件系统(Nutch Distributed File System, NDFS)。另一篇是2004年,谷歌在“操作系统设计与实现”(Operating System Design and Implementation, OSDI)会议上公开发表了题为MapReduce:Simplified Data Processing on Large Clusters(《MapReduce:简化大规模集群上的数据处理》)的论文。该论文描述了谷歌内部最重要的分布式计算框架MapReduce的设计艺术,该框架可用于处理海量网页的索引问题。之后,受到启发的Doug Cutting等人开始尝试实现MapReduce计算框架,并将它与NDFS结合,用于支持Nutch引擎的主要算法。由于NDFS和MapReduce在Nutch引擎中有着良好的应用,因此它们于2006年2月被分离出来,成为一套完整而独立的软件,并命名为Hadoop。到了2008年年初,Hadoop已成为Apache的顶级项目,包含众多子项目。它被应用到包括雅虎在内的很多互联网公司。例如,Hadoop 1.0.1版本已经发展成为包含HDFS、MapReduce子项目,与Pig、ZooKeeper、Hive、HBase等项目相关的大型应用工程,迎来了它的快速发展期。
Hadoop的历史版本系列一共有三个,分别如下。
● 0.x版本系列:Hadoop最早的一个开源版本,在此基础上演变出1.x及2.x版本。
● 1.x版本系列:Hadoop的第二代开源版本,主要修复0.x版本中的一些漏洞等。
● 2.x版本系列:架构产生重大变化,引入了YARN平台等许多新特性。
3.2.3 Hadoop核心组件
Hadoop的三大核心组件分别是HDFS、YARN和MapReduce。
● HDFS:Hadoop的数据存储工具。
● YARN(Yet Another Resource Negotiator,另一种资源协调者):Hadoop的资源管理器。
● MapReduce:分布式计算框架。
1.HDFS
HDFS是一个文件系统,用于存储文件,通过目录树来定位文件。它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS适合于一次写入、多次读出的场景,且不支持文件的修改。它适合用来做数据分析,并不适合用来做网盘应用。
2.YARN
YARN是一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。通过YARN,不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度。
YARN的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)进行分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。这里的应用程序是指传统的MapReduce作业或作业的DAG(有向无环图)。
YARN分层架构的本质是ReduceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ReduceManager将各个资源部分(计算、内存、带宽等)精心安排给基础NodeManager(YARN的每节点代理)。ReduceManager还与ApplicationMaster一起分配资源。
3.MapReduce
MapReduce是谷歌公司于2004年提出的能并发处理海量数据的并行编程模型。其特点是简单易学、适用广泛,能够降低并行编程难度,让程序员从繁杂的并行编程工作中解脱出来,轻松地编写简单、高效的并行程序。
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。Map(映射)和Reduce(归约)概念是它们的主要思想,都是引用自函数式编程语言,还有引用自矢量编程语言的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。