基于Spark的遥感数据分析方法

2015-07-26 02:29陈峰科孙众毅池明旻
微型电脑应用 2015年8期
关键词:分布式计算内存集群

陈峰科,孙众毅,池明旻

基于Spark的遥感数据分析方法

陈峰科,孙众毅,池明旻

随着遥感技术的快速发展,遥感数据呈爆炸式增长,给遥感数据计算带来巨大的挑战。采用基于内存计算的Spark分布式计算框架以克服该问题,并选择YARN作为资源调度系统和采用HDFS为分布式存储系统。Spark是一个开源的分布式计算框架,基于弹性分布式数据集(RDD)概念,采用先进的有向无环图执行机制以支持循环数据流操作,通过一次数据导入内存就可以完成多次迭代运算。因而,特别适合基于多次迭代的大数据计算分析方法,相较于每轮迭代需把数据导入内存的MapReduce有更大的优势。将该计算框架应用于海量遥感数据分析,验证需要多次迭代的奇异值分解(SVD)算法在该数据分析中的有效性。实验表明,随着迭代次数增加,基于Spark的SVD运算效率相对于MapReduce有明显提高,通常可提高一个数量级。

大数据计算;遥感数据;Hadoop;Spark;MapReduce

0 引言

目前,世界上有超过1000个正在工作的卫星实现对地观测的任务[1]。其中,大量的卫星用于民用工程,数据全球可共享,为科学研究提供有力的数据保障。随着遥感技术的飞速发展,遥感图像的空间和光谱分辨率也越来越高,可以获取的遥感数据量也迅猛增长。通常,机器学习、模式识别和数据挖掘方法用来分析和理解遥感图像。其中,大量的算法需要大量迭代运算,比如用于分类的逻辑回归方法、用于特征提取的SVD(Singular Value Decomposition)等。而遥感数据爆炸性增长给这类方法带来巨大的计算挑战。为了解决该问题,目前常用的方法有基于GPU加速的高性能计算系统和基于Hadoop的分布式集群。

CUDA[2]和OpenCL[3]是基于图形处理器(GPU)的并行计算编程模型,适合需要大量计算的应用,以此为基础的传统高性能计算系统被广泛用于研究领域。GPUs在浮点运算和并行计算方面相对于 CPUs有着巨大的优势,使得使用GPU可以大幅提高计算速度。深度学习是一种需要大量计算的多次迭代算法,英伟达在[4]中提出了基于CUDA的深度神经网络包CUDNN(CUDA Deep Neural Network library),实验结果显示深度学习框架利用cuDNN加速后获得了36%的速度提升。但是,虽然GPU加速能提高计算速度,却对于数据密集型计算效率不高,而且代码编写调试复杂。

Hadoop[5,6]的核心分为两部分:HDFS分布式文件系统[4]和MapReduce计算框架[5]。在处理大量文件时,相对于传统的本地文件系统,HDFS在吞吐率和稳定性方面有很大的优势。除此之外,[7-8]中工作证明,基于 MapReduce实现的分布式算法能够在批量处理数据的任务中相对于单机实现的算法有极大的性能优势。然而,在许多迭代进行的计算任务中因为在每一轮迭代过程中,中间数据集都需要从硬盘中加载,如此的 IO操作会消耗大量的时间,限制了基于MapReduce在如机器学习等多次迭代算法上的速度性能优势。Hadoop和 GPU加速技术的结合(CUDA+Hadoop[9], OpenCL + Hadoop[10]),在一定程度上能够提高计算速度,但在涉及多次迭代机器学习算法时候,依然受 MapReduce每轮中间数据集读写时间的掣肘。Mahout是基于MapReduce的机器学习包,2014年4月份Mahout社区宣布,Mahout不再接受基于MapReduce实现的算法,转向Spark[11]。Spark是一个基于内存计算的开源分布式计算框架,其是一个快速且易于使用的计算框架,核心数据结构为弹性分布式数据集(RDD),拥有先进的有向无环图(DAG,Directed Acyclic Graph)执行引擎,能够有效处理循环数据流。当集群内存充足时,基于Spark的多次迭代机器学习算法只需要在第一次迭代时将数据从硬盘中导入内存,相对于基于MapReduce的多次迭代算法来说,节省了中间数据集硬盘读写的时间。这些特有的性质,使得Spark特别适用于机器学习与数据挖掘算法,基于Spark的多次迭代算法能够在保持高可靠性和容错性的情况下相对于基于MapReduce算法拥有更强的速度性能优势。在许多实际任务中,基于Spark的多次迭代算法比基于MapReduce实现的算法在时间上可以快10倍以上。

