基于MapReduce的旅行时计算方法和装置与流程

文档序号:19431313发布日期:2019-12-17 16:50阅读:188来源:国知局
基于MapReduce的旅行时计算方法和装置与流程

本发明涉及油气勘探地球物理领域,具体涉及基于mapreduce的旅行时计算方法和装置。



背景技术:

目前,地震数据处理的数据量大、计算量大、计算周期长,对程序的稳定和硬件设备的性能提出高要求。随着处理规模的不断增长,对硬件和软件的性能需求越来越严苛,导致处理成本急剧上升。mapreduce的可靠性和适应性为大规模地震数据处理提供了新的解决方案。mapreduce程序的可靠性降低了对硬件设备的要求,利用低成本的硬件设备可以实现大规模的高效计算,从而降低了地震数据处理的成本,提高经济效益。

mapreduce是一种基于hadoop分布式并行框架的编程模式,由google公司率先开发,是互联网时代进行大数据处理和机器学习的先进技术。mapreduce是通过把对数据集的大规模操作分散到网络节点上实现可靠性;每个节点会周期性的把完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点记录下这个节点状态为死亡状态,然后把分配给这个节点的任务发到别的节点上,具有很好的容错能力。并且,mapredue属于一种较为高级的计算模型,开发人员只需要关注map、reduce的操作即可,hadoop框架承担了容错、负载均衡等功能,降低了编程复杂度,提高了程序的可靠性。此外,hadoop独特的数据管理方式提高了io性能和计算规模可扩展性。

mapreduce是完全基于数据划分的角度来构建并行计算模型的,但是旅行时计算时,由于相邻炮点需要的速度模型数据互相重叠,数据切分复杂,备份数据将呈几何增长。如果按照hdfs数据管理方式对速度模型数据进行数据切分和备份,将导致大量的冗余数据,甚至超过原始数据上百倍,造成数据激增,影响计算效率。



技术实现要素:

本发明提出了一种基于mapreduce的旅行时计算方法,其采用了任务的“自切分”机制,减少了存储数据量,提高了计算效率。

根据本发明一方面,提出了一种基于mapreduce的旅行时计算方法,该方法包括:根据旅行时计算网格获得要计算旅行时的总炮数及各炮点的炮点信息;根据旅行时计算半径计算各炮点的射线追踪波前面到达的范围;将每一炮点的炮点信息以及射线追踪波前面到达的范围作为一个结构体,压入到任务队列中;对所述任务队列进行任务切分,从而为每个map计算进程分配任务,其中,每个map计算进程的任务对应于该map计算进程负责计算的一个或多个炮点,在map计算阶段,各map计算进程根据与其任务对应的各炮点的结构体读取所需要的速度模型数据进行旅行时计算,得到旅行时文件,在reduce计算阶段,对map计算阶段得到的旅行时文件进行归约。

根据本发明的另一方面,提出一种基于mapreduce的旅行时计算装置,该装置包括:用于根据旅行时计算网格获得要计算旅行时的总炮数及各炮点的炮点信息的部件;用于根据旅行时计算半径计算各炮点的射线追踪波前面到达的范围的部件;用于将每一炮点的炮点信息以及射线追踪波前面到达的范围作为一个结构体,压入到任务队列中的部件;用于对所述任务队列进行任务切分,从而为每个map计算进程分配任务的部件,其中,每个map计算进程的任务对应于该map计算进程负责计算的一个或多个炮点,用于在map计算阶段,各map计算进程根据与其任务对应的各炮点的结构体读取所需要的速度模型数据进行旅行时计算,得到旅行时文件,在reduce计算阶段,对map计算阶段得到的旅行时文件进行归约的部件。

本发明实施例以任务切分驱动map计算,根据射线追踪方法原理,以一个炮点为射线追踪计算单元,多个计算单元作为一个map计算任务的方式进行作业调度。传递给map计算进程一个计算任务信息(包括要计算的炮号以及各炮的参数,而不是各炮计算需要的数据)。获得计算任务信息后,map计算进程根据任务信息直接获得需要的数据,避免了输入速度模型数据因切分、备份导致的数据量激增。

附图说明

通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。

图1示出了根据现有技术的速度模型数据切分示意图。

图2示出了根据本发明实施例的基于mapreduce的旅行时计算方法的流程图。

图3示出了根据本发明实施例的任务切分示意图。

图4示出了根据本发明的一个应用示例的旅行时计算的作业执行流程图。

图5示出了根据本发明的示例计算出的以二维方式显示的一炮旅行时数据。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

图1示出了根据现有技术的速度模型数据切分示意图,图1左图中a为旅行时计算网格,b为旅行时射线追踪某炮点位置。旅行时计算的输入数据为速度模型数据,最小并行计算单位为一个旅行时计算炮点。由于旅行时计算网格的间隔(即计算网格中炮点之间的间隔)远小于旅行时计算半径(即针对一个炮点所需的速度模型数据范围),因此,在旅行时计算过程中相邻炮点存在大量的重叠区域,数据重复使用,如附图1左图所示。如果按照hdfs数据管理方式对速度模型数据进行数据切分和备份,将导致大量的冗余数据,甚至超过原始数据上百倍。因此本发明实施例提出任务驱动的“自切分”机制,以任务切分驱动map计算,设定单个进程计算的任务大小,在不切分速度模型数据的情况下,按照计算任务驱动map计算,避免数据切分复杂性导致的数据量激增。与hadoop固有的数据分块切分机制不同,这种任务驱动的切分机制由应用程序自身实现切分策略,增加了数据处理的灵活性。

