基于FUSE的地理影像透明缓存机制技术领域
本发明涉及遥感数据处理技术领域,具体为一种基于FUSE的地理影像透明缓存机
制。
背景技术
随着高分辨率遥感技术的不断发展,观测手段不断提高,获取的高分辨率遥感数
据也会越来越多,应用范围也将越来越广。然而面对数据的成倍增加以及用户群里的非专
业化发展,如何准确、有效、及时处理数据,已成为制约高分辨率遥感数据应用的关键前提。
面向高分辨率遥感图像处理现状,分布式集群计算技术(如Hadoop)已引入到数据
处理中,主要技术思路是采用一定的分块策略,将遥感影像整体或分块后将任务分别分配
到不同的计算节点实现并进行处理。整个处理过程以分布式文件系统(如HDFS)为依托,实
现文件的分布式存储机制,使得海量的数据可以在分布式集群上轻松、方便的完成并行计
算。在整个高分辨率遥感图像处理过程中文件系统的作用尤为重要,主要包括海量数据的
读取和写入操作,通过调用文件系统的API来实现。
当前的分布式集群处理技术已经能够在一定程度上大大提升的遥感数据处理效
率,但其数据处理过程中包括大量的数据写入与读取,且由于遥感数据处理业务特点,不同
任务的数据共享情况(如多光谱与全色融合)在所难免。这种情况下,需不断通过磁盘来完
成数据交换,使遥感图像处理的时间大部分浪费在IO等待,造成性能的极大损失。另外,从
分布式文件系统读取和写入高分辨率遥感文件时,均需要调用FileSystem API,需专业计
算机编程者才能实现。
为了应对数据大爆炸,谷歌、百度一直走在寻求身为未来世界核心的大数据的过
程中,来自加州大学伯克利分校新的开源项目Alluxio(曾名Tachyon)已经得到广泛关注。
Alluxio是一个基于内存的分布式文件系统,它是架构在底层分布式文件系统和上层分布
式计算框架之间的一个中间件,主要职责是以文件形式在内存或其他存储设施中提供数据
的存取服务。Alluxio可以为那些大数据应用提供一个数量级的加速,而且它只要提供通用
的数据访问接口,就能很方便地切换底层分布式文件系统。Alluxio的吞吐量要比HDFS高
300多倍。Alluxio都是在内存中处理缓存文件,并且让不同的Jobs/Queries以及框架都能
以内存的速度来访问缓存文件。
Alluxio目前已经对于百度、谷歌等拥有大数据的互联网企业在数据传输与管理
已经产生了惊人功效。但对于遥感测绘领域业务特性,Alluxio并不完全适用。Alluxio是把
一个文件作为一个整体来存储,无法针对某种特殊文件类型单独对待,且Alluxio给开发人
员提供的是专有文件访问接口。
有鉴于此,特提出本发明。
发明内容
本发明要解决的技术问题在于克服现有技术的不足,提供一种基于FUSE的地理影
像透明缓存机制,针对遥感数据的组织形式和计算特点,建立能够实现在物理上采取分布
式并行处理,充分利用计算机缓存运行速度的优势的分布式内存文件系统,大幅度提升数
据生产效率。
为解决上述技术问题,本发明采用技术方案的基本构思是:
一种基于FUSE的地理影像透明缓存机制,包括:
计算任务发出命令进行影像读取时,通过FUSE访问遥感影像分布式缓存,申请数
据资源;
计算任务申请到数据资源后,将遥感影像按块进行存储,存储到各个计算节点内
存中;
计算任务的执行需要访问其他计算节点缓存的数据时,各个计算节点缓存中的数
据通过Gossip协议实现元数据信息共享,达到每个计算节点内存中影像块的元数据信息一
致;
计算任务执行将反复读取数据进行计算。
更近一步的,上述基于FUSE的地理影像透明缓存机制中,计算任务发出命令进行
影像读取前,还包括:
基于FUSE创建遥感影像内存式文件系统;
建立目录空间自动同步机制,对于底层分布式存储系统中的每一个目录或文件,
在所述缓存文件系统之上一一对应创建一个目录或文件。
更近一步的,上述基于FUSE的地理影像透明缓存机制中,还包括,所有计算任务结
束后,按照目录空间自动同步机制将成果以及中间成果数据,写入底层文件存储系统中。
更近一步的,上述基于FUSE的地理影像透明缓存机制中,所述计算任务发出命令
进行影像读取时,通过FUSE访问遥感影像分布式缓存,包括:
采用影像分块机制在逻辑上对遥感影像进行行列拆分,按块读取遥感数据文件。
首先从遥感影像内存文件系统中进行查找,如未找到,将透过文件系统,转到底层文件存储
系统读取。
更近一步的,上述基于FUSE的地理影像透明缓存机制中,所述遥感影像的分块策
略包括:等长宽分块和满行分块。
更近一步的,上述基于FUSE的地理影像透明缓存机制中,所述计算任务申请到数
据资源后,将遥感影像按块进行存储,存储到各个计算节点内存中,包括:
通过LINUX系统自带的<xsl:attribute>机制给内存的影像建立扩展属性,影像块
的元数据信息被存储在内存中。
更近一步的,上述基于FUSE的地理影像透明缓存机制中,所述各个计算节点缓存
中的数据通过Gossip协议实现元数据信息共享,达到每个计算节点内存中影像块的元数据
信息一致,包括:
在计算任务启动时,会启动Gossip服务,Gossip服务启动后会启动一个任务
GossipTask,这个任务会周期性地与其他节点进行通信;其中:
任务GossipTask运行后,更新当前计算节点的版本号,然后构造出要发送给其他
节点的消息;
从存活节点中随机选择一个节点发送、从失效节点中随机选取一个发送。如果当
前存活节点数小于种子数,向其中一个种子节点发消息;
并检查各节点状态。
更近一步的,上述基于FUSE的地理影像透明缓存机制中,所述建立目录空间自动
同步机制中,所述缓存文件系统与底层分布式存储系统的映射关系是:缓存文件目录用来
表示底层文件系统中的目录,其目录属性保存底层文件系统文件属性;缓存文件用来表示
底层文件系统中的文件,其文件属性保存底层文件系统文件属性,缓存文件内容则用来保
存元数据。
采用上述技术方案后,本发明与现有技术相比具有以下有益效果:
本发明基于FUSE的遥感影像透明缓存机制是架构在底层分布式文件系统和上层
分布式计算框架之间的一个中间件,专门针对遥感影像的组织与逻辑结构,将遥感影像分
块存储于计算节点内存,并实现每个计算节点内存数据的元数据共享,使数据以文件的形
式在内存中对外提供读写访问服务,它可以为遥感大数据应用提供一个数量级的加速,而
且它只要提供通用的数据访问接口,就能很方便的切换底层分布式文件系统。
附图说明
图1是本发明基于FUSE的地理影像透明缓存机制中,FUSE的工作原理图;
图2是本发明缓存机制中缓存文件系统与底层分布式文件系统的映射关系示意
图;
图3是本发明基于FUSE的地理影像透明缓存机制架构示意图;
具体实施方式
下面结合附图和具体实施例,对本发明作进一步说明,以助于理解本发明的内容。
本发明一种基于FUSE的地理影像透明缓存机制,包括:
一、首先基于FUSE创建遥感影像(即地理影像,下同)内存式文件系统,它相当于架
构在最底层的分布式存储系统和上层的各计算框架之间的一种中间件;计算框架只是提供
了强大的内存计算能力,但是未提供存储能力,即使是内存计算框架直接在内存管理数据
依然存在很多问题,比如不同任务或不同计算框架间的数据共享需要通过磁盘完成数据交
换,效率很低,或者由于不同的任务可能会访问同样的数据,每个任务都要自己去磁盘中加
载数据到内存中;本发明缓存机制的主要职责是将那些不需要落地到底层文件系统(即所
述分布式存储系统)里的文件,落地到分布式内存文件系统中,来达到共享内存,从而提高
效率,同时可以减少内存冗余、GC时间等。
Fuse(Filesystem in Userspace)提供一个完整的接口让使用者可以轻松的创建
一个属于他自己的用户级文件系统。Fuse由一个内核模块(fuse.ko),一个用户级函数库
(libfuse.*)以及一套文件系统加载机制组成。
Fuse的工作过程如下:使用fuse框架实现的hello实例程序被调用,用户级文件系
统被挂载到当前系统中,挂载点为/tmp/fuse。当用户执行ls-1/tmp/fuse命令时,VFS相关
接口函数被调用,并交给fuse内核模块处理。内核模块通过映射机制,调用hello文件系统
相关函数来处理相应请求;如图1所示。
基于FUSE建立遥感影像的内存式文件系统可实现一般文件系统的所有功能,主要
用来实现所有计算节点内存的文件管理、目录管理等,并且与操作系统实现无缝结合,用户
或其他应用程序可以对它跟其他文件系统进行无差异的操作。基于FUSE的遥感影像内存式
文件系统可以提供将创建,重命名和删除文件等操作从FUSE映射到底层存储层(即底层文
件系统,比如图3中所示的HDFS或者NFS)的对象中,从而实现将底层存储系统中的文件与内
存文件系统的完全同步。
FUSE提供一个接口使计算任务访问本发明建立的所述内存式文件系统,对内存式
文件系统缓存中的遥感影像文件进行读取和计算。
二、建立目录空间自动同步机制,对于底层分布式存储系统中的每一个目录或文
件,在所述内存式文件系统之上一一对应创建一个目录或文件。
两者之间的映射关系是,内存式文件系统的缓存文件目录用来表示底层文件系统
中的目录,其目录属性保存底层文件系统文件属性;内存式文件系统的缓存文件用来表示
底层文件系统中的文件,其文件属性保存底层文件系统文件属性,缓存文件内容则用来保
存元数据,包括更详细的文件属性、访问控制信息、数据分块信息、数据存储位置等信息;如
图2所示。建立目录空间自动同步机制为了实现将底层存储系统中的文件与所述缓存机制
自身管理的文件系统的完全同步。结合图3中所示的,创建在本发明缓存机制内存式文件系
统中的缓存文件系统目录空间与创建在分布式存储系统上的文件系统物理命名空间之间,
建立目录空间自动同步机制,使得本发明中基于FUSE创建的内存式文件系统与底层分布式
存储系统存在映射关系,从内存式文件系统中可以同步完成对底层分布式存储系统中文件
的创建、重命名、删除和查询等管理。
如图3所示,一种基于FUSE的地理影像透明缓存机制,具体还包括:
S1.当计算任务发出命令进行影像读取时,应用程序通过FUSE访问遥感影像分布
式缓存,申请数据资源。
一般采用影像分块机制在逻辑上对遥感影像进行行列拆分,按块读取遥感数据文
件。首先从遥感影像内存式文件系统中进行查找,如未找到,将透过文件系统,转到底层文
件存储系统读取。
遥感影像本身是一个文件,逻辑上包括两部分:影像分块(矩阵)和元数据;为了在
处理过程中一方面能够对现有系统无缝兼容,另一方面充分利用局部计算特性(分块),对
影像进行分块读取。
遥感影像以像元为单位,像元数据值的存储长度是由影像的像元数据值决定的,
因此遥感影像的基本数据类型使得遥感影像可以被分块存储以及处理。遥感影像不同于一
般的数据的地方是它自带位置属性信息,因此需针对遥感影像定制其专属分块策略及存储
方式,影像的分块技术实质上就是一种“分治”的思想,将整个影像这个完整数据集切分成
若干个规则的小的数据子集,这些小的数据集与原数据集在本质上是没有发生改变的。因
此这种栅格数据分块是遥感影像分布式计算的前提,遥感影像的读取和写入都是基于这些
影像块;影像块按照<波段号、行块号、列块号>的组织方式存储在内存中。
遥感影像分块策略
1)等长宽分块:将遥感影像分成n个长宽分别为2的整数的数据块,如2048*2048或
256*256,等大小的分块策略有助于数据块的存储管理以及网络传输,且适用于大部分遥感
影像处理算法,如几何校正、影像匹配等。
2)满行分块:适用于需要按图像行顺序读取数据进行处理的遥感算法,如
pansharp融合算法,一般设计一次读取行数是2的整数次幂次,如1024行、256行。
S2.当计算任务申请到数据资源后,将遥感影像按块进行存储,存储到各个计算节
点内存中。
可通过LINUX系统自带的<xsl:attribute>机制给内存的影像建立扩展属性,如文
件是否存在,是否是影像文件、是否被分块、分块信息和地理信息等,这些影像块的元数据
信息也将被存储在内存中。遥感影像的分块读取和存储的目的是使计算任务与数据能在同
一机器内处理,实现内存到内存的访问,省去IO时间。
其中,__attribute__可以设置函数属性(Function Attribute)、变量属性
(Variable Attribute)和类型属性(Type Attribute);__attribute__前后都有两个下划
线,并且后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。__attribute__语
法格式为:
__attribute__((attribute-list))。
函数属性(Function Attribute)可以帮助开发者把一些特性添加到函数声明中,
从而可以使编译器在错误检查方面的功能更强大。
S3.计算任务的执行有时需要访问其他计算节点缓存的数据,此时,各个计算节点
缓存中的数据通过Gossip协议实现元数据信息共享,达到每个计算节点内存中影像块的元
数据信息一致。
集群中的计算节点没有主次之分,它们通过Gossip协议进行通信,通过Gossip协
议,这些计算节点可以知道集群中有哪些节点以及各节点的状态如何;节点间进行传输的
每一条Gossip消息上都有一个版本号,节点可以对接收到的消息进行版本对比,从而得知
哪些消息是自身需要更新的,哪些消息是自身有而其他节点没有的,然后互相传递信息,最
终达到信息一致。
在计算任务启动时,会启动Gossip服务,Gossip服务启动后会启动一个任务
GossipTask,这个任务会周期性地与其他节点进行通信。GossipTask是位于
org.apache.cassandra.gms.Gossip类下的一个内部类,其run方法如下:
![]()
![]()
![]()
其中,主要进行如下:
(1)GossipTask在Gossip启动后并不会立即运行,阻塞在listenGate这个条件变
量上,当Gossip服务调用listen时才开始运行;
(2)首先更新本节点的心跳版本号,然后构造需要发送给其他节点的消息
gDigests;
(3)从存活节点中随机选择一个节点发送、从失效节点中随机选取一个发送。如果
当前存活节点数小于种子数,向其中一个种子节点发消息;
(4)检查节点状态。
S4.计算任务执行将反复读取数据进行计算;首先通过attribute机制判断影像块
是否在缓存、及其影像块位置等属性信息;如影像块在自身缓存内,则直接从自身缓存读取
数据;如在其他计算节点缓存内,则从其他节点缓存内存读取数据;如果影像块不存在缓
存,则绕过缓存从底层存储文件系统读取数据;之后将读取的数据进行计算。
S5.所有计算任务结束后,按照目录空间自动同步机制将成果(最终计算结果等)
以及中间成果(中间计算结果等)数据,写入底层文件存储系统中。
基于FUSE的遥感影像透明缓存机制是架构在底层分布式文件系统和上层分布式
计算框架之间的一个中间件,专门针对遥感影像的组织与逻辑结构,将遥感影像分块存储
于计算节点内存,并实现每个计算节点内存数据的元数据共享,使数据以文件的形式在内
存中对外提供读写访问服务,它可以为遥感大数据应用提供一个数量级的加速,而且它只
要提供通用的数据访问接口,就能很方便的切换底层分布式文件系统。
基于FUSE的遥感影像透明缓存机制对上层算法开发人员更加透明,无需专用接
口。开发人员可以像可执行二进制文件一样来开发文件系统,它们需要链接到FUSE库
上——换言之,这个文件系统框架并不需要了解文件系统的内幕和内核模块编程的知识
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人
员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应
视为本发明的保护范围。