Hadoop权威指南:大数据的存储与分析》

网友投稿 1088 2022-05-29

Hadoop权威指南

大数据的存储与分析(第4版)

Hadoop: The Definitive Guide Storage and Analysis at Internet Scale

Tom White  著

王  海   华  东   刘  喻   吕粤海  译

BeijingCambridgeFarnhamKölnSebastopol***

O’Reilly Media, Inc. 授权清华大学出版社出版

O’Reilly Media, Inc.介绍

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是一位特立独行的人,他不光放眼于最长远、最广阔的视野并且切实地按照尤吉·贝拉的建议去做了:‘如果你在路上遇到岔路口,就选择走小路。’回顾过去Tim 似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。”

——Linux Journal

推荐序一

Doug Cutting@加州院内小屋

Hadoop起源于Nutch项目。我们几个人有一段时间一直在尝试构建一个开源的Web搜索引擎,但始终无法有效地将计算任务分配到多台计算机上,即使就只是屈指可数的几台。直到谷歌发表GFS和MapReduce的相关论文之后,我们的思路才清晰起来。他们设计的系统已经可以精准地解决我们在Nutch项目中面临的困境。于是,我们(两个半天工作制的人)开始尝试重建这些系统,并将其作为Nutch的一部分。

我们终于让Nutch可以在20台机器上平稳运行,但很快又意识一点:要想应对大规模的Web数据计算,还必须得让Nutch能在几千台机器上运行,不过这个工作远远不是两个半天工作制的开发人员能够搞定的。

差不多就在那个时候,雅虎也对这项技术产生了浓厚的兴趣并迅速组建了一个开发团队。我有幸成为其中一员。我们剥离出Nutch的分布式计算模块,将其称为“Hadoop”。在雅虎的帮助下,Hadoop很快就能够真正处理海量的Web数据了。

从2006年起,Tom White就开始为Hadoop做贡献。很早以前,我便通过他的一篇非常优秀的Nutch论文认识了他。在这篇论文中,他以一种优美的文风清晰地阐述复杂的思路。很快,我还得知他开发的软件一如他的文笔,优美易懂。

从一开始,Tom对Hadoop所做的贡献就体现出他对用户和项目的关注。与大多数开源贡献者不同,Tom并没有兴致勃勃地调整系统使其更符合自己个人的需要,而是尽可能地使其方便所有人使用。

最开始,Tom专攻如何使Hadoop在亚马逊的EC2和S3服务上高效运行。随后,他转向解决更广泛的各种各样的难题,包括如何改进MapReduce API,如何增强网站特色,如何精心构思对象序列化框架,如此等等,不一而举。在所有这些工作中,Tom都非常清晰、准确地阐明了自己的想法。在很短的时间里,Tom就赢得大家的认可,拥有Hadoop提交者(committer)的权限并很快顺理成章地成为Hadoop项目管理委员会的成员。

现在的Tom,是Hadoop开发社区中受人尊敬的资深成员。他精通Hadoop项目的若干个技术领域,但他更擅长于Hadoop的普及,使其更容易理解和使用。

基于我对Tom的这些了解,所以当我得知Tom打算写一本Hadoop的书之时,别提有多高兴了。是的,谁比他更有资格呢?!现在,你们有机会向这位年青的大师学习Hadoop,不单单是技术,还有一些必知必会的常识,以及他化繁为简、通俗易懂的写作风格。

前言

数学科普作家马丁·加德纳(Martin Gardner)曾经在一次采访中谈到:

“在我的世界里,只有微积分。这是我的专栏取得成功的奥秘。我花了很多时间才明白如何以大多数读者都能明白的方式将自己所知道的东西娓娓道来。” [①]

这也是我对Hadoop的诸多感受。它的内部工作机制非常复杂,是一个集分布式系统理论、实际工程和常识于一体的系统。而且,对门外汉而言,Hadoop更像是“天外来客”。

但Hadoop其实并没有那么让人费解,抽丝剥茧,我们来看看它的“庐山真面目”。Hadoop提供的用于处理大数据的工具都非常简单。如果说这些工具有一个共同的主题,那就是它们更抽象,为(有大量数据需要存储和分析却没有足够的时间、技能或者不想成为分布式系统专家的)程序员提供一套组件,使其能够利用Hadoop来构建一个处理数据的基础平台。