本文提出了一个基于Spark的遥感数据处理平台,能够有效应对遥感数据日益增长对于相关算法处理数据带来的挑战。该平台由两部分组成:分布式存储系统和分布式计算框架。在该平台中,选择了Hadoop的分布式文件系统(HDFS)作为分布式存储。分布式计算框架由传统的MapReduce和基于内存的Spark组成,其中Spark由于其能高效实现机器学习等多轮迭代算法而被选为平台核心框架。基于MapReduce实现的机器学习包Mahout和基于Spark实现的机器学习包MLlib在该平台上都可以使用,里面包含了大部分主流的机器学习算法,可以为遥感大数据的处理提供支撑。为验证平台的有效性,并评估不同计算框架的性能,本文在构建的平台上对于两个公开数据集,分别基于 Spark和MapReduce实现了奇异值分解(SVD)。SVD是一种多次迭代算法,是许多遥感数据处理算法的重要组成部分。实验结果显示,随着迭代次数的增加,Mahout中基于MapReduce实现的SVD和MLlib中基于Spark实现的SVD运行速度上的差距逐渐增大。当迭代轮数到达一定数量之后,基于Spark实现的SVD比基于MapReduce实现的SVD有十倍以上的性能优势。

1 数据处理平台介绍

随着可利用的遥感数据量日益增长,即使是使用GPUs加速,单机也越来越难满足需要。开发能够快速有效处理遥感数据的分布式平台显得愈发紧迫与重要。数据处理平台通常分为两个部分:分布式存储系统和分布式计算框架。以HDFS、Hbase为代表的分布式存储系统已经被广泛应用于各个领域的大数据存储系统之中。MapReduce因其在数据密集型计算方面的巨大优势,是目前大部分应用中分布式平台的最主要选择。在本文提出的平台中,分布式存储系统采用了以GFS[12]为基础的HDFS分布式文件系统。在使用平台对数据进行处理之前,遥感数据需要首先导入到HDFS中。基于内存计算的Spark,被选择作为主要的分布式计算框架。平台同时整合了Hadoop的MapReduce计算框架。Apache YARN被选择作为平台的任务调度系统,YARN位于HDFS和分布式计算框架之间,为多个运行中的应用分配资源。YARN能够支持Spark和MapReduce等多种计算框架,使得在平台上,基于Spark的机器学习包MLlib和基MapReduce的机器学习包Mahout里面的算法皆可使用。本文提出的平台,在满足一般分布式平台具有的存储和批量处理遥感数据功能之外,还能实现迭代运算对数据的快速处理。在这一章剩下的部分,我们将对我们工作中涉及到的分布式技术做进一步的介绍。

1.1 Hadoop

Hadoop包含一系列分布式存储和处理数据技术,是一个由Apache基金会支持的开源项目,同时满足容错、可伸缩,并且易于扩展,易于学习。Hadoop的核心分为两部分:分布式文件系统 HDFS和分布式计算框架 MapReduce。Hadoop的完善与普及,使得原本需要昂贵的超级计算机才能解决的数据任务在使用一般的服务器组成的集群中就能得到高效解决。通常情况下,随着集群规模变大,硬件损坏频率会越来越高,Hadoop容错机制都能够保证任务在一般硬件损坏情况下成功执行。如今,Hadoop已经能够管理数千台机器,对PB级别的数据进行存储和处理。

1.2 Mahout

ApacheMahout是一个可扩展机器学习包,在ApacheHadoop项目的基础上,基于MapReduce编程模型实现的。Mahout能从多个数据源中读取数据,利用数据科学的工具分析挖掘数据。Mahout的目的在于使得算法处理过程速度更快,数据规模更加容易扩展。到目前为止,Mahout支持四种数据处理应用:协同过滤,聚类,分类和频繁项集挖掘。大部分经典的机器学习算法在Mahout中都有实现。

1.3 Spark

ApacheSpark是一个Scala语言实现的基于内存计算用于处理大规模数据的快速通用引擎。虽然MapReduce模型在分布式批量处理任务的现实应用中取得巨大的成功,但却不能满足涉及到循环数据流应用的需要,而这种应用在机器学习与数据挖掘算法中是十分常见的。Spark技术的提出正因为此,在保证与MapReduce可以媲美的可扩展性和容错性的基础上,满足循环数据流应用的需要。Spark基于其创造性的弹性分布式数据集(RDD)概念,使用先进的有向无环图(DAG)执行机制,能够支持循环数据流的应用和内存计算。在许多机器学习任务中,Spark能够在执行速度上远远超越MapReduce。Spark被设计为可以独立地运行,其也能够与其它主流分布式存储系统与任务调度系统合作工作。在本文提出的平台之中,Spark被作为一种计算框架置于YARN之上,与MapReduce同时运行于集群之上。

