购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 分布式计算平台

目前在工业界(学术界)里比较流行的几种分布式计算框架(平台)如下。

(1)Hadoop,一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(HDFS),HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上;它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,可以以流的形式访问文件系统中的数据。Hadoop框架最核心的设计就是HDFS和MapReduce。HDFS为海量的数据提供了存储,MapReduce为海量的数据提供了计算。

(2)MapReduce(MR),最为通用和流行的一个分布式计算框架,其开源实现Hadoop已经得到了极为广泛的运用。MapReduce模式的主要思想是自动将一个大的计算拆解成映射(Map)和化简(Reduce)的方式。MapReduce的优势是提高处理效率,主要用来解决大规模数据处理的问题,因此在设计之初就考虑了数据的局部性原理,将整个问题分而治之。MapReduce集群由普通PC构成,为无共享架构。在处理数据之前,将数据集分布至各个节点。

(3)Pregel,谷歌公司开发的云计算框架,其优势在于完成一些适合于抽象为图算法应用的计算时可以更为高效,可以算是一个比较好的发展中的开源实现。

(4)Storm,Twitter的项目,号称Hadoop的实时计算平台,对于一些需要实时性能的任务可以拥有比MapReduce更高的效率。

(5)Spark,加州大学伯克利分校AMP实验室的项目,其很好地利用了JVM中的heap,对于中间计算结果可以有更好的缓存支持,因此其在performance上要比MR高出很多。Shark是其基础上类似于Hive的一个项目。

(6)Dryad和Scope,都是Microsoft Research(MR)的项目。Dryad是一个更为通用的计算框架,在顶点里实现计算,通过通道实现通信,两者组成一个图形工作流;而Scope有点类似于Hive和Shark,都是将某种类似于SQL的脚本语言编译成可以在底层分布式平台上计算的任务。但是这两个项目因为不开源,所以资料不多,也没有开源项目那样的任务和社区。

3.2.1 Hadoop

对于气象资料的存储,各级气象部门都做了大量的工作。中国气象局气象信息中心建立了国家级气象资料存储检索系统,目前使用的新一代通信系统也有相应的后台数据库。但是,ORACLE、MySQL等常见的关系型数据库并不适用于所有业务场景,特别是当需要高并发、大数据量的高效率读写的时候,就满足不了需求;其扩展和升级的灵活性受到很大的限制,绝大部分关系型数据库是不支持在线升级或者增加硬件节点;遇到复杂查询特别是多表关联查询,查询效率将会大幅下降。

Hadoop的出现为海量气象数据提供了全新的、高效的数据存储、筛选、加工和挖掘方法。Hadoop是一个分布式系统基础架构,可以部署在廉价的硬件设备上,Hadoop数据节点的增加,很容易增大整个系统的处理容量,很大程度地节约存储成本。

Hadoop是目前比较流行的、面向大数据运算、开源的大数据处理系统,其高吞吐量、高容错性、易扩展的特点使它在各行各业都得到了广泛的应用。Hadoop的核心在于HDFS分布式文件系统和MapReduce分布式运算模型,其优势在于可以利用相对低端的硬件配置,实现高吞吐量的文件访问,尤其适合气象部门这种拥有海量气象数据集的业务应用。

Hive是一个数据仓库框架,它构建于Hadoop之上,其设计初衷是让熟悉SQL但Java编程技能相对较弱的用户能够对存放在HDFS中的大规模数据进行查询分析,它一般在工作站运行。Hive的本质是将查询分析命令转换为MapReduce程序实现作业运行。因此,Hive的执行效率实际上比直接执行MapReduce程序要低。人们一般通过Hive外壳程序与Hive进行交互,安装完Hive后可以通过Hiveshell方式进入外壳程序,在Hive中人们主要使用HiveQL语言。HiveQL是Hive的查询语言,它和SQL类似,精通SQL的用户可以很快熟悉HQL。Hive与传统数据库相比,有很多相似之处,比如它们都支持SQL接口,但其底层依赖于HDFS和MapReduce,所以两者之间也存在很多区别。在传统数据库中,表的模式是在加载时确定的,如果发现加载的数据不符合模式,就不会加载,这种模式成为写时模式。但是Hive在数据加载过程中并不执行验证,而是在查询时进行,如果模式有错误,则返回的查询信息有可能是空值,这种模式成为读时模式。写时模式有利于提升查询性能,但是加载数据可能需要更多时间,在很多情况下加载模式尚未确定,因而查询未确定,所以不能决定使用何种索引,这种情况正好适合Hive的读时模式。

