第1章 初识Hadoop 在古时候,人们用牛来拉重物。当一头牛拉不动一根圆木时,人 们从来没有考虑过要培育更强壮的牛。同理,我们也不该想方设 法打造超级计算机,而应该千方百计综合利用更多计算机来解决 问题。 一格蕾斯·霍珀(Grace Hopper) 1.1数据!数据! 我们生活在这个数据大爆炸的时代,很难估算全球电子设备中存储的数据 总共有多少。国际数据公司(DC)曾经发布报告称,2006年数字世界(digital universe)项目统计得出全球数据总量为0.18ZB并预测在2011年将达到 1.8ZB。o1ZB等于1021字节,等于1000EB(exabytes),1000000PB (petabytes),等于大家更熟悉的I0亿TB(terrabytes)l这相当于全世界每人 一个硬盘中保存的数据总量! 数据“洪流”有很多来源。以下面列出的为例: ·纽约证交所每天产生的交易数据多达1TB ①Gantz等人2008年3月发表的文章“The Diverse and Exploding Digital Universe'" (纷繁多样并不断膨胀的数字世界),网址为http:/∥china.emc.com/collateral∥analyst- reports/expanding-digital-idc-white-paper pdf. http://www.intelligententerprise.com/showArticle.jhtml?articlelD=207800705:http://mashable.com/ 2008/10/15/facebook-10-billion-photos/:http://blog.familytreemagazine.com/insider/ Inside+Ancestrycoms+TopSecret+Data+Center.aspx:http://www.archive.org/about/faqs.php: http://www.interactions.org/cms/?pid=1027032
·脸谱网(Facebook)存储的照片约100亿张,存储容量约为1PB 家谱网站Ancestry.com存储的数据约为2.5PB 互联网档案馆(The Internet Archive)存储的数据约为2PB,并以每 月至少20TB的速度持续增长 瑞士日内瓦附近的大型强子对撞机每年产生的数据约为15PB 还有其他大量的数据。但是你可能会想它对自己又有哪些影响呢?地球人 都知道,大部分数据都严密锁存在一些大型互联网公司(如搜索引擎公司)或 科学机构与金融机构中。难道所谓的“大数据”只影响小机构和个人? 我个人是这样认为的。以照片为例,我妻子的爷爷是一个骨灰级的摄影爱 好者。在成年之后,他一直都在拍照。他的整个相册,包括普通胶片、幻 灯片、35mm胶片,在扫描成高分辨率的图片之后,大约有10GB。相比之 下,在2008年,我家用数码相机拍摄的照片总共有5GB。对照爷爷的照 片生成速度,我家是他老人家的35倍!并且,而且这个速度还在不断增长 中,因为现在拍照片真的是越来越容易了。 有一种情况更普遍,个人产生的数据正在快速增长。微软研究院的 MyLifeBits(http://research.microsoft.com/enus/projects/mylifebits/ default.aspx)显示,在不久的将来,个人信息档案将日益普及。MyLifeBits 的一个实验是获取和保存个人的对外联系情况(包括电话、邮件和文件),供 日后存取。收集的数据中包括每分钟拍摄的照片等,数据量每月约为 1IGB。当存储成本急剧下降以至于可以存储音频和视频时,MyLifeBits项 目在未来的存储的数据量将是现在的很多倍。 保存个人成长过程中产生的所有数据似乎逐渐成为主流,但更重要的是, 计算机产生的数据可能远远超过我们个人所产生的。机器日志、RFID检测 仪、传感器网络、车载GPS和零售交易数据等一所有这些都将产生巨量 的数据。 在网上公开发布的数据也在逐年增加。组织或企业,要想在未来取得成 功,不仅需要管理好自己的数据,更需要从其他组织或企业的数据中获取 有价值的信息。 这方面的先锋有Amazon Web Services(http:/∥aws.amazon.com/publicdatasets)、 ①编注:更多详细介绍可以参见阮一峰的博客文章“微软的MyLifeBits项目”,网址 http://www.ruanyifeng.com/blog/2007/12/mylifebits.html 2 第1章
Infochimps.org(http://infochimps.org/)theinfo.org(http://theinfo.org), 所发布的共享数据集,正在促进信息共享(information commons),供所有人 自由下载和分析(或者只需要支付合理的价格通过AWS平台来共享)。不 同来源的信息在经过混搭和处理之后,会带来意外的效果和我们今天难以 想象的应用。 以Astrometry.net(http:/∥astrometry..net)为例,主要查看和分析Flickr网站上 星空机器人小组所拍摄的星空照片。它对每一张照片进行分析并能辨别出 它来自星空或其他天体(例如恒星和银河系等)的哪一部分。虽然这项研究尚 处于试验阶段,但也表明如果可用的数据足够多(在本例中,为加有标签的 图片数据),通过它们而产生的后续应用也许会超乎这些拍照片的人最初的 想象(图片分析)。 有句话说得好:“大数据胜于好算法。”意思是说对于某些应用(譬如根 据以往的偏好来推荐电影和音乐),不论算法有多牛,基于小数据的推荐效 果往往都不如基于大量可用数据的一般算法的推荐效果。① 现在,我们已经有了大量数据,这是个好消息。但不幸的是,我们必须想 方设法好好地存储和分析这些数据。 1.2数据的存储与分析 我们遇到的问题很简单:在硬盘存储容量多年来不断提升的同时,访问速 度(硬盘数据读取速度)却没有与时俱进。1990年,一个普通硬盘可以存储 1370MB数据,传输速度为4.4MB/s”,因此只需要5分钟就可以读完整个 硬盘中的数据。20年过去了,1TB的硬盘已然成为主流,但其数据传输速 度约为100MB/s,读完整个硬盘中的数据至少得花2.5个小时。 读完整个硬盘中的数据需要更长时间,写入数据就别提了。一个很简单的 ①引自Anand Rajaraman发表的文章“Netflix Challenge”(Negfix挑战大赛),网址为 http:/∥anand.ypepad.com/datawocky/2008/03more-data-sual.html。在这个挑战大赛中, Ntf1ix公司公开自己的用户评分数据,让研究者根据这些数据对用户没有看过的电 影预测评分,谁最先比现有系统好10%,谁就能赢得100万美元的奖金。AIon Halevy,Peter Norvig(谷歌研究主管)和Fernando Pereira在他们的一篇文章中也提 出了类似的观点,题为“The Unreasonable Effectiveness of Data'”(数据的非理性效 果),发表于IEEE Intelligent Systems2009年3/4月合f刊。 ②这些规格对应的是希捷的ST-41600n硬盘。 初识Hadoop 3
减少读取时间的办法是同时从多个硬盘上读数据。试想,如果我们有100 个硬盘,每个硬盘存储1%的数据,并行读取,那么不到两分钟就可以读完 所有数据。 仅使用硬盘容量的1%似乎很浪费。但是我们可以存储100个数据集,每个 数据集1TB,并实现共享硬盘的读取。可以想象,用户肯定很乐于通过硬 盘共享来缩短数据分析时间:并且,从统计角度来看,用户的分析工作都 是在不同时间点进行的,所以彼此之间的干扰并不太大。 虽然如此,但要对多个硬盘中的数据并行进行读写数据,还有更多问题要 解决。第一个需要解决的是硬件故障问题。一旦开始使用多个硬件,其中 个别硬件就很有可能发生故障。为了避免数据丢失,最常见的做法是复制 (replication):系统保存数据的复本(replica),一旦有系统发生故障,就可以 使用另外保存的复本。例如,冗余硬盘阵列(RAID)就是按这个原理实现 的,另外,Hadoop的文件系统(HDFS,Hadoop Distributed FileSystem)也是 一类,不过它采取的方法稍有不同,详见后文的描述。 第二个问题是大多数分析任务需要以某种方式结合大部分数据来共同完成 分析,即从一个硬盘读取的数据可能需要与从另外99个硬盘中读取的数据 结合使用。各种分布式系统允许结合不同来源的数据进行分析,但保证其 正确性是一个非常大的挑战。MapReduce提出一个编程模型,该模型抽象 出这些硬盘读写问题并将其转换为对一个数据集(由键值对组成)的计算。后 文将详细讨论这个模型,这样的计算由map和reduce两部分组成,而且只 有这两部分提供对外的接口。与HDFS类似,MapReduce自身也有很高的 可靠性。 简而言之,Hadoop为我们提供了一个可靠的共享存储和分析系统。HDFS 实现数据的存储,MapReduce实现数据的分析和处理。虽然Hadoop还有其 他功能,但HDFS和MapReduce是它的核心价值。 1.3 相较于其他系统的优势 MapReduce看似采用了一种蛮力方法。每个查询需要处理整个数据集或至 少一个数据集的绝大部分。但反过来想,这也正是它的能力。MapReduce 是一个批量查询处理器,能够在合理的时间范围内处理针对整个数据集的 动态查询。它改变了我们对数据的传统看法,解放了以前只是保存在磁带 和硬盘上的数据。它让我们有机会对数据进行创新。以前需要很长时间处 第1章
理才能获得结果的问题,到现在变得顷刻之间就迎刃而解,同时还可以引 发新的问题和新的见解。 例如,Rackspace公司的邮件部门Mailtrust就用Hadoop来处理邮件日志。 他们写动态查询,想借此找出用户的地理分布。他们是这么描述的:“这 些数据非常有用,我们每月运行一次MapReduce任务来帮助我们决定哪些 Rackspace数据中心需要添加新的邮件服务器。” 通过整合好几百GB的数据,用MapReduce来分析这些数据,Rackspace的 工程师从中发现了以前从来没有注意到的数据,甚至还运用这些信息来改 善了现有的服务。第I6章将详细介绍Rackspace公司内部是如何使用 Hadoop的。 1.3.1关系型数据库管理系统 为什么不能用数据库来对大量硬盘上的大规模数据进行批量分析呢?我们 为什么需要MapReduce? 这两个问题的答案来自于计算机硬盘的另一个发展趋势:寻址时间的提升 远远不敌于传输速率的提升。寻址是将磁头移动到特定硬盘位置进行读写 操作的过程。它是导致硬盘操作延迟的主要原因,而传输速率取决于硬盘 的带宽。 如果数据访问模式中包含大量的硬盘寻址,那么读取大量数据集就必然会 花更长的时间(相较于流数据读取模式,流读取主要取决于传输速率)。另一 方面,如果数据库系统只更新一小部分记录,那么传统的B树就更有优势 (关系型数据库中使用的一种数据结构,受限于寻址的比例)。但数据库系统 如果有大量数据更新时,B树的效率就明显落后于MapReduce,因为需要使 用“排序/合并“(sort/merge)来重建数据库。 在许多情况下,可以将MapReduce视为关系型数据库管理系统的补充。两 个系统之间的差异如表1-1所示。 MapReduce比较适合以批处理方式处理需要分析整个数据集的问题,尤其 是动态分析。RDBMS适用于点查询(point query)和更新,数据集被索引之 后,数据库系统能够提供低延迟的数据检索和快速的少量数据更新。 MapReduce适合一次写入、多次读取数据的应用,关系型数据库则更适合 初识Hadoop 5