Hadoop高级编程——构建与实现大数据解决方案

出版日期:2014-8-1
ISBN:9787302369062
作者:(美)卢博林斯凯(Lublinsky, B.),(美)雅库伯维奇(Yakubovich, A.),(美)史密斯(Smith, K. T.)
页数:448页

内容概要

Boris Lublinsky是诺基亚的首席架构师,出版了70多篇作品,包括Applied SOA: Service-Oriented Architecture and Design Strategies 。
Kevin T. Smith是Novetta Solutions公司AMS部门的技术解决方案总监,他为客户构建高度安全的、面向数据的解决方案。
Alexey Yakubovich是Hortonworks的一名系统架构师,而且是对象管理组织(OMG)关于SOA治理和模型驱动架构的特别兴趣小组(SIG)的一名成员。

书籍目录

目    录
第1章 大数据和Hadoop生态系统
1
1.1 当大数据遇见Hadoop
2
1.1.1 Hadoop:直面大数据的挑战
3
1.1.2 商业世界中的数据科学
4
1.2 Hadoop生态系统
6
1.3 Hadoop核心组件
7
1.4 Hadoop发行版
9
1.5 使用Hadoop开发企业级应用
10
1.6 小结
14
第2章 Hadoop数据存储
15
2.1 HDFS
15
2.1.1 HDFS架构
15
2.1.2 使用HDFS文件
19
2.1.3 Hadoop特定的文件类型
21
2.1.4 HDFS联盟和高可用性
26
2.2 HBase
28
2.2.1 HBase架构
28
2.2.2 HBase结构设计
34
2.2.3 HBase编程
35
2.2.4 HBase新特性
42
2.3 将HDFS和HBase的组合用于高效数据存储
45
2.4 使用Apache Avro
45
2.5 利用HCatalog管理元数据
49
2.6 为应用程序选择合适的Hadoop数据组织形式
51
2.7 小结
53
第3章 使用MapReduce处理数据
55
3.1 了解MapReduce
55
3.1.1 MapReduce执行管道
56
3.1.2 MapReduce中的运行时协调和任务管理
59
3.2 第一个MapReduce应用程序
61
3.3 设计MapReduce实现
69
3.3.1 将MapReduce用作并行处理框架
70
3.3.2 使用MapReduce进行简单的数据处理
71
3.3.3 使用MapReduce构建连接
72
3.3.4 构建迭代式MapReduce应用程序
77
3.3.5 是否使用MapReduce
82
3.3.6 常见的MapReduce设计陷阱
83
3.4 小结
84
第4章 自定义MapReduce执行
85
4.1 使用InputFormat控制MapReduce执行
85
4.1.1 为计算密集型应用程序实现InputFormat
87
4.1.2 实现InputFormat以控制Map的数量
93
4.1.3 实现用于多个HBase表的InputFormat
99
4.2 使用自定义RecordReader以自己的方式读取数据
102
4.2.1 实现基于队列的RecordReader
102
4.2.2 为XML数据实现RecordReader
105
4.3 使用自定义输出格式组织输出数据
109
4.4 使用自定义记录写入器以自己的方式写入数据
119
4.5 使用组合器优化MapReduce执行
121
4.6 使用分区器控制Reducer执行
124
4.7 在Hadoop中使用非Java代码
128
4.7.1 Pipes
128
4.7.2 Hadoop Streaming
128
4.7.3 使用JNI
129
4.8 小结
131
第5章 构建可靠的MapReduce应用程序
133
5.1 单元测试MapReduce应用程序
133
5.1.1 测试Mapper
136
5.1.2 测试Reducer
137
5.1.3 集成测试
138
5.2 使用Eclipse进行本地应用程序测试
139
5.3 将日志用于Hadoop测试
141
5.4 使用作业计数器报告指标
146
5.5 MapReduce中的防御性编程
149
5.6 小结
151
第6章 使用Oozie自动化数据处理
153
6.1 认识Oozie
154
6.2 Oozie Workflow
155
6.2.1 在Oozie Workflow中执行异步操作
159
6.2.2 Oozie的恢复能力
164
6.2.3 Oozie Workflow作业的生命周期
164
6.3 Oozie Coordinator
165
6.4 Oozie Bundle
170
6.5 用表达式语言对Oozie进行参数化
174
6.5.1 Workflow函数
175
6.5.2 Coordinator函数
175
6.5.3 Bundle函数
175
6.5.4 其他EL函数
175
6.6 Oozie作业执行模型
176
6.7 访问Oozie
179
6.8 Oozie SLA
180
6.9 小结
185
第7章 使用Oozie
187
7.1 使用探测包验证位置相关信息的正确性
187
7.2 设计基于探测包的地点正确性验证
188
7.3 设计Oozie Workflow
190
7.4 实现Oozie Workflow应用程序
193
7.4.1 实现数据准备Workflow
193
7.4.2 实现考勤指数和聚类探测包串Workflow
201
7.5 实现 Workflow行为
203
7.5.1 发布来自java动作的执行上下文
204
7.5.2 在Oozie Workflow中使用MapReduce作业
204
7.6 实现Oozie Coordinator应用程序
207
7.7 实现Oozie Bundle应用程序
212
7.8 部署、测试和执行Oozie应用程序
213
7.8.1 部署Oozie应用程序
213
7.8.2 使用Oozie CLI执行Oozie应用程序
215
7.8.3 向Oozie作业传递参数
218
7.9 使用Oozie控制台获取Oozie应用程序信息
221
7.9.1 了解Oozie控制台界面
221
7.9.2 获取 Coordinator作业信息
225
7.10 小结
227
第8章 高级Oozie特性
229
8.1 构建自定义Oozie Workflow动作
230
8.1.1 实现自定义Oozie Workflow动作
230
8.1.2 部署Oozie自定义Workflow动作
235
8.2 向Oozie Workflow添加动态执行
237
8.2.1 总体实现方法
237
8.2.2 一个机器学习模型、参数和算法
240
8.2.3 为迭代过程定义Workflow
241
8.2.4 动态Workflow生成
244
8.3 使用Oozie Java API
247
8.4 在Oozie应用中使用uber jar包
251
8.5 数据吸收传送器
256
8.6 小结
263
第9章 实时Hadoop
265
9.1 现实世界中的实时应用
266
9.2 使用HBase来实现实时应用
266
9.2.1 将HBase用作图片管理系统
268
9.2.2 将HBase用作Lucene后端
275
9.3 使用专门的实时Hadoop查询系统
295
9.3.1 Apache Drill
296
9.3.2 Impala
298
9.3.3 实时查询和MapReduce的对比
299
9.4 使用基于Hadoop的事件处理系统
300
9.4.1 HFlame
301
9.4.2 Storm
302
9.4.3 事件处理和MapReduce的对比
305
9.5 小结
305
第10章 Hadoop安全
307
10.1 简要的历史:理解Hadoop安全的挑战
308
10.2 认证
309
10.2.1 Kerberos认证
310
10.2.2 委派安全凭据
318
10.3 授权
323
10.3.1 HDFS文件访问权限
323
10.3.2 服务级授权
327
10.3.3 作业授权
329
10.4 Oozie认证和授权
329
10.5 网络加密
331
10.6 使用Rhino项目增强安全性
332
10.6.1 HDFS磁盘级加密
333
10.6.2 基于令牌的认证和统一的授权框架
333
10.6.3 HBase单元格级安全
334
10.7 将所有内容整合起来——保证Hadoop安全的最佳实践
334
10.7.1 认证
335
10.7.2 授权
335
10.7.3 网络加密
336
10.7.4 敬请关注Hadoop的增强功能
336
10.8 小结
336
第11章 在AWS上运行Hadoop应用
337
11.1 初识AWS
338
11.2 在AWS上运行Hadoop的可选项
339
11.2.1 使用EC2实例的自定义安装
339
11.2.2 弹性MapReduce
339
11.2.3 做出选择前的额外考虑
339
11.3 理解EMR-Hadoop的关系
340
11.3.1 EMR架构
341
11.3.2 使用S3存储
343
11.3.3 最大化EMR的使用
343
11.3.4 利用CloudWatch和其他AWS组件
345
11.3.5 访问和使用EMR
346
11.4 使用AWS S3
351
11.4.1 理解桶的使用
352
11.4.2 使用控制台浏览内容
354
11.4.3 在S3中编程访问文件
355
11.4.4 使用MapReduce上传多个文件到S3
365
11.5 自动化EMR作业流创建和作业执行
367
11.6 管理EMR中的作业执行
372
11.6.1 在EMR集群上使用Oozie
372
11.6.2 AWS 简单工作流
374
11.6.3 AWS数据管道
375
11.7 小结
376
第12章 为Hadoop实现构建企业级安全解决方案
377
12.1 企业级应用的安全顾虑
378
12.1.1 认证
380
12.1.2 授权
380
12.1.3 保密性
380
12.1.4 完整性
381
12.1.5 审计
381
12.2 Hadoop安全没有为企业级应用原生地提供哪些机制
381
12.2.1 面向数据的访问控制
382
12.2.2 差分隐私
382
12.2.3 加密静止的数据
383
12.2.4 企业级安全集成
384
12.3 保证使用Hadoop的企业级应用安全的方法
384
12.3.1 使用Accumulo进行访问控制保护
385
12.3.2 加密静止数据
394
12.3.3 网络隔离和分隔方案
395
12.4 小结
397
第3章 Hadoop的未来
399
13.1 使用DSL简化MapReduce编程
400
13.1.1 什么是DSL
400
13.1.2 Hadoop的DSL
401
13.2 更快、更可扩展的数据处理
412
13.2.1 Apache YARN
412
13.2.2 Tez
414
13.3 安全性的改进
415
13.4 正在出现的趋势
415
13.5 小结
416
附录 有用的阅读
417

