首页 理论教育 基于Spark的云计算平台,助力海洋大数据处理

基于Spark的云计算平台,助力海洋大数据处理

时间:2023-08-21 理论教育 版权反馈
【摘要】:2010年出现的Spark系统,与Hadoop架构类似,但是在许多方面都弥补了Hadoop的不足,比如在进行批处理时更加高效,并有更低的延迟。因此在海洋大数据时代,Spark给人们带来了新的选择。但Spark本身是一个基于内存云进行快速数据计算的框架,不具备对计算任务的管理能力,所以在使用过程中需要搭配其他资源管理平台来管理计算任务。此外,随着Scala新版本解释器的完善,Spark还能够用于交互式查询大数据集。Spark的基础是内存云。Spark技术有以下特点:快速数据处理。

基于Spark的云计算平台,助力海洋大数据处理

互联网时代,数据量呈指数级增长,大数据时代正式到来。而海洋数据属于典型的大数据,随着海洋数据获取手段由传统的人工观测到如今高新信息技术的观测、监测设备的革命性变化,近年来以卫星遥感数据为代表的海洋数据呈现爆炸性的增长,如利用传感器对海洋进行远距离非接触观测的卫星遥感数据;利用机载航空摄影测量设备实现精细化的多要素数据获取的航空遥感数据;定点的海洋环境要素数据;相应的重点海洋要素数据及走航轨迹分布规律的调查数据;装载各种传感器设备获得重点区域的主要海洋要素数据;利用超声波无线通信手段获得某区域内的海底多要素数据等。海洋大数据的特点包括数据规模巨大、数据类型繁多和超长时间序列等[1]

图5-1为我国国家卫星海洋应用中心每年发布的《中国海洋卫星应用报告》[2]中HY-1B卫星和HY-2A卫星每年存档的数据量柱状图,可以看出,海洋数据的增长近年来非常迅猛。

图5-1 2009-2013 年海洋卫星存档数据量

为了对海量数据进行存储、计算和挖掘,基于云计算、内存计算的各种高性能系统不断革新,例如现已广泛使用的高级集群编程模型,如MapReduce和Dryad。这些系统将分布式编程简化为自动进行位置调度、提供容错及负载均衡机制,使得大量用户能够在商用集群上分析超大数据集[3]

Hadoop是一个能够对大量数据进行分布式处理的软件框架,它的MapReduce编程模式是最具代表性的批处理模式。MapReduce的核心设计思想在于:①将问题分而治之;②把计算推送到数据而不是把数据推送到计算,有效地避免数据传输过程中产生的大量通信开销。MapReduce模型简单,且现实中很多问题都可用MapReduce模型来表示。Hadoop的可靠性在于,它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop的高效性在于,它以并行的方式工作,通过并行处理加快处理速度。Hadoop还是可伸缩的,能够处理PB级数据。Hadoop具有高容错性,能够自动保存数据的多个副本,并且能够自动将失败的任务重新进行分配。尽管Hadoop适合大多数批处理工作负载,而且在大数据时代成为企业的首选技术,但由于以下限制,对一些工作负载它并不是最优选择:缺少对迭代的支持和需要将中间数据存在硬盘上以保持一致性,因此会有比较高的延迟[4]。大多数现有的集群计算系统都是基于非循环的数据流模型。从稳定的物理存储(如分布式文件系统)中加载记录,记录被传入由一组确定性操作构成的数据库可用性组(database availability group,DAG),然后写回稳定存储。DAG数据流图能够在运行时自动实现任务调度和故障恢复。尽管非循环数据流是一种很强大的抽象方法,但仍然有些应用无法使用这种方式描述。因此弹性分布式数据集应运而生。

