的是谷歌产品架构,该架构称为“谷歌分布式文件系统”,简称GFS。①GFS 或类似的架构,可以解决他们在网页爬取和索引过程中产生的超大文件的 存储需求。特别关键的是,GFS能够节省系统管理(如管理存储节点)所花的 大量时间。在2004年,他们开始着手做开源版本的实现,即Nutch分布式 文件系统(NDFS)。 2004年,谷歌发表论文向全世界介绍他们的MapReduce系统。2005年 初,Nutch的开发人员在Nutch上实现了一个MapReduce系统,到年中, Nutch的所有主要算法均完成移植,用MapReduce和NDFS来运行。 Nutch的NDFS和MapReduce实现不只适用于搜索领域。在2006年2月, 开发人员将NDFS和MapReduce移出Nutch形成Lucene的一个子项目,命 名为Hadoop。大约在同一时间,Doug Cutting加入雅虎,雅虎为此组织了 专门的团队和资源,将Hadoop发展成能够处理Web数据的系统(参见后面 的补充材料“Hadoop在雅虎“)。在2008年2月,雅虎宣布,雅虎搜索引 擎使用的索引是在一个拥有1万个内核的Hadoop集群上构建的。① 2008年1月,Hadoop已成为Apache的顶级项目,证明了它的成功、多样 化和生命力。到目前为止,除雅虎之外,还有很多公司在用Hadoop,例如 Last.fm、Facebook和《纽约时报》等。第16章和Hadoop维基页面(英文) 介绍了一些案例(http./wiki.apache.org/hadoop/PoweredBy)。 《纽约时报》的案例广为流传,他们把1851年到1980年的存档扫描之后 得到4TB的文件并用亚马逊的EC2云服务将文件存为PDF格式放到网上 共享。整个过程一共使用了100台计算机,所花的时间不到24小时。如 ①Sanjay Ghemawat,Howard Gobioff和Shun-Tak Leung在2003年l0月发表的文章 “The Google File System”,网址为http:/labs.google.com/papers/gf.html。 ②参见Jeffrey Dean和Sanjay Ghemawat2004年I2月发表的文章“MapReduce: Simplified Data Processing on Large Clusters”(MapReduce:大型集群的数据简化处 理),网址为http:/labs.google.com/papers mapreduce..html。 ③参见2008年2月19日发表的文章“雅虎发布全球最大的Hadoop产品应用”(Yahoo! Lauches World's Largest Hadoop ProductionApplications),http://developer: yahoo.com/blogs/hadoop/posts/2008/02/yahoo-worlds-largest-production-hadoop/. ④参见Derek Gottfrid在2007年Il月I日发表的文章“Self-service,Prorated Super Computing Fun!”(自助式比例分配超级计算的乐趣!),网址为http:open.blogs.ytimes.. com/2007/11/01/self-service-prorated-super-computing-fun/. 初识Hadoop 11
果没有亚马逊的按小时付费模式(即允许《纽约时报》短期内访问大量机器) 和Hadoop好用的并发编程模型珠联璧合,这个项目不太可能这么快就启动 和完成。 2008年4月,Hadoop打破世界纪录,成为最快的TB级数据排序系统。在 一个910节点的群集,Hadoop在209秒内(不到3.5分钟)完成了对1TB数 据的排序,击败了前一年的297秒冠军(详情参见15.5节的补充材料 “Apache Hadoop的TB级数据处理”)。同年I1月,谷歌在报告中声称, 它的MapReduce对1TB数据排序只用了68秒。2009年5月本书第1版 出版的时候,有报道称雅虎有一个的团队使用Hadoop对ITB数据进行排 序只花了62秒。 从那以后,Hadoop跃升为企业主流的部署系统。在工业界,Hadoop已经是 公认的大数据通用存储和分析平台,这一事实主要体现在大量直接使用或 者间接辅助Hadoop系统的产品如雨后春笋般大量涌现。一些大公司也发布 Hadoop发行版本,包括EMC,IBM,Microsft和Oracle以及一些专注于 Hadoop的公司,如Cloudera,Hortonworks"和MapR。 Hadoop在雅虎 作者:Owen O'Melly 构建互联网规模的搜索引擎离不开大量的数据,因此也离不开大量的机 器来处理巨量的数据。雅虎搜索引擎(Yahoo!Search)有4个主要组成部 分:Crawler,.从网页服务器爬取网页;WebMap,构建一个已知网页的 链接图;Indexer,为最佳页面构建一个反向索引;Runtime,处理用户 的查询。WebMap生成的链接图非常大,大约包括一万亿(1012)条边(每 条边代表一个网页链接)和一千亿(10个节点(每个节点代表不同的网 址)。创建并分析如此大的图需要大批计算机很多天长时间运行。到 2005年初,WebMap用的底层架构Dreadnaught需要重新设计以便日后扩 展到更多的节点。 ①全文参见2008年I1月2l日的文章“Sorting IPB with MapReduce"(MapReduce处 理1PB数据),网址为h1ip:/∥googleblog.blogspot.com/2008/11/sor1ing-1pb-with- mapreduce.html。 ②编者注:该公司是雅虎的几个核心开发人员创办的,主要提供Hadoop支持和咨询 服务,他们已经与微软在2011年建立战略合作关系,帮助微软将Hadoop移植到 Wiondows Server和Azure。 12 第1章
Dreadnaught从20个节点成功扩展到600个,但需要完全重新设计才能 进一步扩大。Dreadnaught与MapReduce在很多方面都很相似,但灵活 性更强,结构也更松散。说具体点,一个Dreadnaught作业的每一个片 断(fragment,也称“分块”)都可以输送到下一阶段的各个片段继续执 行,排序则是通过库函数来完成的。但实际情形是,大多数WebMap阶 段是两两一对,对应于MapReduce。因此,WebMap应用不需要做大量 重构操作就可以适应MapReduce。 Eric Baldeschwieler(Ericl.4)组建了一个小团队,于是我们开始设计并在 GFS和MapReduce上用C++来建立一个新框架的原型,并打算用它来取 代Dreadnaught。尽管我们的当务之急是需要一个新的WebMap框架, 但更清楚的是,建立雅虎搜索引擎批处理平台的标准对我们更重要。使 平台更通用以便支持其他用户,才能够更好地实现新平台的均衡性投资。 与此同时,我们也关注在Hadoop(当时也是Nutch的一部分)及其进展情 况。2006年1月,雅虎聘请了Doug Cutting。一个月后,我们决定放弃 原型,转而采用Hadoop。.与我们的原型和设计相比,Hadoop的优势在 于它已经在20个节点上实际应用过Nutch).这样一来,我们便能在两 个月内搭建一个研究集群并能够以很快的速度帮助我们的客户使用这个 新的框架。另一个显著的优点是Hadoop已经开源,比较容易(尽管也不 是想象的那么容易!)从雅虎法务部门获得许可对该开源系统进行进一步 研究。因此,我们在2006年初建立了一个200节点的研究集群并暂时 搁置WebMap计划,转而为研究用户提供Hadoop支持和优化服务。 Hadoop大事记 2004年 Doug Cutting和Mike Cafarella实现了HDFS和MapReduce的初版 2005年12月 Nutch移植到新框架,Hadoop在20个节点上稳定运行 2006年1月 Doug Cutting加入雅虎 2006年2月 Apache Hadoop项目正式启动,支持MapReduce和HDFS独立发展 2006年2月 雅虎的网格计算团队采用Hadoop 2006年4月 在188个节点上(每节点10GB)运行排序测试集需要47.9个小时) 2006年5月 雅虎建立了一个300个节点的Hadoop研究集群 2006年5月 在500个节点上运行排序测试集需要42个小时(硬件配置比4月份 的更好) 2006年11月 研究集群增加到600个节点 初识Hadoop 13
2006年12月 排序测试集在20个节点上运行1.8个小时,100个节点上运行3.3小 时,500个节点上运行5.2小时,900个节点上运行7.8个小时 2007年1月 研究集群增加到900个节点 2007年4月 研究集群增加到两个集群1000个节点 2008年4月 在900个节点上运行1TB排序测试集仅需209秒,成为全球最快 2008年10月 研究集群每天装载10TB的数据 2009年3月 17个集群共24000个节点 2009年4月 在每分钟排序中胜出,59秒内排序500GB(在1400个节点上)和173 分钟内排序100TB数据(在3400个节点上) 1.5 Apache Hadoop和Hadoop生态系统 尽管Hadoop因MapReduce及其分布式文件系统(HDFS,由NDFS改名而来) 而出名,但Hadoop这个名字也用于泛指一组相关的项目,这些相关项目都 使用这个基础平台进行分布式计算和海量数据处理。 本书提到的大多数核心项目都受Apache软件基金会(htp:/hadoop..apache.org 支持,该基金会对开源软件项目社区提供支持,包括最初的HTTP Server项 目。随着Hadoop生态系统的成长,新出现的项目越来越多,其中不乏一些 非Apache主管的项目,这些项目对Hadoop是很好的补充或提供一些更高 层的抽象。 下面简单提一下本书所提到的Hadoop项目: Common:一系列组件和接口,用于分布式文件系统和通用I/O(序 列化、Java RPC和持久化数据结构) AVro:一种序列化系统,用于支持高效、跨语言的RPC和持久化 数据存储 MapReduce:分布式数据处理模型和执行环境,运行于大型商用机 集群 ·HDFS:分布式文件系统,运行于大型商用机集群 Pg:数据流语言和运行环境,用以探究非常庞大的数据集。Pg运 行在MapReduce和HDFS集群上 Hive:一种分布式的、按列存储的数据仓库。Hive管理HDFS中 14 第1章
存储的数据,并提供基于SQL的查询语言(由运行时引擎翻译成 MapReduce作业)用以查询数据 HBase:一种分布式的、按列存储的数据库。HBase使用HDFS作 为底层存储,同时支持MapReduce的批量式计算和点查询(随机 读取) ZooKeeper:一种分布式的、可用性高的协调服务。ZooKeeper提 供分布式锁之类的基本服务用于构建分布式应用 Sqoop:该工具用于在结构化数据存储(如关系型数据库)和HDFS 之间高效批量传输数据 Oozie:该服务用于运行和调度Hadoop作业(如MapReduce,Pig, Hive及Sqoop作业) 1.6 Hadoop的发行版本 应该用哪个版本的Hadoop呢?当然,这个问题的答案总是随着时间而变 化,而且依赖于你所需要的特性。这里总结了现阶段Hadoop发行版本系列 的概要特征。 有一系列活跃的发行版本。1.x发行版本系列是0.20发行版本系列的延续, 并且包含有当前最稳定的Hadoop发行版本。这一系列中包含安全的 Kerberos认证,该安全认证避免了非授权用户访问Hadoop数据(可参见第9 章介绍的安全相关内容)。几乎所有集群运行的都是这些发行版本或扩展版 本(例如商业版本)。 0.22和2.x发行版本系列①目前还不是非常稳定(2012年初),但是在你读到 这本书的时候这些发行版本系列已经发生了变化,因为这些版本正被越来 越多的真实应用测试(请参考Apache Hadoop发行版页面了解最新状态)。 2.x包含如下主要的新特性。 ·在新的YARN系统(Yet Another Resource Negotiator)系统上构建了 一个新的运行环境,称为MapReduce2。YARN是一个通用的用于 运行分布式应用的资源管理器。MapReduce2替代了前期发行版本 中的“经典“运行环境。具体细节请参考61.2节。 ①在这本书出版的时候,Hadoop社区通过投票决定将0.23发行版本系列重新命名为 2.x发行版本系列。本书中使用的简写“1x之后的版本”指的是022和2.x(之前的 0.23)发行版本系列。 初识Hadoop 15