图书推荐:《Hadoop高级编程》

数据猿 |  2016-03-11 16:31

【数据猿导读】 《Hadoop高级编程》关注用于构建先进的、基于Hadoop的企业级应用的架构和方案,并为实现现实的解决方案提供深入的、代码级的讲解,解释了MapReduce的工作原理,并展示了如何在MapReduce中重新定制特定的业务问题

图书推荐:《Hadoop高级编程》

内容简介:

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

作者简介:

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 当大数据遇见Hadoop

1.1.1 Hadoop:直面大数据的挑战

1.1.2 商业世界中的数据科学

1.2 Hadoop生态系统

1.3 Hadoop核心组件

1.4 Hadoop发行版

1.5 使用Hadoop开发企业级应用

1.6 小结

第2章 Hadoop数据存储

2.1 HDFS

2.1.1 HDFS架构

2.1.2 使用HDFS文件

2.1.3 Hadoop特定的文件类型

2.1.4 HDFS联盟和高可用性

2.2 HBase

2.2.1 HBase架构

2.2.2 HBase结构设计

2.2.3 HBase编程

2.2.4 HBase新特性

2.3 将HDFS和HBase的组合用于高效数据存储

2.4 使用Apache Avro

2.5 利用HCatalog管理元数据

2.6 为应用程序选择合适的Hadoop数据组织形式

2.7 小结

第3章 使用MapReduce处理数据

3.1 了解MapReduce

3.1.1 MapReduce执行管道

3.1.2 MapReduce中的运行时协调和任务管理

3.2 第一个MapReduce应用程序

3.3 设计MapReduce实现

3.3.1 将MapReduce用作并行处理框架

3.3.2 使用MapReduce进行简单的数据处理

3.3.3 使用MapReduce构建连接

3.3.4 构建迭代式MapReduce应用程序

3.3.5 是否使用MapReduce

3.3.6 常见的MapReduce设计陷阱

3.4 小结

第4章 自定义MapReduce执行

4.1 使用InputFormat控制MapReduce执行

4.1.1 为计算密集型应用程序实现InputFormat

4.1.2 实现InputFormat以控制Map的数量

4.1.3 实现用于多个HBase表的InputFormat

4.2 使用自定义RecordReader以自己的方式读取数据

4.2.1 实现基于队列的RecordReader

4.2.2 为XML数据实现RecordReader

4.3 使用自定义输出格式组织输出数据

4.4 使用自定义记录写入器以自己的方式写入数据

4.5 使用组合器优化MapReduce执行

4.6 使用分区器控制Reducer执行

4.7 在Hadoop中使用非Java代码

4.7.1 Pipes

4.7.2 Hadoop Streaming

4.7.3 使用JNI

4.8 小结

第5章 构建可靠的MapReduce应用程序

5.1 单元测试MapReduce应用程序

5.1.1 测试Mapper

5.1.2 测试Reducer

5.1.3 集成测试

5.2 使用Eclipse进行本地应用程序测试

5.3 将日志用于Hadoop测试

5.4 使用作业计数器报告指标

5.5 MapReduce中的防御性编程

5.6 小结

第6章 使用Oozie自动化数据处理

6.1 认识Oozie

6.2 Oozie Workflow

6.2.1 在Oozie Workflow中执行异步操作

6.2.2 Oozie的恢复能力

6.2.3 Oozie Workflow作业的生命周期

6.3 Oozie Coordinator

6.4 Oozie Bundle

6.5 用表达式语言对Oozie进行参数化

6.5.1 Workflow函数

6.5.2 Coordinator函数

6.5.3 Bundle函数

6.5.4 其他EL函数

6.6 Oozie作业执行模型

6.7 访问Oozie

6.8 Oozie SLA

6.9 小结

第7章 使用Oozie

7.1 使用探测包验证位置相关信息的正确性

7.2 设计基于探测包的地点正确性验证

7.3 设计Oozie Workflow

7.4 实现Oozie Workflow应用程序

7.4.1 实现数据准备Workflow

7.4.2 实现考勤指数和聚类探测包串Workflow

7.5 实现 Workflow行为

7.5.1 发布来自java动作的执行上下文

7.5.2 在Oozie Workflow中使用MapReduce作业

7.6 实现Oozie Coordinator应用程序

7.7 实现Oozie Bundle应用程序

7.8 部署、测试和执行Oozie应用程序

7.8.1 部署Oozie应用程序

7.8.2 使用Oozie CLI执行Oozie应用程序

7.8.3 向Oozie作业传递参数

7.9 使用Oozie控制台获取Oozie应用程序信息

7.9.1 了解Oozie控制台界面

7.9.2 获取 Coordinator作业信息

7.10 小结

第8章 高级Oozie特性

8.1 构建自定义Oozie Workflow动作

8.1.1 实现自定义Oozie Workflow动作

8.1.2 部署Oozie自定义Workflow动作

