1.5 用Hadoop开发企业级应用
为了满足大数据带来的新挑战,需要重新思考构建数据分析的程序的方式。传统的在数据库中存储数据,构建应用程序的方法,对于大数据处理将不再有效。主要因为:
传统的应用程序基于事务处理型数据库,这种数据库将不再被Hadoop支持。
随着存储在Hadoop上的数据量增大,实时访问仅仅能够访问到集群上的一部分数据。
Hadoop的海量数据存储功能可以存储更多的数据集版本,不会像传统方法一样覆盖原始数据。
因此,一个典型的基于Hadoop的企业级应用如图1-2所示。在这些应用中,包括数据存储层、数据处理层、实时访问层和安全层。要实现这种体系结构,不仅需要理解Hadoop组件所涉及的API,而且需要理解他们的功能和局限性,以及每个组件在整体架构中的作用。
如图1-2所示,数据存储层包括源数据和中间数据。源数据主要来自这些外部数据源,外部数据源包括企业应用程序、外部数据库、执行日志和其它数据源。中间数据结果来自Hadoop的执行过程,它们被Hadoop的实时应用程序使用,并交付给其他应用程序和终端用户。
图1-2: Hadoop企业级应用
可以使用不同的机制将源数据转移到Hadoop,包括:Sqoop,Flume,直接安装HDFS作为一个网络文件系统(NFS),或者利用Hadoop的实时服务和应用程序。在HDFS中,新的数据不会覆盖现有数据,而是新建一个数据版本。这一点很重要,因为HDFS是一个“写一次”的文件系统。
对于数据处理层,Oozie预处理源数据,并将其转换为中间数据。不同于源数据,中间数据会被覆盖,没有多个版本,所以中间数据量不会很大。
对于实时访问层,Hadoop的实时应用程序既支持直接数据访问,也支持基于数据集的访问。这些应用程序读取基于Hadoop的中间数据,并将源数据存储在Hadoop。该应用程序也可以用于服务用户,或者用于其它企业的Hadoop集成。
源数据用来存储和初步处理数据,中间数据用于传递和整合数据。因为采用了源数据和中间数据完全分离的结构,所以允许开发人员在没有任何事务处理需求的情况下,构建任何虚拟和复杂的应用程序。通过中间预处理过程,明显减少了服务数据量,使得实时数据访问更加灵活。
HADOOP扩充性
虽然许多文章认为,对于开发人员来讲,Hadoop隐藏了底层的复杂性。但是,其实是这些文章没有充分认识到Hadoop的可扩展。
通过设计Hadoop的实现方式,可以使开发人员轻松、无缝地集成新的功能到Hadoop中执行。Hadoop明确指定一些类库来负责MapReduce执行的不同阶段。通过这种方式,满足了开发者执行特定问题的要求,从而确保每一个作业以最低成本、最高性能性能来执行。
可以自定义Hadoop执行的以下内容:
自定义Hadoop并行执行问题的方式,包括被分割的方式和执行的位置
支持新的输入数据类型和数据定位
支持新的输出数据类型
自定义输出数据的位置
本书有一部分内容,在他人工作成果的基础上,对自定义方法,以及实现方式进行了专门的描述。
本书涵盖了Hadoop企业级应用的所有主要层,如图1-2所示。
第2章介绍了构建数据层的方法,包括HDFS和HBase(架构和API)。然后,对两者进行对比分析,以及如何将HDFS和HBase相结合。本章还介绍了Avro(Hadoop的新的序列化框架),以及它在存储或访问数据中的作用。最后,你将了解HCatalog,以及用它来做广告和访问数据的方式。
本书将对数据处理进行了大量的描述。对于应用程序的数据处理部分,笔者建议使用MapReduce和Oozie。
在本书中,为什么以MapReduce源码为核心?
你可能会问,为什么本书将重点放在MapReduce源码上,而不是可以让MapReduce编程变得更简单的高级语言上面。你可以在网上或者Hadoop社区内,找到很多关于这方面的讨论。在这些讨论中给出的解释是,MapReduce源码量(就代码行数而言)比提供相同的功能的Pig源码量通常要多很多。尽管这是一个不争的事实,不过还有一些其他因素:
并不是什么都可以描述为一种高级语言。有些任务,更适合使用传统的Java代码来执行。
如果你写的代码仅需要执行一次,那么代码的行数可能对你很重要。但是,如果你正在编写企业级应用,那么你应该考虑其他标准,包括性能、可靠性和安全性。通常情况下,MapReduce源码提供了更多的途径,从而更容易实现这些特质。
MapReduce通过自定义方式,为用户提供的更多功能,以进一步提高应用程序的性能、可靠性和安全性。
在第3章中,您将了解MapReduce的架构、主要构成和编程模型。本章介绍了MapReduce的应用程序设计、设计模式和MapReduce注意事项。本章还讲介绍MapReduce的执行是如何实现的。正如所提到的,MapReduce最强的特征之一是它可以自定义执行。第4章会介绍自定义选项的详细信息,并举例说明。第5章通过演示实例,对MapReduce进一步讨论,构建可靠的MapReduce应用。
尽管MapReduce功能很强大,但是对于一个切实可行的解决方案,通常需要将多个MapReduce应用集合到在一起。这个过程非常复杂,通过使用Hadoop的Workflow/Coordinator(工作流/协调员)引擎,可以被大大简化MapReduce应用的集成。
Oozie的价值
Oozie是Hadoop中最容易被低估的组件。很少有人(甚至没有)在Hadoop书籍讨论这个极其重要的组件。本书不但彰显了Oozie什么可以做,而且还提供了一个端到端的例子,用来展示如何利用Oozie功能来解决实际问题。类似于Hadoop的其余部分,Oozie的功能也具有很好的扩展性。开发者可以通过不同的方法来扩展Oozie的功能。
在Hadoop中,最容易被低估的挑战是:将Hadoop执行与企业处理的其余部分进行整合。使用Oozie来协调MapReduce应用,并通过公开Oozie API的方式公开了Hadoop进程。通过这种方式,你会很容易就找到更好的集成方法,对Hadoop处理和企业处理部分进行集成。
第6章描述了Oozie是什么,Oozie的体系结构、主要组成、编程语言和执行模型。为了更好地解释每个Oozie组件的功能和角色,第7章通过使用Oozie应用解决端到端的实际问题。第8章中,通过展示Oozie的一些高级功能,对Oozie进一步描述。这些高级功能包括自定义Workflow活动、动态生成Workflow和支持超级JAR文件(一个包含了所有的包及其依赖关系的JAR文件)。
第9章主要讲解实时访问层。该章首先介绍了一个工业中实时Hadoop应用实例,然后针对实现方式提出了整体架构。接着,介绍了建立这种实现的三种主要方法——基于HBase的应用程序、实时查询以及基于流的处理。本章介绍了总体架构,并提供了基于HBase实时应用的两个例子。然后,描述了一个实时查询体系结构,并讨论了两个具体的实现——Apache Drill 和 Cloudera’s Impala。还介绍了实时查询和MapReduce的对比。最后,您将了解基于Hadoop的复杂事件处理,以及两个具体的实现——Strom和HFlame。
开发企业级应用需要大量的规划,以及信息安全方面的策略。第10章将重点讲解Hadoop的安全模型。
随着云计算的发展,许多企业尝试将他们的Hadoop运行在云上。第11章的重点是,通过使用EMR实现,在亚马逊的云上运行Hadoop应用;并且介绍了其它AWS服务(如S3),用来补充Hadoop的功能。本章还介绍了,通过使用不同的方法来运行云上的Hadoop,并讨论了最佳实践方案。
除了Hadoop自身的安全问题外,通常Hadoop还需要集成其他企业的组件,来实现数据的导入和导出。第12章将重点介绍,如何才能维护好那些使用了Hadoop的企业级应用,并提供了示例和最佳安全实践,来确保所有Hadoop企业级应用的安全运行。
1.6 总结
本章高度概括了大数据和Hadoop之间的关系。并介绍了大数据及其价值,还介绍了企业面临的大数据挑战,包括数据存储和处理的挑战。通过本章,你还了解了Hadoop及其历史。
通过本章,你了解了Hadoop特点,并知道了为什么Hadoop如此适合大数据处理。本章还概述了Hadoop的主要组件,并介绍了一些例子,用来展示Hadoop如何简化数据科学,简化创建企业应用程序的过程。
本章介绍了关于Hadoop发行版本的基础知识,以及为什么许多企业倾向于选择特定供应商的发行版。因为他们不希望处理Apache项目中的兼容问题,或者他们需要供应商的技术支持。
在这里我还是要推荐下我自己建的大数据学习交流qq裙:522189307 , 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴。上述资料加群可以领取