2010年出现的Spark系统,与Hadoop架构类似,但是在许多方面都弥补了Hadoop的不足,比如在进行批处理时更加高效,并有更低的延迟。因此在海洋大数据时代,Spark给人们带来了新的选择。Spark是由美国加利福尼亚大学伯克利分校AMP实验室开发的,一个基于内存计算的开源集群计算系统,它使用了弹性分布式数据集(resilient distributed datasets,RDD),把所有计算的数据保存在分布式的内存中,形成内存云。这种做法大大减少了数据处理过程中磁盘的读写,更好地运行了计算机的迭代算法,大幅降低了所需时间,为快速处理大数据提供了平台。但Spark本身是一个基于内存云进行快速数据计算的框架,不具备对计算任务的管理能力,所以在使用过程中需要搭配其他资源管理平台来管理计算任务。Spark采用Scala语言实现,提供类似于DryadLINQ的集成语言编程接口,使用户可以非常容易地编写并行任务。此外,随着Scala新版本解释器的完善,Spark还能够用于交互式查询大数据集。

RDD是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象,它表示已被分区、不可变的并能够被并行操作的数据集合,通常缓存到内存中,并且每次对RDD数据集操作之后的结果,都可以存放到内存中,下一个操作可以直接从内存中输入,省去了MapReduce框架中由于Shuffle操作所引发的大量磁盘IO。这对于迭代运算比较常见的机器学习算法、交互式数据挖掘来说,效率提升比较大[5]

RDD是逻辑集中的实体,但在集群中的多台机器上进行了分区。通过对多台机器上不同RDD联合分区的控制,就能够减少机器之间的数据混合(data shuffling)。RDD只能通过在以下两者上执行确定性操作来创建:稳定物理存储中的数据集和其他已有的RDD。这些确定性操作称为转换(transformation),如map、filter、GroupBy、join(转换不是程序开发人员在RDD上执行的操作)。RDD不需要物化,含有如何从其他RDD衍生(即计算)出本RDD的相关信息(即Lineage),据此可以从物理存储的数据计算出相应的RDD分区。如果数据运算的过程当中出现错误,RDD的容错机制通过重建丢失数据的方式,来维护在数据分析过程当中产生的部分数据集信息。(www.xing528.com)

Spark的基础是内存云。内存云是指将当前查询到的数据放在内存中,运用多线程和多机并行来加速整个查询,并且支持多种类型的工作负载,除了常见和基本的SQL查询之外,通常还支持数据挖掘,更有甚者支持full stack (全栈),也就是常见编程模型都要支持,比如SQL查询、流计算和数据挖掘等[6]

Spark还具有一定的创造性,其在保证容错的前提下,用内存来承载工作集。根据之前内存云的介绍,基于内存计算极大地提升了平台计算性能。在容错机制上,Spark采用更新日志数据的方法,而Spark记录的是粗粒度的RDD更新,这样可以大大减少网络通信的开销以及检查点的数据冗余。同时,这种做法也不会出现其他的副作用[7]

Spark技术有以下特点:

(1)快速数据处理。Spark允许Hadoop集群中的应用程序在内存中以100倍的速度运行,即使在磁盘上运行也能快10倍。Spark通过减少磁盘IO来达到性能提升,它们将中间处理数据全部放到内存中。Spark使用了RDD的理念,这允许它可以在内存中透明地存储数据,只在需要时才持久化到磁盘。这种做法大大减少了数据处理过程中磁盘的读写,大幅降低了所需时间。

(2)易于使用,Spark支持多语言。Spark支持Java、Scala及Python,这允许开发者在自己熟悉的语言环境下进行工作。它自带了80多个高等级操作符,允许在shell中进行交互式查询。

(3)支持复杂查询。除简单的“map”及“reduce”操作之外,Spark还支持SQL查询、流式查询及复杂查询,比如开箱即用的机器学习机图算法。同时,用户可以在同一个工作流中无缝地搭配这些能力。

(4)实时的流处理。对比MapReduce只能处理离线数据,Spark支持实时的流计算。Spark依赖Spark Streaming对数据进行实时处理,当然在YARN之后Hadoop也可以借助其他工具进行流式计算。在容错方面,不像其他的流解决方案,比如Storm,无须额外的代码和配置,Spark Streaming就可以做大量的恢复和交付工作[8]

(5)可以与Hadoop和已存Hadoop数据整合。Spark可以独立运行,除了可以运行在当下的YARN集群管理之外,还可以读取已有的任何Hadoop数据。这是个非常大的优势,它可以运行在任何Hadoop数据源上,比如HBase、HDFS等。这个特性使用户可以轻易迁移已有的合适的Hadoop应用[9]

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