1.4 Spark vsMapReduce

Spark与MapReduce相比,其有如下优势:

基于内存计算。中间数据集保存于内存之中,无需反复读取硬盘,适合于迭代计算任务。

DAG 执行引擎。Spark执行过程中没有严格的Map/Reduce阶段,通过其独有的血缘机制,在保证容错性下进一步减少硬盘读写操作。

容易编程。Spark是由函数式语言Scala实现的,可以通过Scala编写创建任务,代码编写更加灵活。

Spark相比MapReduce更加适合于如机器学习与数据挖掘等迭代计算任务,而MapReduce在数据密集型计算中仍然保持了强大的竞争力。两者互补已经成为当今主流分布式平台构建时的共识。

2 实验数据集和实验设置

随着遥感技术和互联网技术的快速发展,可以获取的遥感数据来源逐渐增多,越来越多的高光谱与高分辨率数据被应用于各类科学研究中。如何快速有效地处理遥感数据从未像现在一般迫切和重要。在本章的剩余部分,我们简单我们实验中涉及到的遥感数据集,并对实验设定做一个详细的描述。

2.1 实验数据集

(1)Indian_pines:1992年AVARIS传感器在IndianPine上空拍摄的高光谱遥感图像。图像大小为145*145像素,每个像素点有220个波长,分布在0.36到2.5μm之间的波段中。

(2)Pavia:由ROSIS-03卫星在Pavia上空获取的高光谱高分辨率(1.3m)图像,每个像素点有103个波长在0.43到0.86μm之间的波段。分为Pavia和PaviaU两张图像,图像覆盖地点分别为Pavia市区和Pavia大学。

2.2 集群配置

本文提出的平台在实验集群上实现。实验集群由5台服务器组成,每台服务器内存为24GB,拥有四核处理器。服务器操作系统皆使用CentOS6.5,集群使用的分布式系统版本为Hadoop 2.5与Spark 1.0.1。

2验设置

实验在两个公开遥感数据集上对于 Spark实现的 SVD和基于MapReduce实现的SVD算法进行运行时间比较,以证明本文提出的平台在性能上对于遥感数据的处理与传统分布式平台有极大提升。SVD是许多遥感数据相关操作的重要组成部分,对于SVD操作的快速计算可以大幅提高有关算法的性能。由于在实际情况下,SVD实验运行时间与集群状态拥有关联性,集群内存或者集群网络的占用都会影响到任务执行时间,单次实验结果有一定随机性。为保证实验结果的科学与严谨,每次SVD实验都重复10次,并取平均计算时间作为最终结果值。

3 实验结果及分析

显示了基于Spark实现的SVD和基于MapReduce实现的SVD在IndianPine和 Pavia数据集上面随着奇异值的增大运算时间的变化情况。如图1、图2所示:

图1 :Indian_pines遥感数据集上的SVD计算时间

图2 :Pavia遥感数据集上的SVD计算时间

在SVD的分布式实现中,当奇异值的个数小于总的特征数量的一半时,算法的迭代次数随着奇异值数量的增大而提升。实验中使用数据集的数据规模(样本数量和每个样本的特征个数)如表1所示:

表格1:数据集规模

从图1、图2的计算时间结果中可以看出,当奇异值为1时,Spark的SVD比MapReduce的SVD并没有优势。但是,从所有的数据集的实验结果中我们可以看到,随着奇异值数量的增大,算法的迭代次数增多,MapReduce的SVD运行时间迅速增加。相对而言,Spark的SVD的运行时间却没有随着迭代次数的增加有快速提升。在相同数据集上,当奇异值超过30时,MapReduce SVD消耗的时间是Spark SVD消耗的时间的10倍以上。

无论基于何种计算框架,实验数据皆需要在第一次迭代之前从硬盘中导入至内存中,基于 MapReduce的算法在每一轮迭代中都需要进行如第一轮中的硬盘读写操作。而对于基于内存计算的Spark框架而言,迭代计算的中间数据集可以存储于内存中,无需进行反复的硬盘读写。这使得由Spark实现的算法中,后面的迭代相比第一次迭代消耗的时间要短许多。内存计算的特性为基于Spark的许多算法提供了无与伦比的性能优势。

