Hadoop大数据实战权威指南(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 Hadoop大数据应用生态系统

2.1.1 架构的基本理论

1. 架构的概念

架构(Architecture)一词最初来源于建筑业,用于表示建筑物的整体结构模式和风格,它把整个建筑物看成一个系统,强调整体受力空间结构方式的合理性和有效性。架构实际上是一个广泛应用的概念,通常指系统的整体结构及其组成部分的关系。

随着计算机、网络和软件技术的不断发展,系统变得日益复杂,因而架构一词在信息领域变得越来越重要。IEEE给出的架构定义是:架构是一个系统的基础组织结构,包括系统的组件构成、组件之间的相互关系、系统和其所在环境的关系,以及指导系统设计和演化的相关准则

必须指出,架构总是用来描述系统结构的,无论系统是软件系统还是硬件系统,也无论业务系统还是应用系统,甚至无论数据系统还是存储系统。由于系统可以从不同的角度来划分和观察,因此就出现了各种冠以“架构”的系统描述。例如,当我们关注系统的软件构成方式时,就有了软件架构的概念;如果关注系统的硬件构成方式,就有了硬件架构(或物理架构)的概念;如果关注系统在处理数据过程的集中性与分散性,就有了集中式架构和分布式架构的概念。此外,我们知道,软件涉及程序、数据和文档,所以软件架构可以进一步分为程序(或软件组件)架构、数据架构或数据库架构。可见,架构一词具有广泛的适用性,但不管架构一词如何被广泛使用,其核心理念都是强调系统的组织结构及其组成部分的关系。

2. 系统架构的设计目标

归根结底,人们之所以需要架构,是因为随着系统的复杂性越来越高,设计人员必须从系统的高度对整个平台进行全局性的思考。

系统架构的设计目标主要包括可靠性、安全性、可伸缩性、可扩展性、可维护性等。

可靠性是指系统的运行过程中出错的概率非常小,用户的商业经营和管理可以完全依赖该系统。

安全性是指系统具有保护信息的能力,通过加密、认证、访问控制等手段可确保系统的数据处于完整、可控的状态。

可伸缩性是指系统必须能够在用户的使用率、数目很快增加的情况下,保持合理的性能,只有这样才能适应用户市场扩展的可能性。

可扩展性是指在新技术出现的时候,一个系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展。

可维护性包括两个方面:一是排除现有的错误;二是将新的需求反映到现有系统中。一个易于维护的系统,意味着可以有效降低技术支持的成本。

3. 技术架构

技术架构是指系统中组件的组织结构,由于技术包括软件和硬件两个方面,因此技术架构也可以分为软件架构和硬件架构两个方面。

研究大数据的技术架构有三个基本观点需要确立。

(1)对于大数据部署和应用来说,技术总是具体的,抽象地讨论技术没有太多意义。例如,银行中的传统系统基本上都采用了IOE技术,即以IBM、Oracle和EMC为代表的商业软件与相关硬件技术,而大数据时代,银行业则普遍在探讨所谓的去IOE技术,也就是采用像Hadoop和NoSQL这样的开源技术。因此,分析和讨论大数据系统的架构,应当而且必须以目前最重要的开源技术为对象。

(2)从应用的角度看,技术架构也是具体的,不同规模与性质的企业可能会有不同的系统架构。既然是研究架构,就需要理解各种不同架构的共同点,以便揭示大数据系统设计的内在规律和演化趋势,从而指明正确的系统建设方向。

(3)大数据系统的抽象模式实际上就是大数据系统的基本架构。对这个架构进行初次分解,就得到采集层、存储层、分析层和应用层四个层次,因此,技术架构也需要相应地从这四个层次来描述,这时就可能出现各种角度的架构概念,如软件架构、总体架构、数据库架构、分布式架构、部署架构等。

2.1.2 Hadoop大数据应用生态系统的主要组件及其关系

目前,以Hadoop为核心,整个大数据系统的应用与研发已经形成了一个基本完善的生态系统。图2-1给出了Hadoop大数据应用生态系统中最主要的组件,该图描述了这些组件的地位,以及它们之间的相互作用关系,这是一个基本架构。

HDFS(Hadoop分布式文件系统)源自Google的GFS论文,该论文发表于2003年10月,HDFS是Google GFS的实现版。HDFS是Hadoop大数据生态系统中数据存储管理的基础,是一个高度容错的系统,能检测和应对硬件故障,可在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,可提供高吞吐量的应用程序数据访问功能,适合带有大型数据集的应用程序。HDFS提供一次写入多次读取的机制,数据以块的形式同时分布存储在集群中不同的物理机器上。

图2-1 Hadoop大数据应用生态系统中最主要的组件

MapReduce(分布式计算框架)源自Google的MapReduce论文,该论文发表于2004年12月,MapReduce是Google MapReduce的克隆版。MapReduce是一种分布式计算模型,用于进行海量数据的计算,它屏蔽了分布式计算框架细节,将计算抽象成Map和Reduce两部分。其中Map对数据集上的独立元素进行指定的操作,生成键-值(Key-Value)对形式的中间结果;Reduce则对中间结果中相同“键”的所有“值”进行规约,从而得到最终的结果。MapReduce非常适合在由大量计算机组成的分布式并行环境中进行数据处理。

HBase(分布式列存数据库)源自Google的BigTable论文,该论文发表于2006年11月,HBase是Google BigTable的实现版。HBase是一个建立在HDFS之上,面向结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。HBase采用Google BigTable的数据模型,即增强的稀疏排序映射表(Key-Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,保存在HBase中的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

ZooKeeper(分布式协作服务)源自Google的Chubby论文,该论文发表于2006年11月,ZooKeeper是Google Chubby的实现版。ZooKeeper的主要目标是解决分布式环境下的数据管理问题,如统一命名、状态同步、集群管理、配置同步等。Hadoop大数据生态系统中的许多组件依赖于ZooKeeper,运行在计算机集群上,用于管理Hadoop操作。

Hive(数据仓库)由Facebook开源,最初用于解决海量结构化的日志数据统计问题。Hive定义了一种类似于SQL的查询语言(HQL),将SQL转化为MapReduce后在Hadoop上执行,通常用于离线分析。HQL用于运行存储在Hadoop上的查询语句,Hive使不熟悉MapReduce的开发人员也能编写数据查询语句,这些语句被翻译为Hadoop上的MapReduce。

Pig(ad-hoc脚本)由Yahoo开源,其设计动机是提供一种基于MapReduce的ad-hoc脚本(计算在查询时进行)数据分析工具。Pig定义了一种数据流语言——Pig Latin,它是MapReduce编程复杂性的抽象,Pig平台包括运行环境和用于分析Hadoop数据集的Pig Latin。

Sqoop是SQL-to-Hadoop的缩写,主要用于关系数据库和Hadoop之间的数据传输。数据的导入和导出本质上是MapReduce程序,充分利用了MapReduce的并行化和容错性。Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间传输数据。

Flume是Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点,它将数据从产生、传输、处理并最终写入目标的过程抽象为数据流。在具体的数据流中。数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议的数据。同时,Flume具有对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总体来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统,当然也可以用于收集其他类型的数据。

Mahout(数据挖掘算法库)起源于2008年,最初是Apache Lucent的子项目,它在极短的时间内取得了长足的发展,现在是Apache的顶级项目。Mahout的主要目标是创建一些可扩展的、机器学习领域经典算法的实现,旨在帮助开发人员更加方便、快捷地创建智能应用程序。Mahout现在已经包含了在聚类、分类、推荐引擎(协同过滤)和频繁集挖掘中广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具,以及与其他存储系统(如数据库、MongoDB或Cassandra)集成的数据挖掘支持架构。

Yarn(分布式资源管理器)是下一代的MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决Hadoop扩展性较差、不支持多计算框架而提出的。Yarn是一个通用的运行时框架,用户可以编写自己的计算框架。

Mesos(分布式资源管理器)是一个诞生于UC Berkeley的研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,如Twitter。与Yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持Map Reduce、Steaming等多种运算框架。

Tachyon是以内存为中心的分布式文件系统,拥有较高的性能和容错能力,能够为集群框架(如Spark、MapReduce)提供可靠的内存级速度的文件共享服务。Tachyon诞生于加州大学伯克利分校AMP Lab。

Spark(内存DAG计算模型)是一个Apache项目,也被称为快如闪电的集群计算,它拥有一个开源社区,是目前最活跃的Apache项目。最早的Spark是加州大学伯克利分档AMP Lab所开源的、类似于Hadoop MapReduce的通用并行计算框架。Spark提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark可以让程序在内存中运行时的速度提升100倍,或者在磁盘上运行时的速度提升10倍。

Spark GraphX最先是加州大学伯克利分校AMP Lab的一个分布式图计算框架项目,目前整合在Spark运行框架中,为其提供BSP大规模并行图计算能力。

Spark MLib是一个机器学习库,它提供了各种各样的算法,这些算法用来在集群上执行分类、回归、聚类、协同过滤等操作。

Kafka是Linkedin于2010年12月开源的消息系统,主要用于处理活跃的流式数据。活跃的流式数据在Web网站应用中非常常见,这些数据包括网站的PV(Page View)、用户访问了什么内容、搜索了什么内容等。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。

Apache Phoenix是HBase的SQL驱动(HBase SQL接口),Phoenix使得HBase支持通过JDBC的方式进行访问,并将SQL查询转换成HBase的扫描和相应的动作。

Apache Ambari的作用是创建、管理、监视Hadoop的集群,是为了让Hadoop以及相关的大数据软件更容易使用的一个Web工具。

在大数据的发展历程中,有大量不同类型和用途的组件相继产生,它们实现了大数据系统的4个层次中的各种功能。但是,在激烈的竞争浪潮中,最终为业界和学术界认可并得到广泛应用的组件或框架只有20多种。