4.2.2 大数据处理技术

4.2.2 大数据处理技术

大数据处理技术是大数据技术的核心技术,大数据处理技术的优劣往往决定了大数据平台的优劣,常用的大数据处理技术有Map-Reduce离线计算框架、Spark内存计算框架、Storm流式计算框架、轻量级弹性计算平台等几种[118]

1.Map-Reduce离线计算框架

Map-Reduce是谷歌公司提出的一种离线计算框架,目前该模型已经成了事实上的并行计算标准。Map-Reduce主要用于大规模数据集(1 TB以上)的并行运算。Map(映射)和Reduce(化简)反映了并行计算两个主要的处理环节,对应两个具体的函数。Map函数用来把一组键值对映射成一组新的键值对,后续将分发到分布式处理节点中进行处理。而Reduce函数则用来保证所有的映射的键值对中的每一个共享相同的键组,实现多节点处理结果的整合。除了Map和Reduce之外,还包括了Split、Partition等过程,这些过程的控制是保证Map-Reduce高效执行的关键。简单地说,映射函数就是对由多个独立元素组成的概念列表中的每个元素进行指定的操作。大规模运算是相对独立的,所以在高度并行的环境下化简函数依然很有用[119]

2.Spark内存计算框架

Spark是一种内存计算集群环境,启用了内存分布数据集,提供了交互式查询。Spark是在Scala语言环境下实现的,Spark把Scala作为它的应用程序框架,因此Scala语言的特点也铸就了大部分Spark的成功。与Hadoop不同的是,Spark能够和Scala紧密集成,其中的Scala能够像操作本地的集合对象一样容易地操作分布式数据。虽然最早创建Spark的目的是能够支持分布式数据集上的迭代作业,但实际中Spark已经变成了对Hadoop的一种补充,通过类似YARN(Yet Another Resourse Negotiator)的第三方集群框架支持,可以在Hadoop文件系统中并行运行。

Spark是针对集群计算中特定类型的工作负载,即那些在并行操作间反复调用工作数据集的工作负载而专门设计的。为了对这类工作负载进行优化,Spark引入内存集群计算的概念,从而能够在内存集群计算时把数据集缓存在内存中,达到缩短访问延迟的目的。除此之外,Spark还引入了弹性分布式数据集(Resilient Distributed Datasets,RDD)的抽象。RDD是指分布在一组节点中的只读对象的集合。这些集合具有弹性,即便数据集丢失一部分,仍然能够对其进行重建。重建数据集丢失部分的过程需要依赖容错机制,这一机制允许基于数据衍生过程重建数据集丢失部分的信息。RDD以一个Scala对象的形式表示,且能够从文件中创建[120]

3.Storm流式计算框架

Storm流式计算框架的产生源于Map-Reduce离线计算框架对流处理问题的弱势而出现的,Map-Reduce始终不能使它很好地适用于流处理的情境,需要研发全新的架构来处理这类任务。此外,传统的复杂事件处理(Complex Event Processing,CEP)解决方案也让人们心存疑虑,担心它的非分布式架构的可扩展性可能不足,不具有充分的可扩展性来满足海量数据的处理要求。针对这一特殊的问题领域Storm应运而生[121]

从数据源特征角度来看,Storm计算框架与Map-Reduce有明显的不同,Storm的数据源是动态的,即收到一条处理一条,而Map-Reduce的数据源是静态的,数据被处理前整个数据集就已经确定,且计算过程中不能被修改。Storm适用于不同的三种场景:分布式远程过程调用协议(Distributed Remote Procedure Call Protocol,Distributed RPC)、持续计算(Continuous Computation)以及事件流(Stream Processing)。这种实时计算框架能解决很多实际应用问题,如公众行为实时分析,偏好变化趋势预测等。除此之外Storm还有以下特点。

(1)可扩展性好:若某个集群的处理能力不足,只需把一些新的节点加入其中,就能把计算转移至新加入的节点来满足需要。可扩展性的关键在于计算中各种所需的状态都是自满足的,不会对特定节点存在强依赖。如此一来计算就能够很容易地在节点之间迁移,整个系统计算能力不够用的时候,加入新的节点就可以。Storm的计算模型本身是扩展好的,可以很容易地分布在多个节点上。

(2)系统可靠性高:Storm这个分布式流计算框架是建立在Zookeeper的基础上的,大量系统运行状态的元信息都序列化在Zookeeper中。当一个节点出错时,对应的关键状态信息并不会丢失,换言之Zookeeper的高可靠性保证了Storm的高可靠性。

(3)计算可靠性高:分布式计算涉及多个节点或进程间的通信与依赖,最为关键的问题是如何正确地维护所有节点的状态和依赖关系。Storm能够很好地保证整套机制正确运行,确保消息被完全处理。

4.轻量级弹性计算平台

伴随着大数据平台的高速发展,不断出现了大量基于数据密集型应用的计算框架,例如:支持离线处理的Map-Reduce,支持在线处理的Storm,以及迭代式计算框架Spark和流式处理框架S4。这些计算框架分别由不同的公司和研究所开发,且各有所长,分别解决了某些方面的应用问题。在政府宏观决策中,这些框架都可能被分别或同时采用。考虑到数据共享、运维成本、资源利用率等因素,用户通常希望能够把这些框架全部都部署在同一个公共集群中,以便它们可以共享集群资源,并统一地使用资源,同时采用某种资源隔离方案对各个任务进行隔离,这样的需求下轻量级弹性计算平台应运而生。其中,Apache YARN就是最主要的代表之一[122]。弹性计算平台的目的并不只是支持Map-Reduce计算框架,而是希望能够实现对多种框架进行统一管理。与传统的一个计算框架对应一种集群的模式相比,弹性计算平台这种共享集群的模式具有很多优点。

(1)资源利用率高:弹性计算平台通过多种计算框架对资源进行共享,可以更加充分地利用集群中的资源。

(2)运维成本低:通常弹性计算平台只需要少量的管理员就能够实现对多个框架统一的管理和维护。

(3)数据共享:随着数据量的不断增加,进行跨集群间数据的移动时,不但花费的时间越来越多,而且硬件的成本也会随之增长。而弹性计算平台能够让多种框架共享硬件资源和数据,可以大大降低数据移动的成本。