作者简介

如果你已经准备好要充分实施大规模可扩展性数据分析工作,那么需要知道如何利用Hadoop技术。这本《Hadoop高级编程——构建与实现大数据解决方案》可以帮助你做到这一点!本书关注用于构建先进的、基于Hadoop的企业级应用的架构和方案,并为实现现实的解决方案提供深入的、代码级的讲解。本书还会带你领略数据设计以及数据设计如何影响实现。本书解释了MapReduce的工作原理,并展示了如何在MapReduce中重新定制特定的业务问题。在整本书中,你将会发现深入的Java代码示例,这些代码示例可以直接使用,它们均源自于已经成功地构建和部署的应用程序。


 Hadoop高级编程——构建与实现大数据解决方案下载 更多精彩书评



发布书评

 
 


精彩书评 (总计1条)

  •     在这个技术不停地改变的快节奏世界中,我们已经被信息淹没。我们在不断生成和存储大量的数据。随着网络上的设备不断丰富,我们已经看到了信息格式和数据多样性的惊人增长——大数据。但是我们要直面它——如果我们忠实于自己的话,多数组织还不能积极有效地管理这大量的数据,我们也还不能使这些信息发挥优势,从而更好地做出决策,更聪明地做生意。我们已经被大批量的数据所淹没,但同时我们又渴求知识。这会导致公司损失生产力、损失机会,并损失收入。在过去的10年中,很多技术承诺帮助处理和分析我们拥有的大批量信息,而这些技术多数都出现了不足。我们知道这一点,因为作为专注于数据的程序员,我们已经都尝试过了。很多方法都是受专利保护的,导致供应商被锁定。一些方法看起来很有希望,但无法扩展以处理大型数据集,还有很多是宣传很好但不能满足预期,或者在关键时刻还没有准备好。然而,Apache Hadoop登场之后,一切都不一样了。当然这里也有宣传的因素,但它是一个开源项目,已经在大规模可扩展商业应用中取得了不可思议的成功。尽管学习曲线有些陡峭,但这是我们第一次可以轻松地编写程序并对大规模数据进行分析——以一种以前我们做不到的方式。MapReduce算法可以使开发人员处理分布在可扩展机器集群上的数据,基于该算法,我们以过去无法做到的方式,在进行复杂数据分析方面取得了很大的成功。关于Hadoop的书并不缺少。人们写了很多,而且其中很多书都很好。那么,为什么还要编写本书呢?当我们开始使用Hadoop时,希望有一本书不只是介绍API,还要解释Hadoop生态系统的诸多部分如何共同工作,并可用于构建企业级的解决方案。我们在寻找这样一本书,它可以带领读者学习数据设计及其对实现的影响,并解释MapReduce的工作原理,以及如何用MapReduce来重新表述特定的业务问题。我们在寻找如下问题的答案:● MapReduce的强项和弱点是什么,以及我们如何自定义它以便更好地满足自己的需求?● 为什么我们需要在MapReduce之上有一个额外的协调层,以及Oozie是怎么满足这个需求的?● 我们如何使用特定领域语言(Domain-Specific Language,DSL)来简化MapReduce开发?● 每个人都在讲的实时Hadoop是什么,它可以做什么,以及它不能做什么?它的工作原理是什么?● 我们如何确保Hadoop应用程序的安全,我们需要考虑什么,我们必须考虑什么安全隐患,以及处理这些问题有哪些方法?● 我们如何将自己的Hadoop应用程序迁移到云中,以及这样做有哪些重要的考虑因素?当开始Hadoop探险时,我们不得不夜以继日地浏览整个Internet和Hadoop源代码,与人们交谈并尝试使用这些代码来找到这些问题的答案。然后我们决定通过撰写本书来分享自己的发现和经验,并希望本书能够成为读者理解和使用Hadoop的一个良好的开端。本书读者对象本书是由程序员写给程序员的。本书的作者是开发企业级解决方案的技术人员,我们对于本书的目标是为使用Hadoop的其他开发人员提供可靠的、实用的建议。本书的目标人群是试图更好地理解和利用Hadoop——不只是做简单的数据分析,同时也将Hadoop用作企业级应用的基础——的软件架构师和开发人员。因为Hadoop是一个基于Java的框架,所以本书包含了大量的代码示例,需要读者熟悉Java。此外,作者假设读者在一定程度上熟悉Hadoop,并有一些入门级的MapReduce知识。尽管本书在设计上希望读者从头到尾以逐个模块的方式阅读,但某些章节可能更适合特定的人群。想要理解Hadoop数据存储能力的数据设计人员更可能从第2章中受益。从MapReduce开始的程序员们最有可能关注第3~第5章,以及第13章。意识到不使用像Oozie这样的Workflow系统会导致复杂性的开发人员,最可能关注第6~第8章。那些对实时Hadoop感兴趣的人们会关注第9章。有兴趣在实现中使用亚马逊云的人们可能会关注第11章,而在乎安全性的人们可能关注第10章和第12章。本书涵盖的内容现在,每个人都在处理大数据。很多企业正在最大限度地实施大规模可扩展性数据分析工作,其中多数企业都在尝试使用Hadoop来完成该目标。本书集中讲述构建基于Hadoop高级企业级应用的架构和方法,并为此涵盖了如下主要Hadoop组件:● 基于Hadoop的企业级应用的架构蓝图● 基础的Hadoop数据存储和组织系统● Hadoop的主要执行框架(MapReduce)● Hadoop的Workflow/Coordinator服务器(Oozie)● 实现基于Hadoop的实时系统的技术● 在云环境中运行Hadoop的方式● 确保Hadoop应用安全的技术和架构本书的组织结构本书被编排为13章。第1章(“大数据和Hadoop生态系统”)介绍了大数据,以及Hadoop用作大数据实现的方法。在该章中,我们学习Hadoop如何解决大数据带来的挑战,以及哪些Hadoop核心组件可以共同工作来创建丰富的Hadoop生态系统,适合解决很多现实世界的问题。我们也学习了多个可用的Hadoop发行版,以及新出现的用于大数据应用的架构模式。任何大数据实现的基础都是数据存储设计。第2章(“Hadoop数据存储”)涵盖了Hadoop支持的分布式数据存储。该章讨论了两个主要的Hadoop数据存储机制——HDFS和HBase——的架构和API,并提供了何时使用哪种机制的一些建议。这里我们学习了HDFS(联盟)和HBase新文件格式以及协处理器的最新发展。该章也涵盖了HCatalog(Hadoop元数据管理解决方案)和Avro(一个序列化/组装框架),以及它们在Hadoop数据存储中扮演的角色。作为主要的Hadoop执行框架,MapReduce是本书的主要议题之一,包含在第3~第5章中。第3章(“使用MapReduce处理数据”)介绍了MapReduce框架。涵盖了MapReduce架构、它的主要组件和MapReduce编程模型。该章也重点介绍了MapReduce应用的设计、设计模式以及MapReduce的一般注意事项。第4章(“自定义MapReduce执行”)建立在第3章的基础之上,涵盖了自定义MapReduce执行的重要方法。我们学习MapReduce执行可以被自定义的一些方面,并使用工作代码示例来揭示如何做到这一点。最后,在第5章(“构建可靠的MapReduce应用程序”)中,我们学习了构建可靠的MapReduce应用程序的途径,包括测试和调试,以及使用内置的MapReduce工具(例如,日志和计数器)来查看MapReduce的内部执行。尽管MapReduce自身具有强大的功能,但实际的解决方案通常需要将多个MapReduce应用组合到一起,这涉及很多的复杂性。通过使用Hadoop Workflow/Coordinator引擎—— Oozie——可以显著地简化这种复杂性,Oozie将在第6~第8章中描述。第6章(“使用Oozie自动化数据处理”)介绍了Oozie。这里我们学习Oozie的整体架构、它的主要组件,以及每个组件的编程语言。我们也学习Oozie的整体执行模型,以及可以和Oozie服务器交互的方式。第7章(“使用Oozie”)建立在第6章所学知识的基础之上并展示了一个实用的从无到有使用Oozie开发实际应用的示例。该示例演示了如何在解决方案中使用不同的Oozie组件,并演示了设计和实现途径。最后,第8章(“高级Oozie特性”)讨论一些高级特性,并展示了扩展Oozie和将它与其他企业级应用集成的方法。在该章中,我们学习了一些开发人员需要知道的建议和技巧——例如,Oozie代码的动态生成如何帮助开发人员克服一些现存的、任何其他方法都不能解决的Oozie缺点。当今与大数据相关的最热门的趋势之一是进行“实时分析”的能力。该主题在第9章(“实时Hadoop”)中讨论。该章开始提供了一些目前使用的实时Hadoop应用示例,并展示了这些实现的整体架构需求。我们将学习构建这样一些实现的3种主要方法——基于HBase的应用程序、实时查询和基于流的处理。该章提供了两个基于HBase的实时应用——一个假想的图片管理系统和一个基于Lucene、使用HBase作为后端的搜索引擎。我们也会学习实现实时查询的整体架构,以及两个具体的产品——Apache Drill和Cloudera的Impala——实现实时查询的方式。该章同时涵盖了另一种类型的实时应用——复杂事件处理,包括它的整体架构,以及HFlame和Storm实现该架构的方式。最后,该章提供了实时查询、复杂事件处理和MapReduce之间的一个对比。Hadoop应用程序开发中一个经常被忽略但至关重要的主题是Hadoop安全。第10章(“Hadoop安全”)深入讨论了与大数据分析和Hadoop——确切地说是Hadoop安全模型和最佳实践——相关的安全性考虑。这里我们学习Rhino项目——一个支持开发人员扩展Hadoop安全能力(包括加密、认证、授权、单点登录(Single-Sign-On,SSO)和审计)的框架。基于云的Hadoop使用需要有趣的架构决策。第11章(“在AWS上运行Hadoop应用”)描述了这些挑战,并涵盖了在亚马逊Web服务(Amazon Web Service,AWS)云上运行Hadoop的不同方法。该章也讨论了一些权衡选择并考察了一些最佳实践。我们将学习弹性MapReduce(Elastic MapReduce,EMR)和可以用于补充Hadoop功能的额外AWS服务(例如S3、CloudWatch、Simple Workflow等)。除了确保Hadoop自身的安全,Hadoop实现通常和其他企业级组件集成——数据经常被导入到Hadoop并被导出。第12章(“为Hadoop实现构建企业级安全解决方案”)涵盖了如何确保使用Hadoop的企业级应用尽可能安全,并提供了示例和最佳实践。作为本书的最后一章,第13章(“Hadoop的未来”)浏览了一些当前和未来将发生的Hadoop行业趋势和创新。这里我们学习了可用来简化MapReduce开发的Hadoop DSL及其使用,以及新的MapReduce资源管理系统(YARN)和MapReduce运行时扩展(Tez)。我们也学习了最重要的Hadoop发展方向和趋势。使用本书需要的条件本书中展示的所有代码都用Java实现。因此,要使用这些代码,读者需要Java编译器和开发环境。所有的开发都在Eclipse中完成,但由于每个项目都有一个Maven pom文件,因而把代码迁移到任何您所选择的开发环境都足够简单。所有的数据访问和MapReduce代码都在Hadoop 1(Cloudera CDH 3发行版和Amazon EMR)和Hadoop 2(Cloudera CDH 4发行版)上测试通过。因此,这些代码应当可以在任何Hadoop发行版上运行。Oozie代码在最新版的Oozie(例如,可以从Cloudera CDH 4.1发行版获得)上测试通过。示例的源代码都以Eclipse项目进行组织(每章一个项目),并可以从Wrox网站www.wrox.com/go/prohadoopsolutions下载获得。源代码在学习本书中的示例时,读者可以选择手工输入所有的代码,也可以使用随书的源代码文件。本书的源代码可以从www.wrox.com下载获得。具体对本书而言,专门的代码下载位于www.wrox.com/go/prohadoopsolutions的Download Code链接。读者也可以在www.wrox.com按照本书英文版的ISBN(本书英文版的ISBN是978-1-118-61193-7)搜索本书来找到这些代码。当前所有的Wrox图书代码下载的完整列表位于www.wrox.com/dynamic/books/download.aspx。在整个选定的各章中,读者也可以在需要时,从代码清单的标题和文本中找到代码文件名称的引用。www.wrox.com上的大多数代码都压缩在.ZIP、.RAR文档或适合特定平台的类似文档中。一旦下载了这些代码,只需要使用合适的压缩工具将其解压即可。注意:由于许多图书的标题都很类似,因此按ISBN搜索是最简单的,本书英文版的ISBN是978-1-118-61193-7。另外,读者也可以通过网址www.wrox.com/dynamic/books/download.aspx 进入Wrox代码下载主页面,找到本书以及所有其他Wrox图书的可用代码。勘误表尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果您在本书中发现了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。要找到本书英文版的勘误表,可以登录http://www.wrox.com/go/prohadoopsolutions,单击Errata链接。在这个页面上可以查看到Wrox编辑已提交和粘贴的所有勘误项。如果您发现的错误在我们的勘误表里还没有出现的话,请登录www.wrox.com/contact/ techsupport.shtml并完成那里的表格,把您发现的错误发送给我们。我们会检查您的反馈信息,如果正确,我们将在本书的勘误表页面张贴该错误消息,并在本书的后续版本加以修订。p2p. wrox.com要与作者和同行讨论,请加入p2p.wrox.com上的P2P论坛。这个论坛是一个基于Web的系统,便于您张贴与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了订阅功能,当您感兴趣的主题在论坛上有新帖子发布时,系统会向您发送电子邮件。Wrox的作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。在http://p2p.wrox.com上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤:(1) 进入p2p.wrox.com,单击Register链接。(2) 阅读使用协议,并单击Agree按钮。(3) 填写加入该论坛所需要的信息和自己希望提供的其他可选信息,单击Submit按钮。(4) 您会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。注意:不加入P2P也可以阅读论坛上的消息,但要张贴自己的消息,就必须先加入该论坛。加入论坛后,就可以张贴新消息,响应其他用户张贴的消息。可以随时在Web上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。要想了解更多的有关论坛软件的工作情况,以及P2P和Wrox图书的许多常见问题的解答,就一定要阅读FAQ,只需要在任意P2P页面上单击FAQ链接即可。

精彩短评 (总计2条)

  •     hadoop实战必读
  •     很一般
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024