Hadoop:The Definitive Guide 谁说大象不能跳舞?! 第3版 挑战互联网规模的数据存储与分析! 修订版 Hadoop 权威指南 Tom White著 ladoop之父Doug Cutting序 华东师范大学数据科学与工程学院译 O'REILLY 清华大学出版社
O'Reilly Media,lnc.介绍 O'Reilly Media通过图书、杂志、在线服务、调查研究和会议等方式传播 创新知识。自1978年开始,O'Reilly一直都是前沿发展的见证者和推动 者。超级极客们正在开创着未来,而我们关注真正重要的技术趋势一通过 放大那些“细微的信号”来刺激社会对新科技的应用。作为技术社区中活 跃的参与者,O'Reilly的发展充满了对创新的倡导、创造和发扬光大。 O'Reilly为软件开发人员带来革命性的“动物书”;创建第一个商业网站 (GNN):组织了影响深远的开放源代码峰会,以至于开源软件运动以此命 名;创立了Make杂志,从而成为DIY革命的主要先锋,公司一如既往地 通过多种形式缔结信息与人的纽带。O'Reilly的会议和峰会集聚了众多超 级极客和高瞻远瞩的商业领袖,共同描绘出开创新产业的革命性思想。作 为技术人士获取信息的选择,O'Reilly现在还将先锋专家的知识传递给普 通的计算机用户。无论是通过书籍出版,还是在线服务或者面授课程,每 一项O'Reilly的产品都反映了公司不可动摇的理念一一信息是激发创新的 力量。 业界评论 “O'Reilly Radar博客有口皆碑。” -Wired “O'Reilly凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元 的业务。” Business 2.0 “O'Reilly Conference是聚集关键思想领袖的绝对典范.” -CRN “一本O'Reilly的书就代表一个有用、有前途、需要学习的主题。” -Irish Times “Tim是位特立独行的商人,他不光放眼于最长远、最广阔的视野并且切 实地按照Yogi Berra的建议去做了:‘如果你在路上遇到岔路口,走小路 (岔路)。’回顾过去Tim似乎每一次都选择了小路,而且有几次都是一闪 即瞬的机会,尽管大路也不错。” -Linux Journal
前言 数学科普作家马丁·加德纳Martin Gardner)曾在一次采访中谈到: “在我的世界里,只有微积分。这是我的专栏取得成功奥秘。我花了很多 时间才明白如何以大多数读者都能明白的方式将自己所知道的东西娓娓 道来。”回 这也是我对Hadoop的诸多感受。它的内部工作机制非常复杂,是一个集分 布式系统理论、实际工程和常识于一体的系统。而且,对门外汉而言, Hadoop更像是“天外来客”。 但Hadoop其实并没有那么让人费解,抽丝剥茧,我们来看它的“庐山真面 目”。它提供的用于构建分布式系统的每个工具(用于数据存储、数据分析 和协调处理)都非常简单。如果说这些工具有一个共同的主题,那就是它们 更抽象,对偶尔有大量数据需要存储的程序员、有大量数据需要分析的程 序员、有大量计算机需要管理的程序员同时却没有足够的时间、技能或者 不想成为分布式系统专家的程序员提供一套组件,使其能够利用Hadoop来 构建基础平台。 这样一个简单、通用的特性集,促使我在开始使用Hadoop时便明显感觉到 Hadoop真的值得推广。但最开始的时候(2006年初),安装、配置和Hadoop 应用编程是一门高深的艺术。之后,情况确实有所改善:文档增多了;示 ①1957年,加德纳在《科学美国人》杂志开设了“数学游戏”专栏,当然也介绍最新 的数学研究成果。这个专栏深受读者欢迎,一直延续到了1981年,它成就了加德 纳在趣味数学这个领域的大师地位 ②作者是《卫报》记者兼科学专栏作家Alex Bellos。此文发表于2008年5月31日,网 http://www.theguardian.com/science/2008/may/31/maths.science
例增多了,碰到问题时,可以向大量活跃的邮件列表发邮件求助。对新手 而言,最大的障碍是理解Hadoop有哪些能耐,它擅长什么,它如何使用。 这些问题使我萌发了写作本书的动机。 Apache Hadoop社区的发展来之不易。在过去的三年多时间里,Hadoop项 目开花结果并孵化出大约半打子项目。到目前,它在性能、可靠性、可扩 展性和可管理性方面都实现了巨大的飞跃。但是,为了让更多人采用 Hadoop,我认为我们要让Hadoop更好用。这需要创建更多新的工具,集成 更多的系统,创建新的、改进的API。我希望我自己能够参与,同时也希 望本书能够鼓励并吸引其他人也参与Hadoop项目。 说明 在文中讨论特定的Java类时,我常常会忽略包的名称以免啰嗦杂乱。如果 想知道一个类在哪个包内,要想查阅相关子项目的Hadoop Java API文档, 可以访问Apache Hadoop主页(http:/hadoop.Apache.org)。如果使用IDE编 程,可以充分利用其自动补全机制(也称“自动完成机制”)。 与此类似,尽管偏离传统的编码规范,但如果要导入同一个包的多个类, 程序可以使用星号通配符来节省空间(例如import org.apache.hadoop.io.*)。 本书中的示例代码可以从本书网站下载,网址为http:www.hadoopbook.com/。 可以根据网页上的指示获取本书示例所用的数据集以及运行本书示例的详 细说明、更新链接、额外的资源与我的博客。 本书特色内容 本书是这样组织的。第1章强调为什么需要Hadoop,然后概述项目发展 历史。第2章简要介绍MapReduce。第3章深入剖析Hadoop文件系统,特 别是HDFS。第4章包含Hadoop的基本I/O操作:数据完整性、压缩、序 列化及基于文件的数据结构。 接下来的第5章~第8章深入剖析MapReduce。第5章全景呈现了 MapReduce应用开发所涉及的具体步骤。第6章从用户的角度来看如何在 Hadoop中实现MapReduce。第7章主要包含MapReduce编程模型和 MapReduce可以使用的各种数据格式。第8章是MapReduce高级主题,包 括排序和数据连接。 X 前言
第9章和第10章主要面向Hadoop管理员,主要描述如何在Hadoop集群上 设置和维护运行HDFS和MapReduce。 第11章~第15章专门介绍在Hadoop上构建的特定项目或相关内容。第11 章和第I2章描述的是Pig和Hive,这两个分析平台构建在HDFS和 MapReduce之上,而第I3章、第14章和第15章分别介绍HBase、 ZooKeeper和Sqoop。 最后,第I6章收集了Apache Hadoop社区成员提供的一系列实例。 第2版新增内容 《Hadoop权威指南》(第2版)新增两章内容(第12章和第15章),分别介绍 Hive和Sqoop。第4章新增一个小节专门介绍Avro,第9章概述Hadoop 新增的安全特性,第I6章新增一个新的实例分析,介绍如何使用Hadoop 来分析海量网络图。 第2版继续介绍Apache Hadoop0.20系列发行版本,因为这是本书写作期 间最新、最稳定的发行版本。本书中有时会提到一些最新发行版本中的一 些新特性,但在首次介绍这些特性时,我会说明具体的Hadoop版本号。 第3版新增内容 第3版概述了Apache Hadoop 1.x(以前的0.20)系列发行版本,以及新近的 0.22和2x(以前的023)系列。除了少部分(文中有说明)例外,本书包含的 所有范例都在这些版本上运行过。第1章的1.6节将进一步描述每一个发行 版本的特性。 第3版的大部分范例代码都使用了新的MapReduce API。因为旧的API仍 然应用很广,所以文中在讨论新的API时我们还会继续讨论它,使用旧 API的对应范例代码可以到本书的配套网站下载。 Hadoop2.0最主要的变化是新增的MapReduce运行时MapReduce2,它建 立在一个新的分布式资源管理系统之上,该系统称为YARN。针对建立在 YARN之上的MapReduce,第3版增加了相关的介绍,第6章介绍它的工 作机制,第9章介绍如何运行它。 第3版还增加了更多对MapReduce的介绍,包括丰富的开发实践,比如用 前言 Xi
Maven打包MapReduce作业,设置用户的Java类路径,用MRUnit写测试 等(这些内容都请参见第5章)。第3版还深入介绍了一些特性,第8章介绍 输出committer和分布式缓存,第9章描述任务内存监控。我们还在第4章 新增了如何写MapReduce作业来处理Avro数据的相关介绍,在第5章介绍 如何在Oozie中运行一个简单的MapReduce工作流。 第3章的主题是HDFS,现在新增了对高可用性、联邦HDFS、新的 WebHDFS和HttpFS文件系统的介绍。 对Pig,Hive,Sqoop和ZooKeeper的相关介绍,在第3版中全部进行了相 应的扩展,广泛介绍其最新发行版本中的新特性和变化。 此外,第3版还对第2版进行了彻底的纠错、修订和优化。 本书采用的约定 本书采用以下排版约定。 斜体 用于表明新的术语、URL、电子邮件地址、文件名和文件扩展名。 等宽字体Consolas 用于程序清单,在正文段落中出现的程序元素(如变量或函数名)、数据 库、数据类型、环境变量、语句和关键字也采用这样的字体。 等宽字体Consolas+加粗 用于显示命令或应该由用户键入的其他文本。 等宽字体ConsoLas+斜体 表明这里的文本需要替换为用户提供的值或其他由上下文确定的值。 这个图标表示重要的指示、建议或通用的说明。 这个图标表示警告或需要注意。 xii 前言
示例代码的使用 本书的目的是帮助读者完成工作。通常情况下,可以在你的程序或文档中 使用本书中给出的代码。不必联系我们获得代码使用授权,除非你需要使 用大量的代码。例如,在写程序的时候引用几段代码不需要向我们申请许 可。但以光盘方式销售或重新发行O'Reilly书中的示例的确需要获得许 可。引用本书或引用本书中的示例代码来回答问题也不需要申请许可。但 是,如果要将本书中的大量范例代码加入你的产品文档,则需要申请许可。 我们欣赏引用时注明出处的做法,但不强求。引用通常包括书名、作者、 出版社和ISBN,例如“Hadoop:The Definitive Guide,Third Edition,by Tom White.Copyright 2013 Tom White,978-1-449-31152-0" 如果觉得使用示例代码的情况不属于前面列出的合理使用或许可范围,请 通过电子邮件联系我们,邮箱地址为permissions@oreilly..com。 Safari Books Online Safari Safari Books Online(www,safaribooksonline.com)是一个按需 定制的数字图书馆,以图书和视频的形式提供全球技术领 域和经管领域内知名作者的专业作品。专业技术人员、软件开发人员、网 页设计人员、商务人员和创意专家将Safari Books Online用作自己开展研 究、解决问题、学习和完成资格认证培训的重要来源。 Safari Books Online为组织机构、政府部门和个人提供广泛、灵活的产品组 合和定价方式。在这里,订阅者通过一个可以全文检索的数据库中就能够 访问数千种图书、培训视频和正式出版之前的书稿,这些内容提供商有 O'Reilly Media,Prentice Hall Professional,Addison-Wesley Professional, Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、 John Wiley&Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、 Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、 Jones&Bartlett、Course Technology及其他几十家出版社。欢迎访问Safari Books Online,了解更多详情。 前言 xiii
联系我们 对于本书,如果有任何意见或疑问,请通过以下地址联系出版商: 美国: O'Reilly Media,Inc 1005 Gravenstein Highway North Sebastopol,CA 95472 中国: 北京市西城区西直门南大街2号成铭大厦C座807室(100035) 奥莱利技术咨询(北京)有限公司 本书也有相关的网页,我们在上面列出了勘误表、范例以及其他一些信 息。网址如下: http:/www.oreilly..com/catalog/9781449311520(英文版) http:/www.oreilly..com.cn/book.php?bn=978-7-302-37085-7(中文版) 对本书做出评论或者询问技术问题,请发送E-mail至以下邮箱: bookquestions@oreilly.com 如果希望获得关于本书、会议、资源中心和O'Reilly的更多信息,请访问 以下网址: http://www.oreilly.com http://www.oreilly.com.cn 致谢 在本书写作期间,我仰赖于许多人的帮助,直接的或间接的。感谢Hadoop 社区,我从中学到很多,这样的学习仍将继续。 特别感谢Michael Stack和Jonathan Gray,HBase这一章的内容就是他们写 的。我还要感谢Adrian Woodhead,Marc de Palol,Joydeep Sen Sarma, Ashish Thusoo,Andrzej Biat ecki,Stu Hood,Chris K.Wensel Owen O'Malley,他们为第16章提供了实例学习。 感谢为草稿提出有用建议和改进建议的评审人:Raghu Angadi,Matt Biddulph,Christophe Bisciglia,Ryan Cox,Devaraj Das,Alex Dorman, xiv 前言
Chris Douglas,Alan Gates,Lars George,Patrick Hunt,Aaron Kimball, Peter Krey,Hairong Kuang,Simon Maxen,Olga Natkovich,Benjamin Reed,Konstantin Shvachko,Allen Wittenauer,Matei Zaharia Philip Zeyliger.。Ajay Anand组织本书的评审并使其顺利完成。Philip(“flip”) Komer帮助我获得了NCDC气温数据,使本书示例很有特色。特别感谢 Owen O'Malley和Arun C.Murthy,他们为我清楚解释了MapReduce中 shuffle的复杂过程。当然,如果有任何错误,得归咎于我。 对于第2版,我特别感谢Jeff Bean,Doug Cutting,Glynn Durham,Alan Gates,Jeff Hammerbacher,Alex Kozlov,Ken Krugler,Jimmy Lin,Todd Lipcon,Sarah Sproehnle,Vinithra Varadharajan和Ian Wrigley,感谢他们仔 细审阅本书,并提出宝贵的建议,同时也感谢对本书第1版提出勘误建议 的读者。我也想感谢Aaron Kimball对Sqoop所做的贡献和Philip (“flip”)Kromer对图处理实例分析所做的贡献。 对于第3版,我想感谢Alejandro Abdelnur,Eva Andreasson,Eli Collins, Doug Cutting,Patrick Hunt,Aaron Kimball,Aaron T.Myers,Brock Noland, Arvind Prabhakar,Ahmed Radwan和Tom Wheeler,感谢他们的反馈意见和 建议。Rob Weltman友善地对整本书提出了非常详细的反馈意见,这些意见 和建议使得本书终稿的质量得以更上一层楼。此外,我还要向所有提交第2 版勘误的读者表达最真挚的谢意。 特别感谢Doug Cutting对我的鼓励、支持、友谊以及他为本书所写的 序言。 我还要感谢在本书写作期间以对话和邮件方式进行交流的其他人。 在本书写到一半的时候,我加入了Cloudera,我想感谢我的同事,他们为 我提供了大量的帮助和支持,使我有充足的时间写书,并能及时交稿。 非常感谢我的编辑Mike Loukides及其O'Reilly Media的同事,他们在本书 的准备阶段为我提供了很多帮助。Mik一直为我答疑解惑、审读我的初稿 并帮助我如期完稿。 最后,写作是一项艰巨的任务,如果没有家庭一如既往地支持,我是不可 能完成的。我的妻子Eliane,她不仅操持着整个家庭,还协助我,参与本书 的审稿、编辑和跟进案例学习。还有我的女儿Emilia和Lottie,一直都非 常善解人意,期待我有更多时间好好陪陪她们。 前言 XV
目录 第1章初识Hadoop 1.1数据!数据! 12数据的存储与分析 …3 1.3 相较于其他系统的优势… 1.3.1关系型数据库管理系统 .5 13.2网格计算… …7 1.3.3志愿计算… 9 1.4 Hadoop发展简史.. 10 1.5 Apache Hadoop和Hadoop生态系统 14 1.6 Hadoop的发行版本… 15 1.6.1本书包含的内容 16 1.6.2兼容性… 17 第2章关于MapReduce …19 2.1气象数据集 .19 2.2使用Unix工具来分析数据.. .21 2.3使用Hadoop来分析数据… 23 2.3.lmap和reduce. …23 2.3.2 Java MapReduce............. .24 2.4横向扩展.… .33 2.4.1数据流. .34 2.4.2c0 mbiner函数… 37 2.4.3运行分布式的MapReduce作业 …39 2.5 Hadoop Streaming 40