在线试读

get_product_contenthtml 认识Hadoop
  认识并掌握一项技术往往需要采用先从整体学习了解再到局部深入的基本方法,在学习Hadoop之前至少需要从宏观上搞清楚两个基本问题:,Hadoop是什么;第二,Hadoop可以用来做什么。首先,Hadoop是一个分布式基础架构系统,是Google的云计算基础架构系统的开源实现,Google底层基础设施核心的组件包括Google FileSystem和MapReduce计算框架,相应的Hadoop核心的设计就是HDFS和MapReduce,这个系统就像一个集群操作系统一样,可以使廉价的通用硬件形成资源池从而组成威力强大的分布式集群系统,用户可以在不了解分布式底层细节的情况下开发分布式程序。那么Hadoop可以用来做什么呢,Hadoop既然是Google基础设施的开源实现,自然可以做支撑搜索引擎的基础架构,由于又是一个通用的分布式框架,因此可以处理很多和大数据相关的分布式应用。
  本章将从整体上介绍Hadoop,包括Hadoop的发展渊源、基本思想架构,以及Hadoop的发展应用现状,从而使读者对Hadoop有一个基本的认识,为进一步深入学习夯实基础。
  1.1 缘于搜索的小象
  追本溯源,Hadoop起源于Nutch,因此学习Hadoop就有必要了解一下这种渊源及Hadoop的发展简史。
  1.1.1 Hadoop的身世
  首先我们介绍一下Nutch的发展情况,Nutch是一个以Lucene为基础实现的搜索引擎系统,Lucene为Nutch提供了文本检索和索引的API,Nutch不仅仅有检索的功能,还有网页数据采集的功能。Mike Cafarella和Doug Cutting在2002年开始研发Nutch系统,然而他们很快发现他们的架构很难扩展到数十亿级别的网页规模,因为这样规模的搜索引擎系统要涉及网页的分布式存储问题及分布式建立索引的问题。恰在此时,Google公布了支撑其搜索引擎服务的文件系统架构设计——Google's Distributed Filesystem,这种被称为GFS的基础架构很快引起了他们的注意,并被成功引入Nutch系统中,在Nutch中被命名为Nutch分布式文件系统——NDFS,正是NDFS解决了Nutch搜索引擎系统中网页等海量数据的存储问题。2004年,Google又公布了一种并行计算模型MapReduce的设计论文,紧接着在2005年Nutch就已经实现了这种高效的并行计算模型来解决数十亿级别以上网页的分布式采集及索引构建。很快他们就发现这种NDFS和MapReduce模型不仅可以用来解决搜索引擎中的海量网页问题,同时还具有通用性,可以用来构建一种分布式的集群系统,然后在2006年这两个模块就从Nutch中独立出来,并被命名为Hadoop,因此在Nutch-0.8.0版本之前,Hadoop其实还属于Nutch的一部分,而从Nutch-0.8.0开始,将其实现的NDFS和MapReduce剥离出来成立一个新的开源项目,这就是我们目前所熟知的Hadoop平台。
  1.1.2 Hadoop简介
  上一节讲述了Hadoop和Nutch的关系,从这种渊源上来讲,Hadoop本质上起源于Google的集群系统,Google的数据中心使用廉价的Linux PC机组成集群,用其运行各种应用。即使是分布式开发的新手也可以迅速使用Google的基础设施。Google采集系统的核心的组件有两个:个就是GFS(Google FileSystem),一个分布式文件系统,隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口;第二个是MapReduce计算模型,Google发现大多数分布式运算可以抽象为MapReduce操作。Map是把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成终输出Output。这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上。
  而Hadoop就是Google集群系统的一个Java开源实现,是一个项目的总称,主要是由HDFS、MapReduce组成。其中HDFS是Google File System(GFS)的开源实现;MapReduce是Google MapReduce的开源实现。这个分布式框架很有创造性,而且有极大的扩展性,使Google在系统吞吐量上有很大的竞争力。在2006年时Hadoop就受到了Yahoo的支持,目前Yahoo内部已经使用Hadoop代替了原来的分布式系统并拥有了世界上的Hadoop集群。
  Hadoop实现了HDFS文件系统和MapReduce,使Hadoop成为一个分布式的计算平台。用户只要分别实现Map和Reduce,并注册Job即可自动分布式运行。因此,Hadoop并不仅仅是一个用于存储的分布式文件系统,而是用于由通用计算设备组成的大型集群上执行分布式应用的框架。一般来讲,狭义的Hadoop就是指HDFS和MapReduce,是一种典型的Master-Slave架构,如图1-1所示。