1)架构特点

Hadoop是一个能够对大量数据进行分布式处理的软件框架,它能以一种可靠、高效、可伸缩的方式进行数据处理。Hadoop可以假设计算元素和存储会失败,因此它能维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop以并行的方式工作,通过并行处理加快处理速度,能够处理PB级数据。此外,Hadoop依赖于社区服务,因此它的成本比较低,任何人都可以使用。

Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个特点:

①高可靠性,Hadoop按位存储和处理数据的能力值得人们信赖;

②高扩展性,Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中;

③高效性,Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快;

④高容错性,Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配;

⑤低成本,与一体机、商用数据仓库以及QlikView、YonghongZ Suite等数据集相比,Hadoop是开源的,项目的软件成本因此会大大降低。

Hadoop带有用Java语言编写的框架,因此运行在Linux生产平台上是非常理想的;Hadoop上的应用程序也可以使用其他语言编写,比如C++。

Hadoop得以在大数据处理应用中被广泛使用得益于其自身在数据提取、变形和加载方面上的天然优势。Hadoop的分布式架构,将大数据处理引擎尽可能靠近存储,对像ETL这样的批处理操作相对合适,因为类似这样操作的批处理结果可以直接走向存储。

2)基本框架

随着Hadoop的发展壮大,从早期谷歌四大组件(GPS、MapReduce、Bigtable和Chubby)的开源实现,Hadoop逐步演化成一个生态系统,其基本框架结构如图3-4所示。

图3-4描述了生态系统中的各层系统,其中,除了最核心的Hadoop分布式文件系统和MapReduce编程框架外,还包括紧密相关联的HBase数据库集群和Zookeeper集群。Hadoop是一个主从体系结构,可以通过目录路径对文件执行CURD(Create,Read,Update和Delete)操作,为整个生态系统提供了高可靠性的底层存储支持。MapReduce采用“分而治之”的思想,把对大规模数据集的操作分发给一个主节点管理下的各分节点共同完成,然后通过整合各分节点的中间结果得到最终的结果,可为系统提供高性能的计算能力。HBase位于结构化存储层,Zookeeper集群为HBase提供了稳定服务和失效转移。Hadoop最初被用来处理搜索等单一的应用,随着大数据时代的来临,需要Hadoop适应更广泛的应用。针对不同类型的应用,MapReduce并行计算框架存在不足需要进行优化。为了让MapReduce同时处理更多的任务,还需要考虑作业调度的优化。HBase是基于Hadoop的开源数据库,目前存在响应速度慢和单点故障等问题。为提供高性能、高可靠性和实时读写能力也需要对其进行性能优化。HDFS作为Hadoop存储的底层,需要快速存取不同容量的文件,并增强其安全性能。从整体角度权衡性能、效率和可用性还可以进一步增强Hadoop的功能。

图34 Hadoop基本结构

3.2.2 MapReduce

MapReduce最初是谷歌提出的一个编程框架,用于大规模数据集的并行计算。MapReduce提出的初衷只是为了解决信息检索相关的问题,是基于分治的编程思想。目前,随着研究的不断深入,MapReduce的应用范围越来越广泛,但它在其他类型的作业中体现出来的不足也越来越明显。为此,国内外研究人员对MapReduce编程框架进行了优化和改进。

1)定义

MapReduce是面向大数据并行处理的计算模型、框架和平台,它包含以下三层含义:

①MapReduce是一个基于集群的高性能并行计算平台,它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群;

②MapReduce是一个并行计算与运行软件框架,它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担;

③MapReduce是一个并行程序设计模型与方法,它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理。

2)技术特点

MapReduce设计上具有以下主要技术特征。

①向“外”横向扩展,而非向“上”纵向扩展。MapReduce集群的构建完全选用价格便宜、易于扩展的低端商用服务器,而非价格昂贵、不易扩展的高端服务器。

对于大规模数据处理,由于有大量数据存储需要,显而易见,基于低端服务器的集群远比基于高端服务器的集群优越,这就是为什么MapReduce并行计算集群会基于低端服务器实现的原因。

