书籍作者:汤姆 | ISBN:9787302465133 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:4905 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书结合理论和实践,由浅入深,全方位介绍了Hadoop这一高性能的海量数据处理和分析平台。全书5部分24章,第Ⅰ部分介绍Hadoop基础知识,主题涉及Hadoop、MapReduce、Hadoop分布式文件系统、YARN、Hadoop的I/O操作。第Ⅱ部分介绍MapReduce,主题包括MapReduce应用开发;MapReduce的工作机制、MapReduce的类型与格式、MapReduce的特性。第Ⅲ部分介绍Hadoop的运维,主题涉及构建Hadoop集群、管理Hadoop。第Ⅳ部分介绍Hadoop相关开源项目,主题涉及Avro、Parquet、Flume、Sqoop、Pig、Hive、Crunch、Spark、HBase、ZooKeeper。第Ⅴ部分提供了三个案例,分别来自医疗卫生信息技术服务商塞纳(Cerner)、微软的人工智能项目ADAM(一种大规模分布式深度学习框架)和开源项目Cascading(一个新的针对MapReduce的数据处理API)。
本书是一本专业、全面的Hadoop参考书和工具书,阐述了Hadoop生态圈的新发展和应用,程序员可以从中探索海量数据集的存储和分析,管理员可以从中了解Hadoop集群的安装和运维。
作者简介
TomWhite是杰出的Hadoop专家之一。自2007年2月以来,TomWhite一直是ApacheHadoop的提交者(committer),也是Apache软件基金会的成员。Tom是Cloudera的软件工程师,他是Cloudera的首批员工,对Apache和Cloudera做出了举足轻重的贡献。在此之前,他是一名独立的Hadoop顾问,帮助公司搭建、使用和扩展Hadoop。他是很多行业大会的专题演讲人,比如ApacheCon、OSCON和Strata。Tom在英国剑桥大学获得数学学士学位,在利兹大学获得科学哲学硕士学位。他目前与家人居住在威尔士。
译者简介
王海博士,解放军理工大学通信工程学院教授,博导,教研中心主任,长期从事无线自组网网络的设计与研发工作,主持国家自然科学基金、国家863计划课题等多项课题,近5年获军队科技进步二等奖1项,三等奖6项,作为di一发明人申请国家发明专利十余项,发表学术论文50余篇。
华东博士,现任南京医科大学计算机教研室教师,一直致力于计算机辅助教学的相关技术研究,陆续开发了人体解剖学网络自主学习考试平台、诊断学自主学习平台和面向执业医师考试的预约化考试平台等系统,并在各个学科得到广泛的使用,获得全国高等学校计算机课件评比一等奖和三等奖各一项。主编、副主编教材两部,获发明专利一项、软件著作权多项。
刘喻博士,长期从事软件开发、软件测试和软件工程化管理工作,目前任教于清华大学软件所。
吕粤海,长期从事军事通信网络技术研究与软件开发工作,先后通过华为光网络高级工程师认证、思科网络工程师认证。
前言
数学科普作家马丁·加德纳(MartinGardner)曾经在一次采访中谈到:
“在我的世界里,只有微积分。这是我的专栏取得成功的奥秘。我花了很多时间才明白如何以大多数读者都能明白的方式将自己所知道的东西娓娓道来。”①
这也是我对Hadoop的诸多感受。它的内部工作机制非常复杂,是一个集分布式系统理论、实际工程和常识于一体的系统。而且,对门外汉而言,Hadoop更像是“天外来客”。
但Hadoop其实并没有那么让人费解,抽丝剥茧,我们来看看它的“庐山真面目”。Hadoop提供的用于处理大数据的工具都非常简单。如果说这些工具有一个共同的主题,那就是它们更抽象,为(有大量数据需要存储和分析却没有足够的时间、技能或者不想成为分布式系统专家的)程序员提供一套组件,使其能够利用Hadoop来构建一个处理数据的基础平台。
这样一个简单、通用的特性集,促使我在开始使用Hadoop时便明显感觉到Hadoop真的值得推广。但最开始的时候(2006年初),安装、配置和Hadoop应用编程是一门高深的艺术。之后,情况确实有所改善:文档增多了;示例增多了;碰到问题时,可以向大量活跃的邮件列表发邮件求助。对新手而言,最大的障碍是理解Hadoop有哪些能耐,它擅长什么,它如何使用。这些问题使我萌发了写作本书的动机。
ApacheHadoop社区的发展来之不易。从本书的第1版发行以来,Hadoop项目如雨后春笋般发展兴旺。“大数据”已成为大家耳熟能详的名词术语。②当前,软件在可用性、性能、可靠性、可扩展性和可管理性方面都实现了巨大的飞跃。在Hadoop平台上搭建和运行的应用增长迅猛。事实上,对任何一个人来说,跟踪这些发展动向都很困难。但为了让更多的人采用Hadoop,我认为我们要让Hadoop更好用。这需要创建更多新的工具,集成更多的系统,创建新的增强型API。我希望自己能够参与,同时也希望本书能够鼓励并吸引其他人也参与Hadoop项目。
说明
在文中讨论特定的Java类时,我常常会忽略包的名称以免啰嗦杂乱。如果想知道一个类在哪个包内,可以查阅Hadoop或相关项目的JavaAPI文档(ApacheHadoop主页http://hadoop.apache.org上有链接可以访问)。如果使用IDE编程,其自动补全机制(也称“自动完成机制”)能够帮助你找到你需要的东西。
与此类似,尽管偏离传统的编码规范,但如果要导入同一个包的多个类,程序可以使用星号通配符来节省空间(例如importorg.apache.hadoop.io.*)。
本书中的示例代码可以从本书网站下载,网址为http://www.hadoopbook.com/。可以根据网页上的指示获取本书示例所用的数据集以及运行本书示例的详细说明、更新链接、额外的资源与我的博客。
第4版新增内容
第4版的主题是Hadoop2。Hadoop2系列发行版本是当前应用最活跃的系列,且包含Hadoop的最稳定的版本。
第4版新增的章节包括YARN(第4章)、Parquet(第13章)、Flume(第14章)、Crunch(第18章)和Spark(第19章)。此外,为了帮助读者更方便地阅读本书,第1章新增了一节“本书包含的内容”(参见1.7节)。
第4版包括两个新的实例学习(第22章和第23章):一个是关于Hadoop如何应用于医疗健康系统,另一个是关于将Hadoop技术如何应用于基因数据处理。旧版本中的实例学习可以在线查到,网址为http:/bit.ly/hadoop_tdg_prev。
为了和Hadoop最新发行版本及其相关项目同步,第4版对原有章节进行了修订、更新和优化。
第3版新增内容
第3版概述ApacheHadoop1.x(以前的0.20)系列发行版本,以及新近的0.22和2.x(以前的0.23)系列。除了少部分(文中有说明)例外,本书包含的所有范例都在这些版本上运行过。
第3版的大部分范例代码都使用了新的MapReduceAPI。因为旧的API仍然应用很广,所以文中在讨论新的API时我们还会继续讨论它,使用旧API的对应范例代码可以到本书的配套网站下载。
Hadoop2.0最主要的变化是新增的MapReduce运行时MapReduce2,它建立在一个新的分布式资源管理系统之上,该系统称为YARN。针对建立在YARN之上的MapReduce,第3版增加了相关的介绍,包括它的工作机制(第7章)及如何运行(第10章)。
第3版还增加了更多对MapReduce的介绍,包括丰富的开发实践,比如用Maven打包MapReduce作业,设置用户的Java类路径,用MRUnit写测试等(这些内容都请参见第6章)。第3版还深入介绍了一些特性,如输出committer和分布式缓存(第9章),任务内存监控(第10章)。第3版还新增了两小节内容,一节是关于如何写MapReduce作业来处理Avro数据(参见第12章),另一节是关于如何在Oozie中运行一个简单的MapReduce工作流(参见第6章)。
关于HDFS的章节(第3章),新增了对高可用性、联邦HDFS、新的WebHDFS和HttpFS文件系统的介绍。
对Pig,Hive,Sqoop和ZooKeeper的相关介绍,第3版全部进行了相应的扩展,广泛介绍其最新发行版本中的新特性和变化。
此外,第3版还对第2版进行了彻底的更新、修订和优化。
第2版新增内容
《Hadoop权威指南》(第2版)新增两章内容,分别介绍Sqoop和Hive(第15章和第17章),新增一个小节专门介绍Avro(参见第12章),补充了关于Hadoop新增安全特性的介绍(参见第10章)以及一个介绍如何使用Hadoop来分析海量网络图的新实例分析。
第2版继续介绍ApacheHadoop0.20系列发行版本,因为当时最新、最稳定的发行版本。书中有时会提到一些最新发行版本中的一些新特性,但在首次介绍这些特性时,有说明具体的Hadoop版本号。
本书采用的约定
本书采用以下排版约定。
斜体
用于表明新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体Consolas
用于程序清单,在正文段落中出现的程序元素(如变量或函数名)、数据库、数据类型、环境变量、语句和关键字也采用这样的字体。
等宽字体Consolas+加粗
用于显示命令或应该由用户键入的其他文本。
等宽字体Consolas+斜体
表明这里的文本需要替换为用户提供的值或其他由上下文确定的值。
这个图标表示通用的说明。
这个图标表示重要的指示或建议。
这个图标表示警告或需要注意的问题。
示例代码的使用
本书的补充材料(代码、示例及练习等)可以从本书网站(http://www.hadoopbook.com)或GitHub(https://github.com/tomwhite/hadoop-book/)下载。
本书的目的是帮助读者完成工作。通常情况下,可以在你的程序或文档中使用本书中给出的代码。不必联系我们获得代码使用授权,除非你需要使用大量的代码。例如,在写程序的时候引用几段代码不需要向我们申请许可。但以光盘方式销售或重新发行O’Reilly书中的示例的确需要获得许可。引用本书或引用本书中的示例代码来回答问题也不需要申请许可。但是,如果要将本书中的大量范例代码加入你的产品文档,则需要申请许可。
我们欣赏你在引用时注明出处,但不强求。引用通常包括书名、作者、出版社和ISBN,如“Hadoop:TheDefinitiveGuide,FourthEdition,byTomWhite(O’Reilly).Copyright2015TomWhite,978-1-491-90163-2”。
如果觉得使用示例代码的情况不属于前面列出的合理使用或许可范围,请通过电子邮件联系我们,邮箱地址为[email protected]。
SafariBooksOnline
SafariBooksOnline(www.safaribooksonline.com)是一个按需定制的数字图书馆,以图书和视频的形式提供全球技术领域和经管领域内知名作者的专业作品。
专业技术人员、软件开发人员、网页设计人员、商务人员和创意专家将SafariBooksOnline用作自己开展研究、解决问题、学习和完成资格认证培训的重要来源。
SafariBooksOnline为企业、政府部门、教育机构和个人提供广泛、灵活的计划和定价。
在这里,成员们通过一个可以全文检索的数据库中就能够访问数千种图书、培训视频和正式出版之前的书稿,这些内容提供商有O'ReillyMedia、PrenticeHallProfessional、Addison-WesleyProfessional、MicrosoftPress、Sams、Que、PeachpitPress、FocalPress、CiscoPress、JohnWiley&Sons、Syngress、MorganKaufmann、IBMRedbooks、Packt、AdobePress、FTPress、Apress、Manning、NewRiders、McGraw-Hill、Jones&Bartlett、CourseTechnology及其他上百家出版社。欢迎访问SafariBooksOnline,了解更多详情。
联系我们
对于本书,如果有任何意见或疑问,请通过以下地址联系出版商:
美国:
O’ReillyMedia,Inc.
1005GravensteinHighwayNorth
Sebastopol,CA95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
本书也有相关的网页,我们在上面列出了勘误表、范例以及其他一些信息。网址如下:
http://bit.ly/hadoop_tdg_4e(英文版)
http://www.oreilly.com.cn/book.php?bn=978-7-302-46513-3(中文版)
对本书做出评论或者询问技术问题,请发送E-mail至以下邮箱:
如果希望获得关于本书、会议、资源中心和O’Reilly的更多信息,请访问以下网址:
http://www.oreilly.com
http://www.oreilly.com.cn
致谢
在本书写作期间,我仰赖于许多人的帮助,直接的或间接的。感谢Hadoop社区,我从中学到很多,这样的学习仍将继续。
特别感谢MichaelStack和JonathanGray,HBase这一章的内容就是他们写的。我还要感谢AdrianWoodhead,MarcdePalol,JoydeepSenSarma,AshishThusoo,AndrzejBia?ecki,StuHood,ChrisK.Wensel和OwenO’Malley,他们提供了学习实例。
感谢为草稿提出有用建议和改进建议的评审人:RaghuAngadi,MattBiddulph,ChristopheBisciglia,RyanCox,DevarajDas,AlexDorman,ChrisDouglas,AlanGates,LarsGeorge,PatrickHunt,AaronKimball,PeterKrey,HairongKuang,SimonMaxen,OlgaNatkovich,BenjaminReed,KonstantinShvachko,AllenWittenauer,MateiZaharia和PhilipZeyliger。AjayAnand组织本书的评审并使其顺利完成。Philip(“flip”)Komer帮助我获得了NCDC气温数据,使本书示例很有特色。特别感谢OwenO’Malley和ArunC.Murthy,他们为我清楚解释了MapReduce中shuffle的复杂过程。当然,如果有任何错误,得归咎于我。
对于第2版,我特别感谢JeffBean,DougCutting,GlynnDurham,AlanGates,JeffHammerbacher,AlexKozlov,KenKrugler,JimmyLin,ToddLipcon,SarahSproehnle,VinithraVaradharajan和IanWrigley,感谢他们仔细审阅本书,并提出宝贵的建议,同时也感谢对本书第1版提出勘误建议的读者。我也想感谢AaronKimball对Sqoop所做的贡献和Philip(“flip”)Kromer对图处理实例分析所做的贡献。
对于第3版,我想感谢AlejandroAbdelnur,EvaAndreasson,EliCollins,DougCutting,PatrickHunt,AaronKimball,AaronT.Myers,BrockNoland,ArvindPrabhakar,AhmedRadwan和TomWheeler,感谢他们的反馈意见和建议。RobWeltman友善地对整本书提出了非常详细的反馈意见,这些意见和建议使得本书终稿的质量得以更上一层楼。此外,我还要向提交第2版勘误的所有读者表达最真挚的谢意。
对于第4版,我想感谢JodokBatlogg,MeghanBlanchette,RyanBlue,JarekJarcecCecho,JulesDamji,DennisDawson,MatthewGast,KarthikKambatla,JulienLeDem,BrockNoland,SandyRyza,AkshaiSarma,BenSpivey,MichaelStack,KateTing,JoshWalter,JoshWills和AdrianWoodhead,感谢他们所有人非常宝贵的审阅反馈。RyanBrush,MicahWhitacre和MattMassiekindly为第4版友情提供新的实例学习。再次感谢提交勘误的所有读者。
特别感谢DougCutting对我的鼓励、支持、友谊以及他为本书所写的序。
我还要感谢在本书写作期间以对话和邮件方式进行交流的其他人。
在本书第1版写到一半的时候,我加入了Cloudera,我想感谢我的同事,他们为我提供了大量的帮助和支持,使我有充足的时间好好写书,并能及时交稿。
非常感谢我的编辑MikeLoukides、MeghanBlanchette及其O’ReillyMedia的同事,他们在本书的准备阶段为我提供了很多帮助。Mike和Meghan一直为我答疑解惑、审读我的初稿并帮助我如期完稿。
最后,写作是一项艰巨的任务,如果没有家人一如既往地支持,我是不可能完成这本的。我的妻子Eliane,她不仅操持着整个家庭,还协助我,参与本书的审稿、编辑和跟进案例学习。还有我的女儿Emilia和Lottie,她们一直都非常理解并支持我的工作,我期待有更多时间好好陪陪她们。
①摘自“Thescienceoffun”,网址为http://bit.ly/science_of_fun。此文2008年5月31日发表于《卫报》。
②术语“大数据”在2013年被收入《牛津英语辞典》(OxfordEnglishDictionary),网址为http://bit.ly/6_13_oed_update。
第Ⅰ部分Hadoop基础知识
第1章初识Hadoop3
1.1数据!数据!3
1.2数据的存储与分析5
1.3查询所有数据6
1.4不仅仅是批处理7
1.5相较于其他系统的优势8
1.6ApacheHadoop发展简史12
1.7本书包含的内容16
第2章关于MapReduce19
2.1气象数据集19
2.2使用Unix工具来分析数据21
2.3使用Hadoop来分析数据22
2.4横向扩展31
2.5HadoopStreaming37
第3章Hadoop分布式文件系统42
3.1HDFS的设计42
3.2HDFS的概念44
3.3命令行接口50
3.4Hadoop文件系统52
3.5Java接口56
3.6数据流68
3.7通过distcp并行复制76
第4章关于YARN78
4.1剖析YARN应用运行机制79
4.2YARN与MapReduce1相比82
4.3YARN中的调度85
4.4延伸阅读95
第5章Hadoop的I/O操作96
5.1数据完整性96
5.2压缩99
5.3序列化109
5.4基于文件的数据结构127
第Ⅱ部分关于MapReduce
第6章MapReduce应用开发141
6.1用于配置的API142
6.2配置开发环境144
6.3用MRUnit来写单元测试152
6.4本地运行测试数据156
6.5在集群上运行160
6.6作业调优174
6.7MapReduce的工作流176
第7章MapReduce的工作机制184
7.1剖析MapReduce作业运行
机制184
7.2失败191
7.3shuffle和排序195
7.4任务的执行201
第8章MapReduce的
类型与格式207
8.1MapReduce的类型207
8.2输入格式218
8.3输出格式236
第9章MapReduce的特性243
9.1计数器243
9.2排序252
9.3连接264
9.4边数据分布270
9.5MapReduce库类276
第Ⅲ部分Hadoop的操作
第10章构建Hadoop集群279
10.1集群规范280
10.2集群的构建和安装284
10.3Hadoop配置288
10.4安全性305
10.5利用基准评测程序测试
Hadoop集群311
第11章管理Hadoop314
11.1HDFS314
11.2监控327
11.3维护329
第Ⅳ部分Hadoop相关开源项目
第12章关于Avro341
12.1Avro数据类型和模式342
12.2内存中的序列化和
反序列化特定API347
12.3Avro数据文件349
12.4互操作性351
12.5模式解析352
12.6排列顺序354
12.7关于AvroMapReduce356
12.8使用AvroMapReduce
进行排序359
12.9其他语言的Avro362
第13章关于Parquet363
13.1数据模型364
13.2Parquet文件格式367
13.3Parquet的配置368
13.4Parquet文件的读/写369
13.5ParquetMapReduce374
第14章关于Flume377
14.1安装Flume378
14.2示例378
14.3事务和可靠性380
14.4HDFSSink382
14.5扇出385
14.6通过代理层分发387
14.7Sink组391
14.8Flume与应用程序的集成395
14.9组件编目395
14.10延伸阅读397
第15章关于Sqoop398
15.1获取Sqoop398
15.2Sqoop连接器400
15.3一个导入的例子401
15.4生成代码404
15.5深入了解数据库导入405
15.6使用导入的数据409
15.7导入大对象412
15.8执行导出414
15.9深入了解导出功能416
15.10延伸阅读419
第16章关于Pig420
16.1安装与运行Pig421
16.2示例425
16.3与数据库进行比较428
16.4PigLatin429
16.5用户自定义函数446
16.6数据处理操作455
16.7Pig实战465
16.8延伸阅读468
第17章关于Hive469
17.1安装Hive470
17.2示例472
17.3运行Hive473
17.4Hive与传统数据库相比480
17.5HiveQL483
17.6表488
17.7查询数据501
17.8用户定义函数508
17.9延伸阅读516
第18章关于Crunch517
18.1示例518
18.2Crunch核心API521
18.3管线执行537
18.4Crunch库545
18.5延伸阅读547
第19章关于Spark548
19.1安装Spark549
19.2示例549
19.3弹性分布式数据集555
19.4共享变量564
19.5剖析Spark作业运行机制565
19.6执行器和集群管理器570
19.7延伸阅读574
第20章关于HBase575
20.1HBase基础575
20.2概念576
20.3安装581
20.4客户端584
20.5创建在线查询应用589
20.6HBase和RDBMS的比较598
20.7Praxis601
20.8延伸阅读602
第21章关于ZooKeeper604
21.1安装和运行ZooKeeper605
21.2示例607
21.3ZooKeeper服务615
21.4使用ZooKeeper来构建
应用629
21.5生产环境中的ZooKeeper640
21.6延伸阅读643
第Ⅴ部分案例学习
第22章医疗公司塞纳(Cerner)
的可聚合数据647
22.1从多CPU到语义集成647
22.2进入ApacheCrunch648
22.3建立全貌649
22.4集成健康医疗数据651
22.5框架之上的可组合性654
22.6下一步655
第23章生物数据科学:
用软件拯救生命657
23.1DNA的结构659
23.2遗传密码:将DNA字符
转译为蛋白质660
22.3将DNA想象成源代码661
23.4人类基因组计划和参考
基因组663
22.5DNA测序和比对664
23.6ADAM,一个可扩展的
基因组分析平台666
23.7使用Avro接口描述语言进行
自然语言编程666
23.8使用Parquet进行面向列的
存取668
23.9一个简单例子:用Spark和
ADAM做k-mer计数669
23.10从个性化广告到个性化
医疗672
23.11联系我们673
第24章开源项目Cascading674
24.1字段、元组和管道675
24.2操作678
24.3Taps,Schemes和Flows680
24.4Cascading实践应用681
24.5灵活性684
24.6ShareThis中的Hadoop和
Cascading685
24.7总结689
附录A安装ApacheHadoop691
附录B关于CDH697
附录C准备NCDC气象数据699
附录D新版和旧版Java
MapReduceAPI702