这样一个简单、通用的特性集,促使我在开始使用Hadoop时便明显感觉到Hadoop真的值得推广。但最开始的时候(2006年初),安装、配置和Hadoop应用编程是一门高深的艺术。之后,情况确实有所改善:文档增多了;示例增多了;碰到问题时,可以向大量活跃的邮件列表发邮件求助。对新手而言,最大的障碍是理解Hadoop有哪些能耐,它擅长什么,它如何使用。这些问题使我萌发了写作本书的动机。

Apache Hadoop社区的发展来之不易。从本书的第1版发行以来,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/。可以根据网页上的指示获取本书示例所用的数据集以及运行本书示例的详细说明、更新链接、额外的资源与我的博客。

第4版新增内容

第4版的主题是Hadoop 2。Hadoop 2系列发行版本是当前应用最活跃的系列,且包含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版概述Apache Hadoop 1.x(以前的0.20)系列发行版本,以及新近的0.22和2.x(以前的0.23)系列。除了少部分(文中有说明)例外,本书包含的所有范例都在这些版本上运行过。

第3版的大部分范例代码都使用了新的MapReduce API。因为旧的API仍然应用很广,所以文中在讨论新的API时我们还会继续讨论它,使用旧API的对应范例代码可以到本书的配套网站下载。

Hadoop 2.0最主要的变化是新增的MapReduce运行时MapReduce 2,它建立在一个新的分布式资源管理系统之上,该系统称为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版继续介绍Apache Hadoop 0.20系列发行版本,因为当时最新、最稳定的发行版本。书中有时会提到一些最新发行版本中的一些新特性,但在首次介绍这些特性时,有说明具体的Hadoop版本号。

示例代码的使用