图2示出了根据本发明实施例的基于mapreduce的旅行时计算方法的流程图,该方法包括:

步骤201,根据旅行时计算网格获得要计算旅行时的总炮数及各炮点的炮点信息,炮点信息可包括炮点的炮号和位置信息(如图1中的位置b),位置信息例如包括炮inline(主测线)号和炮crossline(联络测线)号。

步骤202,根据旅行时计算半径计算各炮点的射线追踪波前面到达的范围,例如包括波前面最小inline号、波前面最大inline号、波前面最小crossline号、波前面最大crossline号等。例如如图1右图中的c、d、e、f分别代表炮波前面到达的最小inline号、最大inline号、最小crossline号、最大crossline号。g为其中某一条射线。旅行时计算半径可由本领域技术人员根据计算需要来设定,例如包含在用户参数中。

步骤203,将每一炮点的炮点信息以及射线追踪波前面到达的范围作为一个结构体,压入到任务队列中。

步骤204,对任务队列进行任务切分,从而为每个map计算进程分配任务,每个map计算进程的任务对应于该map计算进程负责计算的一个或多个炮点,如图3所示。图3示出了根据本发明实施例的任务切分示意图。其中一个map计算进程(map1……map_n)对应一个任务,一个任务对应一个或多个旅行时计算炮点(shot1……shotn)。每一炮点的计算参数(即步骤203中的结构体)可以为shotinfo结构。

任务切分的原则和方式可以根据实际需要来设置。例如,本领域技术人员可以根据计算资源和总炮数等信息,通过用户参数来设定每个任务对应的炮数。再例如,任务切分也可以由hadoop作业调度引擎来执行。hadoop作业调度引擎可根据“总炮数”和“每个任务计算的炮数”按顺序、均匀切分。

举例来说,如果总炮数为101,炮号是1~101,可用计算节点为10个,每个节点配置4个map,那么每一轮可有40个map同时计算。如果用户设置的参数是每个map计算2个炮点,那么共需要51个map,其中:map1计算1~2炮,map2计算3~4炮,map3计算5~6炮,以此类推,map51只计算101炮。每一轮算40个map,按照“先到先得”的原则,第一轮计算的map最先完成的进程启动map41,第二个完成的进程启动map42,以次类推,直到map51分配完,需要两轮完成计算。

步骤205,在map计算阶段,各map计算进程根据与其任务对应的各炮点的结构体读取所需要的速度模型数据进行旅行时计算,得到旅行时文件,在reduce计算阶段,对map计算阶段得到的旅行时文件进行归约。速度模型数据可保存在hdfs文件中,能够根据结构体中的信息(例如炮点信息以及射线追踪波前面到达的范围)进行索引和读取。

本发明实施例以任务切分驱动map计算,根据射线追踪方法原理,以一个炮点为射线追踪计算单元,多个计算单元作为一个map计算任务的方式进行作业调度。传递给map计算进程一个计算任务信息(包括要计算的炮号以及各炮的参数,而不是各炮计算需要的数据)。获得计算任务信息后,map计算进程根据任务信息直接获得需要的数据,避免了输入速度模型数据因切分、备份导致的数据量激增。

为便于理解,现结合图4来描述根据本发明的一个应用示例来进行旅行时计算的作业执行流程图。本领域技术人员应理解,该示例仅为了便于理解本发明,其任何具体细节并非意在以任何方式限制本发明。

在该示例中,根据mapreduce函数式编程模式,可将旅行时计算过程封装在一个名为ctaveltimegeratormodular的类中,其中包含setup、selfsplitstrategy、map和reduce等函数。作业提交后,hadoop作业调度器得到该类的实例,根据系统配置启动一个jobtracker进程和多个tasktracker进程,分别在namenode和datanode执行作业调度和计算任务。jobtracker进程启动后调用该类的setup函数初始化计算参数和获取用户参数,然后调用selfsplitstrategy函数进行计算任务统计和按照划分策略切分计算任务,且不切分速度模型数据。之后,jobtracker进程对资源进行调度,将任务分配给空闲计算节点。空间节点的tasktracker进程得到计算任务后,在不同的阶段执行map任务和reduce任务。在map计算阶段,tasktracker进程调用map函数,根据任务所对应的计算参数读取对应的速度模型数据进行射线追踪旅行时计算,并将部分旅行时数据写入当前节点的本地磁盘中。在reduce计算阶段,tasktracker进程调用reduce函数,将所有旅行时文件归并到一个hdfs文件中。

图5示出了根据本发明的示例计算出的以二维方式显示的一炮旅行时数据。一炮旅行时数据为三维体,如图1右图。按二维方式显示时,各道数据按工区网格inline号和crossline号顺序存放,如图1右图中的d→f→c→e顺序。

本发明实施例在hadoop环境下实现了旅行时并行计算。作业运行过程中负载自动均衡,cpu利用率接近100%,并行加速比基本呈线性增长。由于采用任务驱动的“自切分”机制,唯一的输入数据速度模型并没有因数据切分而导致数据量增加。

举例来说,根据本发明实施例而开发的旅行时并行计算程序,可部署在64节点集群的hadoop运行环境下,采用某地震处理工区4.7gb速度模型数据进行旅行时计算测试表明:基于mapreduce的旅行时计算在运行过程中,各节点的cpu利用率将近达到100%,作业整体性能提高了30%。同时,由于速度模型并没有进行数据切分,所以输入数据并没有增加。

本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1