在SVD算法实际的运行过程中,无论是MapReduce还是Spark,每一次计算的时间都远远小于数据导入内存的时间,数据导入时间对于总体运行时间起到了决定性因素然而数据导入内存的时间因集群状况,比如内存使用和CPU占用等影响很大,这使得数据导入时间在一定程度上有很大的随机性,甚至可能会出现导入相同的数据消耗的时间相差10倍以上的情况。在实验结果中,即使是使用10次实验的平均计算时间作比较,也出现了随着迭代次数的增加,计算时间反而出现了减少的情况。但是这并没有影响基于Spark的SVD算法对于基于MapReduce算法的巨大性能优势。

4 总结

本文提出基于Spark的分布式数据处理平台。在该平台中,HDFS作为分布式文件系统,YARN作为资源调度框架,Spark作为主要分布是计算框架。为了验证该平台的计算有效性,实验采用需要多次迭代算法SVD提取海量遥感数据的特征。实验结果表明,基于Spark的分布式多次迭代算法相对于基于MapReduce实现的在计算效率上有显著的提升。与传统的MapReduce数据处理平台相比,该平台更适合处理利用多次迭代的数据方法处理海量遥感数据。

[1] 姚禹,向晶.全球在轨卫星数量突破1000颗大关[J].中国无线电,2012, (11):77-77.

[2] CUDA, http://www.nvidia.com/object/cuda home new.html/.

[3] Xu J Y. OpenCL–The Open Standard for Parallel Programming of Heterogeneous Systems[J]. 2008.

[4] Chetlur S, Woolley C, Vandermersch P, et al. cudnn: Efficient primitives for deep learning[J]. arXiv preprint arXiv:1410.0759, 2014.

[5] Borthakur,D.“The hadoopdistributed file system: Architecture anddesign,” [J]Hadoop ProjectWebsite,2007, 21(11).

[6] Dean J and Ghemawat. S,“Mapreduce: simplified data processingon large clusters,” [C].Communications of the ACM,51(1):107–113, 2008.

[7] Golpayegani.N and Halem.M “Cloud computing for satellite dataprocessing on high end compute clusters,” [J] in Cloud Computing, 2009.CLOUD’09. IEEE International Conference on. IEEE, 2009:88-92.

[8] Pan.X and Zhang.S, “A remote sensing image cloud processingsystem based on hadoop,” [J] in Cloud Computing and Intelligent Systems(CCIS), 2012 IEEE 2nd International Conference on, vol. 1. IEEE,2012, pp. 492-494.

[9] Grossman M, Breternitz M, Sarkar V. HadoopCL: MapReduce on Distributed Heterogeneous Platforms through Seamless Integration of Hadoop and OpenCL[J]. Parallel and Distributed Processing Symposium Workshops & PhD Forum (IPDPSW), 2013 IEEE 27th International, 2013:1918-1927.

[10] Wang Z, Lv P, Zheng C. CUDA on Hadoop: A Mixed Computing Framework for Massive Data Processing[M]//Foundations and Practical Applications of Cognitive Systems and Information Processing. Springer Berlin Heidelberg,2014:253-260.

[11] Zaharia.M, Chowdhury.M, M. J. Franklin, S. Shenker, and I. Stoica,“Spark: cluster computing with working sets,” [C] in Proceedings of the2nd USENIX conference on Hot topics in cloud computing, 2010:10.

[12] Ghemawat S, Gobioff H, Leung S T. The Google file system[C]//ACM SIGOPS operating systems review. ACM, 2003, 37(5):29-4

V249 文献标志码:A

2015.01.21)

1007-757X(2015)08-0065-03

国家自然科学基金,(71331005)

陈峰科(1990-),男,江西,复旦大学计算机科学技术学院,上海市数据科学重点实验室,硕士研究生,研究方向:数据科学、大数据上海,201203孙众毅(1992-),男,上海,复旦大学计算机科学技术学院,上海市数据科学重点实验室,硕士研究生,研究方向:数据科学、大数据,上海,201203池明旻(1977-),女,福建,复旦大学计算机科学技术学院,上海市数据科学重点实验室,电磁波信息科学教育部重点实验室,副教授,研究方向:数据科学、大数据, 上海,201203

猜你喜欢
分布式计算内存集群
海上小型无人机集群的反制装备需求与应对之策研究
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
勤快又呆萌的集群机器人
基于云计算的移动学习平台设计与实现
云计算中MapReduce分布式并行处理框架的研究与搭建
面向异构分布式计算环境的并行任务调度优化方法
内存搭配DDR4、DDR3L还是DDR3?