本书的补充材料(代码、示例及练习等)可以从本书网站(http://www.hadoopbook.com)或GitHub(https://github.com/tomwhite/hadoop-book/)下载。

本书的目的是帮助读者完成工作。通常情况下,可以在你的程序或文档中使用本书中给出的代码。不必联系我们获得代码使用授权,除非你需要使用大量的代码。例如,在写程序的时候引用几段代码不需要向我们申请许可。但以光盘方式销售或重新发行O’Reilly书中的示例的确需要获得许可。引用本书或引用本书中的示例代码来回答问题也不需要申请许可。但是,如果要将本书中的大量范例代码加入你的产品文档,则需要申请许可。

如果觉得使用示例代码的情况不属于前面列出的合理使用或许可范围,请通过电子邮件联系我们,邮箱地址为permissions@oreilly.com。

Safari Books Online

专业技术人员、软件开发人员、网页设计人员、商务人员和创意专家将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,了解更多详情。

致谢

在本书写作期间,我仰赖于许多人的帮助,直接的或间接的。感谢Hadoop社区,我从中学到很多,这样的学习仍将继续。

特别感谢Michael Stack和Jonathan Gray,HBase这一章的内容就是他们写的。我还要感谢Adrian Woodhead,Marc de Palol,Joydeep Sen Sarma,Ashish Thusoo,Andrzej Białecki,Stu Hood,Chris K. Wensel和 Owen O’Malley,他们提供了学习实例。

感谢为草稿提出有用建议和改进建议的评审人:Raghu Angadi,Matt Biddulph,Christophe Bisciglia,Ryan Cox,Devaraj Das,Alex Dorman,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版勘误的所有读者表达最真挚的谢意。

对于第4版,我想感谢Jodok Batlogg,Meghan Blanchette,Ryan Blue,Jarek Jarcec Cecho,Jules Damji,Dennis Dawson,Matthew Gast,Karthik Kambatla,Julien Le Dem,Brock Noland,Sandy Ryza,Akshai Sarma,Ben Spivey,Michael Stack,Kate Ting,Josh Walter,Josh Wills和Adrian Woodhead,感谢他们所有人非常宝贵的审阅反馈。Ryan Brush,Micah Whitacre和Matt Massie kindly为第4版友情提供新的实例学习。再次感谢提交勘误的所有读者。

特别感谢Doug Cutting对我的鼓励、支持、友谊以及他为本书所写的序。

我还要感谢在本书写作期间以对话和邮件方式进行交流的其他人。

在本书第1版写到一半的时候,我加入了Cloudera,我想感谢我的同事,他们为我提供了大量的帮助和支持,使我有充足的时间好好写书,并能及时交稿。

非常感谢我的编辑Mike Loukides、Meghan Blanchette及其O’Reilly Media的同事,他们在本书的准备阶段为我提供了很多帮助。Mike和Meghan一直为我答疑解惑、审读我的初稿并帮助我如期完稿。

最后,写作是一项艰巨的任务,如果没有家人一如既往地支持,我是不可能完成这本的。我的妻子Eliane,她不仅操持着整个家庭,还协助我,参与本书的审稿、编辑和跟进案例学习。还有我的女儿Emilia和Lottie,她们一直都非常理解并支持我的工作,我期待有更多时间好好陪陪她们。

目录

第Ⅰ部分  Hadoop基础知识

第1章  初识Hadoop   3

1.1  数据!数据!    3

1.2  数据的存储与分析    5

1.3  查询所有数据    6

1.4  不仅仅是批处理    7

1.5  相较于其他系统的优势    8

1.5.1  关系型数据库管理系统    8

1.5.2  网格计算    10

1.5.3  志愿计算    11

1.6  Apache Hadoop发展简史    12

1.7  本书包含的内容    16

第2章  关于MapReduce  19

2.1  气象数据集    19

2.2  使用Unix工具来分析数据    21

2.3  使用Hadoop来分析数据    22

2.3.1  map和reduce  23

2.3.2  Java MapReduce  24

2.4  横向扩展    31

2.4.1  数据流    31

2.4.2  combiner函数    35

2.4.3  运行分布式的MapReduce作业    37

2.5  Hadoop Streaming   37

2.5.1  Ruby版本    38

2.5.2  Python版本    40

第3章     Hadoop分布式文件系统    42

3.1  HDFS的设计    42

3.2  HDFS的概念    44

3.2.1  数据块

3.2.2  namenode和datanode  45

3.2.3  块缓存    46

3.2.4  联邦HDFS  47

3.2.5  HDFS的高可用性    47

3.3  命令行接口    50

3.4  Hadoop文件系统    52

3.5  Java接口    56

3.5.1  从Hadoop URL读取数据    56

3.5.2  通过FileSystem API读取数据    58

3.5.3  写入数据    61

3.5.4  目录    63

3.5.5  查询文件系统    63

3.5.6  删除数据    68

3.6  数据流    68

3.6.1  剖析文件读取    68

3.6.2  剖析文件写入    71

3.6.3  一致模型    74

3.7  通过distcp并行复制    76

第4章         关于YARN   78

4.1  剖析YARN应用运行机制    79

4.1.1  资源请求    80

4.1.2  应用生命期    81

4.1.3  构建YARN应用    81

4.2  YARN与MapReduce 1相比    82

4.3  YARN中的调度    85

4.3.1  调度选项    85

4.3.2  容量调度器配置    87

4.3.3  公平调度器配置    89

4.3.4  延迟调度    93

4.3.5  主导资源公平性    94

4.4  延伸阅读    95

第5章   Hadoop的I/O操作    96

5.1  数据完整性    96

5.1.1  HDFS的数据完整性    97

5.1.2  LocalFileSystem    98

5.1.3  ChecksumFileSystem    98

5.2  压缩    99

5.2.1  codec  100

5.2.2  压缩和输入分片

5.2.3  在MapReduce中使用压缩    106

5.3  序列化    109

5.3.1  Writable接口    110

5.3.2  Writable类    112

5.3.3  实现定制的Writable集合

5.3.4  序列化框架    125

5.4  基于文件的数据结构    127

5.4.1  关于SequenceFile  127

5.4.2  关于MapFile  135

5.4.3  其他文件格式和面向列的格式    136

第Ⅱ部分  关于MapReduce

第6章  MapReduce应用开发    141

6.1  用于配置的API 142

6.1.1  资源合并    143

6.1.2  变量扩展    144

6.2  配置开发环境    144

6.2.1  管理配置    146

6.2.2  辅助类GenericOptionsParser,Tool和ToolRunner  149

6.3  用MRUnit来写单元测试    152

6.3.1  关于Mapper  152

6.3.2  关于Reducer  156

6.4  本地运行测试数据    156

6.4.1  在本地作业运行器上运行作业    156

6.4.2  测试驱动程序    158

6.5  在集群上运行    160

6.5.1  打包作业    160

6.5.2  启动作业    162

6.5.3  MapReduce的Web界面    165

6.5.4  获取结果    167

6.5.5  作业调试    168

6.5.6  Hadoop日志    171

6.5.7  远程调试    173

6.6  作业调优    174

6.7  MapReduce的工作流    176

6.7.1  将问题分解成MapReduce作业    177

6.7.2  关于JobControl 178

6.7.3  关于Apache Oozie  179

第7章  MapReduce的工作机制    184

7.1  剖析MapReduce作业运行机制    184

7.1.1  作业的提交    185

7.1.2  作业的初始化    186

7.1.3  任务的分配    187

7.1.4  任务的执行    188

7.1.5  进度和状态的更新    189

7.1.6  作业的完成    191

7.2  失败    191

7.2.1  任务运行失败    191

7.2.2  application master运行失败    193

7.2.3  节点管理器运行失败    193

7.2.4  资源管理器运行失败    194

7.3  shuffle和排序    195

7.3.1  map端    195

7.3.2  reduce端    197

7.3.3  配置调优    199

7.4  任务的执行    201

7.4.1  任务执行环境    201

7.4.2  推测执行    202

7.4.3  关于OutputCommitters  204

第8章  MapReduce的类型与格式    207

8.1  MapReduce的类型    207

8.1.1  默认的MapReduce作业    212

8.1.2  默认的Streaming作业    216

8.2  输入格式    218

8.2.1  输入分片与记录    218

8.2.2  文本输入    229

8.2.3  二进制输入    233

8.2.4  多个输入    234

8.2.5  数据库输入(和输出) 235

8.3  输出格式    236

8.3.1  文本输出    236

8.3.2  二进制输出    237

8.3.3  多个输出    237

8.3.4  延迟输出    242

8.3.5  数据库输出    242

第9章  MapReduce的特性    243

9.1  计数器    243

9.1.1  内置计数器    243

9.1.2  用户定义的Java计数器    248

9.1.3  用户定义的Streaming计数器    251

9.2  排序    252

9.2.1  准备    252

9.2.2  部分排序    253

9.2.3  全排序    255

9.2.4  辅助排序    259

9.3  连接    264

9.3.1  map端连接    266

9.3.2  reduce端连接    266

9.4  边数据分布    270

9.4.1  利用JobConf来配置作业    270

9.4.2  分布式缓存    270

9.5  MapReduce库类    276

第Ⅲ部分  Hadoop的操作

第10章  构建Hadoop集群    279

10.1  集群规范    280

10.1.1  集群规模    281

10.1.2  网络拓扑    282

10.2  集群的构建和安装    284

10.2.1  安装Java  284

10.2.2  创建Unix 用户账号    284

10.2.3  安装Hadoop   284

10.2.4  SSH配置    285

10.2.5  配置Hadoop   286

10.2.6  格式化HDFS 文件系统    286

10.2.7  启动和停止守护进程    286

10.2.8  创建用户目录    288

10.3  Hadoop配置    288

10.3.1  配置管理    289

10.3.2  环境设置    290

10.3.3  Hadoop守护进程的关键属性    293

10.3.4  Hadoop守护进程的地址和端口    300

10.3.5  Hadoop的其他属性    303

10.4  安全性    305

10.4.1  Kerberos和Hadoop   306

10.4.2  委托令牌    308

《Hadoop权威指南:大数据的存储与分析》

10.4.3  其他安全性改进    309

10.5  利用基准评测程序测试Hadoop集群    311

10.5.1  Hadoop基准评测程序    311

10.5.2  用户作业    313

第11章  管理Hadoop   314

11.1  HDFS

11.1.1  永久性数据结构    314

11.1.2  安全模式    320

11.1.3  日志审计

322

11.1.4  工具    322

11.2  监控    327

11.2.1  日志    327

11.2.2  度量和JMX(Java管理扩展) 328

11.3  维护    329

11.3.1  日常管理过程    329

11.3.2  委任和解除节点    331

11.3.3  升级    334

第Ⅳ部分  Hadoop相关开源项目

第12章  关于Avro   341

12.1  Avro数据类型和模式    342

12.2  内存中的序列化和反序列化特定API 347

12.3  Avro数据文件    349

12.4  互操作性    351

12.4.1  Python API 351

12.4.2  Avro工具集    352

12.5  模式解析    352

12.6  排列顺序    354

12.7  关于Avro MapReduce  356

12.8  使用Avro MapReduce进行排序    359

12.9  其他语言的Avro   362

第13章  关于Parquet

13.1  数据模型    364

13.2  Parquet文件格式    367

13.3  Parquet的配置    368

13.4  Parquet文件的读/写    369

13.4.1  Avro、Protocol Buffers和Thrift  371

13.4.2  投影模式和读取模式    373

13.5  Parquet MapReduce

第14章关于Flume

14.1  安装Flume  378

14.2  示例    378

14.3  事务和可靠性    380

14.4  HDFS Sink  382

14.5  扇出    385

14.5.1  交付保证    386

14.5.2  复制和复用选择器    387

14.6  通过代理层分发    387

14.7  Sink组    391

14.8  Flume与应用程序的集成    395

14.9  组件编目    395

14.10  延伸阅读    397

第15章  关于Sqoop   398

15.1  获取Sqoop   398

15.2  Sqoop连接器    400

15.3  一个导入的例子    401

15.4  生成代码    404

15.5  深入了解数据库导入    405

15.5.1  导入控制    407

15.5.2  导入和一致性    408

15.5.3  增量导入    408

15.5.4  直接模式导入    408

15.6  使用导入的数据    409

15.7  导入大对象    412

15.8  执行导出    414

15.9  深入了解导出功能    416

15.9.1  导出与事务    417

15.9.2  导出和SequenceFile  418

15.10  延伸阅读    419

第16章  关于Pig   420

16.1  安装与运行Pig   421

16.1.1  执行类型    422

16.1.2  运行Pig程序    423

16.1.3  Grunt  424

16.1.4  Pig Latin编辑器    424

16.2  示例    425

16.3  与数据库进行比较    428

16.4  PigLatin  429

16.4.1  结构    430

16.4.2  语句    431

16.4.3  表达式    436

16.4.4  类型    437

16.4.5  模式    438

16.4.6  函数    443

16.4.7  宏    445

16.5  用户自定义函数    446

16.5.1  过滤UDF  447

16.5.2  计算UDF  450

16.5.3  加载UDF  452

16.6  数据处理操作    455

16.6.1  数据的加载和存储    455

16.6.2  数据的过滤    455

16.6.3  数据的分组与连接    458

16.6.4  数据的排序    463

16.6.5  数据的组合和切分    465

16.7  Pig实战    465

16.7.1  并行处理    465

16.7.2  匿名关系    466

16.7.3  参数代换    467

16.8  延伸阅读    468

第17章  关于Hive  469

17.1  安装HiveHive的shell环境

471

17.2  示例    472

17.3  运行Hive  473

17.3.1  配置Hive  473

17.3.2  Hive服务    476

17.3.3  Metastore  478

17.4  Hive与传统数据库相比    480

17.4.1  读时模式vs.写时模式    480

17.4.2  更新、事务和索引    481

17.4.3  其他SQL-on-Hadoop技术    482

17.5  HiveQL  483

17.5.1  数据类型    484

17.5.2  操作与函数    487

17.6  表    488

17.6.1  托管表和外部表    488

17.6.2  分区和桶    490

17.6.3  存储格式    494

17.6.4  导入数据    498

17.6.5  表的修改    500

17.6.6  表的丢弃    501

17.7  查询数据    501

17.7.1  排序和聚集    501

17.7.2  MapReduce脚本    502

17.7.3  连接    503

17.7.4  子查询    506

17.7.5  视图    507

17.8  用户定义函数    508

17.8.1  写UDF  510

17.8.2  写UDAF  512

17.9  延伸阅读    516

第18章  关于Crunch  517

18.1  示例    518

18.2  Crunch核心API 521

18.2.1  基本操作    522

18.2.2  类型    527

18.2.3  源和目标    530

18.2.4  函数    532

18.2.5  物化    535

18.3  管线执行    537

18.3.1  运行管线    538

18.3.2  停止管线    539

18.3.3  查看Crunch计划    540

18.3.4  迭代算法    543

18.3.5  给管线设置检查点    544

18.4  Crunch库    545

18.5  延伸阅读    547

第19章  关于Spark  548

19.1  安装Spark  549

19.2  示例    549

19.2.1  Spark应用、作业、阶段和任务    551

19.2.2  Scala独立应用    552

19.2.3  Java示例    553

19.2.4  Python示例    554

19.3  弹性分布式数据集    555

19.3.1  创建    555

19.3.2  转换和动作    557

19.3.3  持久化    561

19.3.4  序列化    563

19.4  共享变量    564

19.4.1  广播变量    564

19.4.2  累加器    565

19.5  剖析Spark作业运行机制    565

19.5.1  作业提交    566

19.5.2  DAG的构建    566

19.5.3  任务调度    569

19.5.4  任务执行    570

19.6  执行器和集群管理器    570

19.7  延伸阅读    574

第20章  关于HBase  575

20.1  HBase基础    575

20.2  概念    576

20.2.1  数据模型的“旋风之旅”  576

20.2.2  实现    578

20.3  安装    581

20.4  客户端    584

20.4.1  Java  584

20.4.2  MapReduce  588

20.4.3  REST和Thrift  589

20.5  创建在线查询应用    589

20.5.1  模式设计    590

20.5.2  加载数据    591

20.5.3  在线查询    595

20.6  HBase和RDBMS的比较    598

20.6.1  成功的服务    599

20.6.2  HBase  600

20.7  Praxis  601

20.7.1  HDFS  601

20.7.2  用户界面    602

20.7.3  度量    602

20.7.4  计数器    602

20.8  延伸阅读    602

第21章  关于ZooKeeper  604

21.1  安装和运行ZooKeeper  605

21.2  示例    607

21.2.1  ZooKeeper中的组成员关系    608

21.2.2  创建组    608

21.2.3  加入组    611

21.2.4  列出组成员    612

21.2.5  删除组    614

21.3  ZooKeeper服务    615

21.3.1  数据模型    615

21.3.2  操作    618

21.3.3  实现    622

21.3.4  一致性    624

21.3.5  会话    626

21.3.6  状态    628

21.4  使用ZooKeeper来构建应用    629

21.4.1  配置服务    629

21.4.2  可复原的ZooKeeper应用    633

21.4.3  锁服务    637

21.4.4  更多分布式数据结构和协议

21.5  生产环境中的ZooKeeper  640

21.5.1  可恢复性和性能    641

21.5.2  配置    642

21.6  延伸阅读    643

第Ⅴ部分案例学习

第22章医疗公司塞纳(Cerner)的可聚合数据

22.1  从多CPU到语义集成    647

22.2  进入Apache Crunch  648

22.3  建立全貌    649

22.4  集成健康医疗数据    651

22.5  框架之上的可组合性    654

22.6  下一步第23章生物数据科学:用软件拯救生命

23.1  DNA的结构    659

23.2  遗传密码:将DNA字符转译为蛋白质    660

22.3  将DNA想象成源代码    661

23.4  人类基因组计划和参考基因组    663

22.5  DNA测序和比对    664

23.6  ADAM,一个可扩展的基因组分析平台    666

23.7  使用Avro接口描述语言进行自然语言编程    666

23.8  使用Parquet进行面向列的存取    668

23.9  一个简单例子:用Spark和ADAM做k-mer计数    669

23.10  从个性化广告到个性化医疗    672

23.11  联系我们

第24章开源项目Cascading

24.1  字段、元组和管道    675

24.2  操作    678

24.3  Taps,Schemes和Flows  680

24.4  Cascading实践应用    681

24.5  灵活性    684

24.6  ShareThis中的Hadoop和Cascading   685

24.7  总结    689

附录A  安装Apache Hadoop   691

附录B  关于CDH   697

附录C  准备NCDC气象数据    699

附录D  新版和旧版Java

MapReduce API 702

大数据 Hadoop

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【华为人故事】世界之巅的5G路
下一篇:十位改变世界的人工智能领域大师
相关文章