8.2 向Oozie Workflow添加动态执行

8.2.1 总体实现方法

8.2.2 一个机器学习模型、参数和算法

8.2.3 为迭代过程定义Workflow

8.2.4 动态Workflow生成

8.3 使用Oozie Java API

8.4 在Oozie应用中使用uber jar包

8.5 数据吸收传送器

8.6 小结

第9章 实时Hadoop

9.1 现实世界中的实时应用

9.2 使用HBase来实现实时应用

9.2.1 将HBase用作图片管理系统

9.2.2 将HBase用作Lucene后端

9.3 使用专门的实时Hadoop查询系统

9.3.1 Apache Drill

9.3.2 Impala

9.3.3 实时查询和MapReduce的对比

9.4 使用基于Hadoop的事件处理系统

9.4.1 HFlame

9.4.2 Storm

9.4.3 事件处理和MapReduce的对比

9.5 小结

第10章 Hadoop安全

10.1 简要的历史:理解Hadoop安全的挑战

10.2 认证

10.2.1 Kerberos认证

10.2.2 委派安全凭据

10.3 授权

10.3.1 HDFS文件访问权限

10.3.2 服务级授权

10.3.3 作业授权

10.4 Oozie认证和授权

10.5 网络加密

10.6 使用Rhino项目增强安全性

10.6.1 HDFS磁盘级加密

10.6.2 基于令牌的认证和统一的授权框架

10.6.3 HBase单元格级安全

10.7 将所有内容整合起来--保证Hadoop安全的最佳实践

10.7.1 认证

10.7.2 授权

10.7.3 网络加密

10.7.4 敬请关注Hadoop的增强功能

10.8 小结

第11章 在AWS上运行Hadoop应用

11.1 初识AWS

11.2 在AWS上运行Hadoop的可选项

11.2.1 使用EC2实例的自定义安装

11.2.2 弹性MapReduce

11.2.3 做出选择前的额外考虑

11.3 理解EMR-Hadoop的关系

11.3.1 EMR架构

11.3.2 使用S3存储

11.3.3 最大化EMR的使用

11.3.4 利用CloudWatch和其他AWS组件

11.3.5 访问和使用EMR

11.4 使用AWS S3

11.4.1 理解桶的使用

11.4.2 使用控制台浏览内容

11.4.3 在S3中编程访问文件

11.4.4 使用MapReduce上传多个文件到S3

11.5 自动化EMR作业流创建和作业执行

11.6 管理EMR中的作业执行

11.6.1 在EMR集群上使用Oozie

11.6.2 AWS 简单工作流

11.6.3 AWS数据管道

11.7 小结

第12章 为Hadoop实现构建企业级安全解决方案

12.1 企业级应用的安全顾虑

12.1.1 认证

12.1.2 授权

12.1.3 保密性

12.1.4 完整性

12.1.5 审计

12.2 Hadoop安全没有为企业级应用原生地提供哪些机制

12.2.1 面向数据的访问控制

12.2.2 差分隐私

12.2.3 加密静止的数据

12.2.4 企业级安全集成

12.3 保证使用Hadoop的企业级应用安全的方法

12.3.1 使用Accumulo进行访问控制保护

12.3.2 加密静止数据

12.3.3 网络隔离和分隔方案

12.4 小结

第13章 Hadoop的未来

13.1 使用DSL简化MapReduce编程

13.1.1 什么是DSL

13.1.2 Hadoop的DSL

13.2 更快、更可扩展的数据处理

13.2.1 Apache YARN

13.2.2 Tez

13.3 安全性的改进

13.4 正在出现的趋势

13.5 小结

附录 有用的阅读

前言/序言:

在这个技术不停地改变的快节奏世界中,我们已经被信息淹没。我们在不断生成和存储大量的数据。随着网络上的设备不断丰富,我们已经看到了信息格式和数据多样性的惊人增长——大数据。

但是我们要直面它——如果我们忠实于自己的话,多数组织还不能积极有效地管理这大量的数据,我们也还不能使这些信息发挥优势,从而更好地做出决策,更聪明地做生意。我们已经被大批量的数据所淹没,但同时我们又渴求知识。这会导致公司损失生产力、损失机会,并损失收入。

在过去的10年中,很多技术承诺帮助处理和分析我们拥有的大批量信息,而这些技术多数都出现了不足。我们知道这一点,因为作为专注于数据的程序员,我们已经都尝试过了。很多方法都是受专利保护的,导致供应商被锁定。一些方法看起来很有希望,但无法扩展以处理大型数据集,还有很多是宣传很好但不能满足预期,或者在关键时刻还没有准备好。

然而,ApacheHadoop登场之后,一切都不一样了。当然这里也有宣传的因素,但它是一个开源项目,已经在大规模可扩展商业应用中取得了不可思议的成功。尽管学习曲线有些陡峭,但这是我们第一次可以轻松地编写程序并对大规模数据进行分析——以一种以前我们做不到的方式。MapReduce算法可以使开发人员处理分布在可扩展机器集群上的数据,基于该算法,我们以过去无法做到的方式,在进行复杂数据分析方面取得了很大的成功。

