• 1.摘要
  • 2.基本信息
  • 3.基本介绍
  • 3.1.内容简介
  • 3.2.作者简介
  • 4.图书目录
  • 5.序言

Hadoop高级编程:构建与实现大数据解

卢博林斯凯著书籍

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

基本信息

  • 书名

    Hadoop高级编程:构建与实现大数据解

  • 外文名

    Professional Hadoop Solutions

  • 作者

    卢博林斯凯(Boris Lublinsky)

  • 类型

    计算机与互联网

  • 出版社

    清华大学出版社

基本介绍

内容简介

《Hadoop高级编程:构建与实现大数据解决方案》由清华大学出版社出版。

作者简介

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 当大数据遇见Hadoop2 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 HDFS15 2.1.1 HDFS架构15 2.1.2 使用HDFS文件19 2.1.3 Hadoop特定的文件类型21 2.1.4 HDFS联盟和高可用性26 2.2 HBase28 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 Avro45 2.5 利用HCatalog管理元数据49 2.6 为应用程序选择合适的Hadoop数据组织形式51 2.7 小结53 第3章 使用MapReduce处理数据55 3.1 了解MapReduce55 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 是否使用MapReduce82 3.3.6 常见的MapReduce设计陷阱83 3.4 小结84 第4章 自定义MapReduce执行85 4.1 使用InputFormat控制MapReduce执行85 4.1.1 为计算密集型应用程序实现InputFormat87 4.1.2 实现InputFormat以控制Map的数量93 4.1.3 实现用于多个HBase表的InputFormat99 4.2 使用自定义RecordReader以自己的方式读取数据102 4.2.1 实现基于队列的RecordReader102 4.2.2 为XML数据实现RecordReader105 4.3 使用自定义输出格式组织输出数据109 4.4 使用自定义记录写入器以自己的方式写入数据119 4.5 使用组合器优化MapReduce执行121 4.6 使用分区器控制Reducer执行124 4.7 在Hadoop中使用非Java代码128 4.7.1 Pipes128 4.7.2 Hadoop Streaming128 4.7.3 使用JNI129 4.8 小结131 第5章 构建可靠的MapReduce应用程序133 5.1 单元测试MapReduce应用程序133 5.1.1 测试Mapper136 5.1.2 测试Reducer137 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 认识Oozie154 6.2 Oozie Workflow155 6.2.1 在Oozie Workflow中执行异步操作159 6.2.2 Oozie的恢复能力164 6.2.3 Oozie Workflow作业的生命周期164 6.3 Oozie Coordinator165 6.4 Oozie Bundle170 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 访问Oozie179 6.8 Oozie SLA180 6.9 小结185 第7章 使用Oozie187 7.1 使用探测包验证位置相关信息的正确性187 7.2 设计基于探测包的地点正确性验证188 7.3 设计Oozie Workflow190 7.4 实现Oozie Workflow应用程序193 7.4.1 实现数据准备Workflow193 7.4.2 实现考勤指数和聚类探测包串Workflow201 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 为迭代过程定义Workflow241 8.2.4 动态Workflow生成244 8.3 使用Oozie Java API247 8.4 在Oozie应用中使用uber jar包251 8.5 数据吸收传送器256 8.6 小结263 第9章 实时Hadoop265 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 Drill296 9.3.2 Impala298 9.3.3 实时查询和MapReduce的对比299 9.4 使用基于Hadoop的事件处理系统300 9.4.1 HFlame301 9.4.2 Storm302 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 初识AWS338 11.2 在AWS上运行Hadoop的可选项339 11.2.1 使用EC2实例的自定义安装339 11.2.2 弹性MapReduce339 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 访问和使用EMR346 11.4 使用AWS S3351 11.4.1 理解桶的使用352 11.4.2 使用控制台浏览内容354 11.4.3 在S3中编程访问文件355 11.4.4 使用MapReduce上传多个文件到S3365 11.5 自动化EMR作业流创建和作业执行367 11.6 管理EMR中的作业执行372 11.6.1 在EMR集群上使用Oozie372 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 什么是DSL400 13.1.2 Hadoop的DSL401 13.2 更快、更可扩展的数据处理412 13.2.1 Apache YARN412 13.2.2 Tez414 13.3 安全性的改进415 13.4 正在出现的趋势415 13.5 小结416 附录 有用的阅读417

序言

前 言 在这个技术不停地改变的快节奏世界中,我们已经被信息淹没。我们在不断生成和存储大量的数据。随着网络上的设备不断丰富,我们已经看到了信息格式和数据多样性的惊人增长——大数据。 但是我们要直面它——如果我们忠实于自己的话,多数组织还不能积极有效地管理这大量的数据,我们也还不能使这些信息发挥优势,从而更好地做出决策,更聪明地做生意。我们已经被大批量的数据所淹没,但同时我们又渴求知识。这会导致公司损失生产力、损失机会,并损失收入。 在过去的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网站下载获得。 源代码 在学习本书中的示例时,读者可以选择手工输入所有的代码,也可以使用随书的源代码文件。本书的源代码可以下载获得。具体对本书而言,专门的代码下载链接。 读者也可以按照本书英文版的ISBN(本书英文版的ISBN是978-1-118-61193-7)搜索本书来找到这些代码。 在整个选定的各章中,读者也可以在需要时,从代码清单的标题和文本中找到代码文件名称的引用。 大多数代码都压缩在.ZIP、.RAR文档或适合特定平台的类似文档中。一旦下载了这些代码,只需要使用合适的压缩工具将其解压即可。 注意: 由于许多图书的标题都很类似,因此按ISBN搜索是最简单的,本书英文版的ISBN是978-1-118-61193-7。 另外,读者也可以通过网址进入Wrox代码下载主页面,找到本书以及所有其他Wrox图书的可用代码。 勘误表 尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果您在本书中发现了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。 要找到本书英文版的勘误表,可以登录go/prohadoopsolutions,单击Errata链接。在这个页面上可以查看到Wrox编辑已提交和粘贴的所有勘误项。 如果您发现的错误在我们的勘误表里还没有出现的话,请登录并完成那里的表格,把您发现的错误发送给我们。我们会检查您的反馈信息,如果正确,我们将在本书的勘误表页面张贴该错误消息,并在本书的后续版本加以修订。 要与作者和同行讨论,请加入P2P论坛。这个论坛是一个基于Web的系统,便于您张贴与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了订阅功能,当您感兴趣的主题在论坛上有新帖子发布时,系统会向您发送电子邮件。Wrox的作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。 有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤: (1) 进入,单击Register链接。 (2) 阅读使用协议,并单击Agree按钮。 (3) 填写加入该论坛所需要的信息和自己希望提供的其他可选信息,单击Submit按钮。 (4) 您会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。 注意: 不加入P2P也可以阅读论坛上的消息,但要张贴自己的消息,就必须先加入该论坛。 加入论坛后,就可以张贴新消息,响应其他用户张贴的消息。可以随时在Web上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。 要想了解更多的有关论坛软件的工作情况,以及P2P和Wrox图书的许多常见问题的解答,就一定要阅读FAQ,只需要在任意P2P页面上单击FAQ链接即可。