②失效被认为是常态。MapReduce集群中使用大量的低端服务器,因此,节点硬件失效和软件出错是常态。一个良好设计、具有高容错性的并行计算系统不能因为节点失效而影响计算服务的质量,任何节点失效都不应当导致结果的不一致或不确定性;任何一个节点失效时,其他节点要能够无缝接管失效节点的计算任务;当失效节点恢复后应能自动无缝加入集群,而不需要管理员人工进行系统配置。

MapReduce并行计算软件框架使用了多种有效的错误检测和恢复机制,如节点自动重启技术,使集群和计算框架能有效处理失效节点的检测并恢复功能。

③把处理向数据迁移。传统高性能计算系统通常有很多处理器节点与一些外存储器节点相连,如用存储区域网络连接的磁盘阵列,因此,大规模数据处理时外存文件数据I/O访问会成为一个制约系统性能的瓶颈。

为了减少大规模数据并行计算系统中的数据通信开销,代之以把数据传送到处理节点(数据向处理器或代码迁移),应当考虑将处理向数据靠拢和迁移。MapReduce采用了数据/代码互定位的技术方法,计算节点将首先尽量负责计算其本地存储的数据,以发挥数据本地化特点,仅当节点无法处理本地数据时,再采用就近原则寻找其他可用计算节点,并把数据传送到该可用计算节点。

④顺序处理数据、避免随机访问数据。大规模数据处理的特点决定了大量的数据记录难以全部存放在内存,通常只能放在外存中进行处理。由于磁盘的顺序访问远比随机访问快得多,因此MapReduce主要设计为面向顺序式大规模数据的磁盘访问处理。

为了实现面向大数据集批处理的高吞吐量的并行处理,MapReduce可以利用集群中的大量数据存储节点同时访问数据,以此利用分布集群中大量节点上的磁盘集合提供高带宽的数据访问和传输。

⑤为应用开发者隐藏系统层细节。专业程序员认为写程序困难,是因为程序员需要记住太多的编程细节(从变量名到复杂算法的边界情况处理),这对大脑记忆是一个巨大的认知负担,需要高度集中注意力;而并行程序编写存在更多困难,如需要考虑多线程中诸如同步等复杂繁琐的细节。由于并发执行中的不可预测性,程序的调试查错也十分困难;而且,大规模数据处理时程序员需要考虑诸如数据分布存储管理、数据分发、数据通信和同步、计算结果收集等诸多细节问题。

MapReduce提供了一种抽象机制将程序员与系统层细节隔离开来,程序员仅需描述需要计算什么,而具体怎么去计算就交由系统的执行框架处理,这样程序员可从系统层细节中解放出来,而致力于其应用本身计算问题的算法设计。

⑥平滑无缝的可扩展性。这里指出的可扩展性主要包括两层意义上的扩展性:数据扩展性和系统规模扩展性。

理想的软件算法应当能随着数据规模的扩大而表现出持续的有效性,性能上的下降程度应与数据规模扩大的倍数相当;在集群规模上,要求算法的计算性能应能随着节点数的增加保持接近线性程度的增长。绝大多数现有的单机算法都达不到以上理想的要求;把中间结果数据维护在内存中的单机算法在大规模数据处理时很快失效;从单机到基于大规模集群的并行计算从根本上需要完全不同的算法设计。MapReduce在很多情形下能实现以上理想的扩展性特征。多项研究发现,对于很多计算问题,基于MapReduce的计算性能可随节点数目增长保持近似于线性的增长。

3.2.3 Hadoop和MapReduce的比较

Hadoop是Apache软件基金会发起的一个项目,在大数据分析以及非结构化数据蔓延的背景下,Hadoop受到了前所未有的关注。

Hadoop是一种分布式数据和计算的框架,它擅长存储大量的半结构化的数据集,数据可以随机存放,所以一个磁盘的失败并不会带来数据丢失。Hadoop也非常擅长分布式计算——快速地跨多台机器处理大型数据集合。

MapReduce是处理大量半结构化数据集合的编程模型。编程模型是一种处理并结构化特定问题的方式。例如,在一个关系数据库中,使用一种集合语言执行查询如SQL,告诉语言想要的结果,并将它提交给系统来计算出如何产生计算;还可以用更传统的语言(C++,Java)一步步地来解决问题。

MapReduce和Hadoop是相互独立的,实际上又能相互配合工作得很好。 Nkx/KCDC191PhHrzVOW/Hl7geleGcgWAF+2XlR6e4s54YOlPEymAO8zuD/g29/cw

点击中间区域
呼出菜单
上一章
目录
下一章
×