关于Hadoop的书并不缺少。人们写了很多,而且其中很多书都很好。那么,为什么还要编写本书呢?当我们开始使用Hadoop时,希望有一本书不只是介绍API,还要解释Hadoop生态系统的诸多部分如何共同工作,并可用于构建企业级的解决方案。我们在寻找这样一本书,它可以带领读者学习数据设计及其对实现的影响,并解释MapReduce的工作原理,以及如何用MapReduce来重新表述特定的业务问题。我们在寻找如下问题的答案:

MapReduce的强项和弱点是什么,以及我们如何自定义它以便更好地满足自己的需求?

为什么我们需要在MapReduce之上有一个额外的协调层,以及Oozie是怎么满足这个需求的?

我们如何使用特定领域语言(Domain-SpecificLanguage,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应用组合到一起,这涉及很多的复杂性。通过使用HadoopWorkflow/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作为后端的搜索引擎。我们也会学习实现实时查询的整体架构,以及两个具体的产品——ApacheDrill和Cloudera的Impala——实现实时查询的方式。该章同时涵盖了另一种类型的实时应用——复杂事件处理,包括它的整体架构,以及HFlame和Storm实现该架构的方式。最后,该章提供了实时查询、复杂事件处理和MapReduce之间的一个对比。

Hadoop应用程序开发中一个经常被忽略但至关重要的主题是Hadoop安全。第10章(“Hadoop安全”)深入讨论了与大数据分析和Hadoop——确切地说是Hadoop安全模型和最佳实践——相关的安全性考虑。这里我们学习Rhino项目——一个支持开发人员扩展Hadoop安全能力(包括加密、认证、授权、单点登录(Single-Sign-On,SSO)和审计)的框架。

基于云的Hadoop使用需要有趣的架构决策。第11章(“在AWS上运行Hadoop应用”)描述了这些挑战,并涵盖了在亚马逊Web服务(AmazonWebService,AWS)云上运行Hadoop的不同方法。该章也讨论了一些权衡选择并考察了一些最佳实践。我们将学习弹性MapReduce(ElasticMapReduce,EMR)和可以用于补充Hadoop功能的额外AWS服务(例如S3、CloudWatch、SimpleWorkflow等)。

除了确保Hadoop自身的安全,Hadoop实现通常和其他企业级组件集成——数据经常被导入到Hadoop并被导出。第12章(“为Hadoop实现构建企业级安全解决方案”)涵盖了如何确保使用Hadoop的企业级应用尽可能安全,并提供了示例和最佳实践。

作为本书的最后一章,第13章(“Hadoop的未来”)浏览了一些当前和未来将发生的Hadoop行业趋势和创新。这里我们学习了可用来简化MapReduce开发的HadoopDSL及其使用,以及新的MapReduce资源管理系统(YARN)和MapReduce运行时扩展(Tez)。我们也学习了最重要的Hadoop发展方向和趋势。

使用本书需要的条件

本书中展示的所有代码都用Java实现。因此,要使用这些代码,读者需要Java编译器和开发环境。所有的开发都在Eclipse中完成,但由于每个项目都有一个Mavenpom文件,因而把代码迁移到任何您所选择的开发环境都足够简单。

所有的数据访问和MapReduce代码都在Hadoop1(ClouderaCDH3发行版和AmazonEMR)和Hadoop2(ClouderaCDH4发行版)上测试通过。因此,这些代码应当可以在任何Hadoop发行版上运行。Oozie代码在最新版的Oozie(例如,可以从ClouderaCDH4。1发行版获得)上测试通过。

声明:数据猿尊重媒体行业规范,相关内容都会注明来源与作者;转载我们原创内容时,也请务必注明“来源:数据猿”与作者名称,否则将会受到数据猿追责。

刷新相关文章

旅游交通大数据——大众旅游时代的“富矿”
旅游交通大数据——大众旅游时代的“富矿”
#榜样的力量#疾控AI分析平台WDCIP——以科技力量贡献“大数据”智慧丨数据猿新冠战“疫”公益策划
#榜样的力量#疾控AI分析平台WDCIP——以科技力量贡献“大数...
张涵诚:大数据招商平台可推动地方供给侧改革
张涵诚:大数据招商平台可推动地方供给侧改革

我要评论

精品栏目

[2017/12/19]

大数据24小时

More>

[2017/12/18-22]

大数据周周看

More>

[2017/12/18-22]

大数据投融资

More>

[2017/12/18-22]

大咖周语录

More>

[2017/12/13-20]

大数据周聘汇

More>

[2017/12/12-19]

每周一本书

More>

OSCA 2016 最佳应用评选
运营新玩法
回到顶部