蔣 楠
(中國石油化工集團(tuán)有限公司信息和數(shù)字化管理部,北京100728)
地震逆時偏移成像計算是一種計算密集和數(shù)據(jù)密集的算法,因此地震逆時偏移成像技術(shù)的推廣應(yīng)用在很大程度上依賴于高性能計算技術(shù)的發(fā)展[1-3]。近年來,隨著計算機(jī)技術(shù)的不斷發(fā)展,計算機(jī)的計算性能也隨之有了較大提升,與此同時,多種并行計算框架的發(fā)展為高性能計算提供了強(qiáng)大的技術(shù)支持[4-6],持續(xù)推動了地震逆時偏移成像技術(shù)的快速發(fā)展。FOLTINEK等[7]分析了基于GPU的逆時偏移在計算性能上的明顯優(yōu)勢。ARAYA-POLO[8]提出了基于眾核處理器的三維疊前逆時深度偏移成像技術(shù)??紫閷幍萚9]提出了利用多GPU聯(lián)合的并行計算技術(shù)加速逆時偏移算法。李博等[10]提出了利用CPU/GPU作為數(shù)值計算中心并建立隨機(jī)邊界模型,提升了逆時偏移的計算效率。張向陽等[11]基于GPU實(shí)現(xiàn)了逆時偏移的并行加速算法并與單程波動方程偏移進(jìn)行了對比分析,證明了基于GPU的逆時偏移的高效性??偟膩砜?目前主要的效率優(yōu)化方式采取的是集中存儲框架下聯(lián)合GPU的并行策略,解決的是偏移算法中的計算密集問題。而隨著地震勘探目標(biāo)的日益復(fù)雜,勘探技術(shù)向精細(xì)化發(fā)展,單點(diǎn)高密度地震等技術(shù)的成功應(yīng)用使得地震采集的數(shù)據(jù)量成倍增加,常規(guī)計算框架的數(shù)據(jù)集中存儲方式難以滿足生產(chǎn)要求。此外,地震數(shù)據(jù)處理周期不斷縮短,要求地震處理技術(shù)能夠融合更多最新的計算機(jī)技術(shù),以更大程度提高地震處理技術(shù)的計算效率。分布式并行框架是一種可有效支持?jǐn)?shù)據(jù)密集型應(yīng)用程序的框架,可進(jìn)行海量數(shù)據(jù)的并行運(yùn)算。Spark框架作為一種典型的分布式并行框架由伯克利大學(xué)開發(fā),屬于該校的研究性項(xiàng)目,由于其計算的優(yōu)越性已經(jīng)被應(yīng)用于多個領(lǐng)域,如聚類算法、文本分類以及數(shù)據(jù)監(jiān)測和分析等[13-16]。
為了進(jìn)一步提高逆時偏移成像技術(shù)的計算效率,增強(qiáng)技術(shù)的生產(chǎn)應(yīng)用能力,本文以Spark框架為基礎(chǔ),充分利用分布式文件存儲系統(tǒng)海量數(shù)據(jù)管理以及Spark并行框架分布式內(nèi)存計算高效等優(yōu)勢,形成了一套計算高效的逆時偏移成像處理技術(shù)。
逆時偏移成像是一種全波場成像技術(shù),而其算法核心則是正演問題,對應(yīng)的三維聲波方程為:
(1)
式中:u為地表記錄的壓力波場;v為縱橫向可變的介質(zhì)速度。
成像條件的選擇是地震偏移成像算法的關(guān)鍵之一,可采用互相關(guān)算法進(jìn)行成像,即對同一時刻的接收點(diǎn)外推波場uR(x,y,z,t)和震源外推波場uS(x,y,z,t)進(jìn)行互相關(guān)計算,得到成像值,如下式:
(2)
式中,被積函數(shù)uR(x,y,z,t)uS(x,y,z,t)表示t時刻對波場做一次成像運(yùn)算,積分說明成像空間I(x,y,z)中的像是多個時間步長成像的疊加。
逆時偏移成像的實(shí)現(xiàn)過程主要包括震源波場正向延拓,接收點(diǎn)波場反向延拓以及互相關(guān)成像3個部分。計算時以單個炮集為基本單元,每一個炮集的偏移計算相互獨(dú)立,各個進(jìn)程無需進(jìn)行數(shù)據(jù)交換。不同計算節(jié)點(diǎn)之間任務(wù)的起止時間互不影響,而且同一個計算節(jié)點(diǎn)可以持續(xù)獲取數(shù)據(jù)進(jìn)行計算,不必等待其它計算節(jié)點(diǎn)的任務(wù)同步,這種多數(shù)據(jù)單程序的算法特征具有較強(qiáng)的并行性,能在多種并行框架中實(shí)現(xiàn)。逆時偏移成像的并行計算流程如圖1所示,將單炮數(shù)據(jù)進(jìn)行任務(wù)分配,各個進(jìn)程完成各自作業(yè)后對成像結(jié)果進(jìn)行規(guī)約,得到最終的成像結(jié)果。
圖1 逆時偏移成像的并行計算流程
目前主要有3種高性能計算框架及并行編程接口可以實(shí)現(xiàn)逆時偏移算法的并行計算,分別是MPI,MapReduce,Spark。下面對這3種實(shí)現(xiàn)方式進(jìn)行對比分析。
MPI是一個信息傳遞應(yīng)用程序接口,其目標(biāo)是高性能、大規(guī)模性和可移植性,具有完備的異步通信功能以及較強(qiáng)的可擴(kuò)展性,是目前應(yīng)用范圍較為廣泛的一種并行編程接口,但其實(shí)現(xiàn)難度相對較大。MPI基于消息傳遞,可以根據(jù)需求進(jìn)行任務(wù)劃分或數(shù)據(jù)劃分,一次作業(yè)的進(jìn)程數(shù)由作業(yè)發(fā)布前通過一次調(diào)度完成,若在集群上運(yùn)行,集群的各節(jié)點(diǎn)之間通過互聯(lián)網(wǎng)絡(luò)進(jìn)行消息傳遞,節(jié)點(diǎn)通信一般會產(chǎn)生較大的通信開銷,且各節(jié)點(diǎn)進(jìn)程之間相互依存,若一個進(jìn)程任務(wù)失敗,則整個作業(yè)失敗,所有的計算將重新開始。此外,作業(yè)的容錯性較差。
MPI編程接口主要基于集中式存儲,底層缺乏分布式文件存儲系統(tǒng)的支持,因此難以滿足海量數(shù)據(jù)的存儲和讀寫。MPI的數(shù)據(jù)存儲和數(shù)據(jù)處理是分開的,每次計算開始時,MPI需要從數(shù)據(jù)存儲節(jié)點(diǎn)讀取需要處理的數(shù)據(jù)分配給各個計算節(jié)點(diǎn),然后進(jìn)行數(shù)據(jù)處理。即使基于分布式文件存儲系統(tǒng)進(jìn)行MPI并行作業(yè)運(yùn)算,仍無法進(jìn)行分布式文件讀取,而且在數(shù)據(jù)讀寫尤其針對TB級乃至PB級數(shù)據(jù)的數(shù)據(jù)密集型應(yīng)用,需要大量的數(shù)據(jù)交換,此時網(wǎng)絡(luò)通信時間將成為影響系統(tǒng)性能的重要因素,導(dǎo)致并行性能大大降低。
基于MPI的偏移成像實(shí)現(xiàn)方式如圖2所示。
圖2 基于MPI框架的偏移成像實(shí)現(xiàn)方式
MapReduce是Google公司提出的一個軟件架構(gòu),用于大規(guī)模數(shù)據(jù)集的并行運(yùn)算。MapReduce模型簡單易用,降低了軟件開發(fā)人員在并行程序結(jié)構(gòu)研發(fā)上的工作量,為地震數(shù)據(jù)處理軟件開發(fā)人員提供了新的算法開發(fā)思路。MapReduce實(shí)現(xiàn)過程主要分為兩個階段:Map(映射)階段和Reduce(歸納)階段。圖3給出了基于MapReduce框架的偏移成像實(shí)現(xiàn)方式,其中Map階段的主要任務(wù)是對分割好的數(shù)據(jù)進(jìn)行并行處理,處理后的結(jié)果傳輸給Reduce,由Reduce對多個并發(fā)的Map進(jìn)程的結(jié)果進(jìn)行規(guī)約。每個運(yùn)行作業(yè)中包含一個主節(jié)點(diǎn)和多個計算節(jié)點(diǎn),主節(jié)點(diǎn)負(fù)責(zé)所有的作業(yè)調(diào)度并對計算節(jié)點(diǎn)的作業(yè)情況進(jìn)行監(jiān)控,各個計算進(jìn)程間的通信純粹是用文件去聯(lián)系的,即每個Map的處理結(jié)果都要以文件的形式寫在分布式文件存儲系統(tǒng)上,然后Reduce階段再讀取Map階段生成的數(shù)據(jù),這個特性使得MapReduce有著良好的作業(yè)容錯性,當(dāng)某一級的某一個進(jìn)程出錯時,主節(jié)點(diǎn)會重新調(diào)度這個進(jìn)程到另外一個計算節(jié)點(diǎn)上重新運(yùn)行,但重新調(diào)度產(chǎn)生的開銷會比較大。
圖3 基于MapReduce框架的偏移成像實(shí)現(xiàn)方式
Spark是一種專為大規(guī)模數(shù)據(jù)處理而設(shè)計的類MapReduce的通用并行框架,它通過完善的分布式內(nèi)存計算以及處理優(yōu)化機(jī)制來提升作業(yè)的運(yùn)行速度。與MapReduce不同的是,Spark處理的中間結(jié)果可以全部在內(nèi)存中實(shí)現(xiàn)數(shù)據(jù)流轉(zhuǎn),可根據(jù)需要將數(shù)據(jù)進(jìn)行落盤。圖4給出了基于Spark框架的偏移成像實(shí)現(xiàn)方式,在整個計算過程中不需要頻繁讀寫數(shù)據(jù),以節(jié)省數(shù)據(jù)I/O帶來的較大開銷,因而作業(yè)的計算性能得到大幅度的提升。
圖4 基于Spark框架的偏移成像實(shí)現(xiàn)方式
Spark的核心是建立一種彈性分布式數(shù)據(jù)集(RDD),以實(shí)現(xiàn)數(shù)據(jù)在內(nèi)存中的批計算,RDD是一種抽象概念,代表了一種有容錯機(jī)制的數(shù)據(jù)集,其值存在于內(nèi)存中,并且只讀不能修改,但可以通過執(zhí)行轉(zhuǎn)換操作生成新的RDD,即Spark算法實(shí)現(xiàn)過程中是通過RDD的轉(zhuǎn)換等操作實(shí)現(xiàn)數(shù)據(jù)流轉(zhuǎn)的。Spark作業(yè)執(zhí)行過程中,每個RDD的生成與轉(zhuǎn)換都有記錄并與對應(yīng)的磁盤數(shù)據(jù)進(jìn)行關(guān)聯(lián),因此若某一階段的RDD丟失,則根據(jù)記錄關(guān)系,可以重新生成新的RDD,以保證作業(yè)的高容錯性。而記錄RDD這種依賴關(guān)系的工具叫做有向無環(huán)圖(DAG),Spark通過提前分析作業(yè)實(shí)現(xiàn)過程設(shè)計特定的DAG,以設(shè)定作業(yè)運(yùn)行所需要的全部操作。
基于Spark框架的逆時偏移成像技術(shù),其輸入數(shù)據(jù)的存儲以及讀寫基于Hadoop分布式文件存儲系統(tǒng)(HDFS)。HDFS具有較為完備的錯誤檢測和快速、自動的恢復(fù)機(jī)制,實(shí)現(xiàn)了較高的容錯性,對于海量數(shù)據(jù)的管理具有重要作用。此外,HDFS是“塊”級別的分布式系統(tǒng),即進(jìn)行文件存儲時會根據(jù)預(yù)設(shè)的數(shù)據(jù)塊大小將文件進(jìn)行分塊,并以鍵值(key-value)對的形式將各個數(shù)據(jù)塊存儲到不同節(jié)點(diǎn)上,同時將鍵值對映射到內(nèi)存中,作為文件索引以便文件的快速定位和讀取。不同于MPI的集中式存儲方式,基于HDFS的并行作業(yè)在計算時各節(jié)點(diǎn)優(yōu)先讀取存儲在自己節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行處理,避免了大量數(shù)據(jù)的網(wǎng)絡(luò)傳輸,實(shí)現(xiàn)“計算向存儲的遷移”,從而大大提高系統(tǒng)的計算效率,這對處理TB級乃至PB級的海量數(shù)據(jù)具有很大優(yōu)勢?;赟park框架的作業(yè)并行進(jìn)程數(shù)是由存儲數(shù)據(jù)的分塊數(shù)目決定的,為了保證作業(yè)運(yùn)行的負(fù)載均衡以及并行處理,本文主要采取了以下兩項(xiàng)技術(shù)方案。
1) 為了充分利用集群計算資源并滿足負(fù)載均衡,根據(jù)需要處理的地震數(shù)據(jù)量和可用計算資源設(shè)定數(shù)據(jù)塊大小(如128MB)以生成合理大小的RDD。具體實(shí)現(xiàn)過程為,若當(dāng)前節(jié)點(diǎn)資源數(shù)為M,總數(shù)據(jù)量大小為N,那么一個數(shù)據(jù)塊的大小可設(shè)定為n=N/(M×k),其中k為并行粒度的合理動態(tài)調(diào)整,以防止一個RDD數(shù)據(jù)量過大引起的并行粒度過粗。
2) 根據(jù)HDFS各計算節(jié)點(diǎn)讀取數(shù)據(jù)時優(yōu)先讀取本節(jié)點(diǎn)數(shù)據(jù)的特點(diǎn),為了保證負(fù)載均衡,采用數(shù)據(jù)均衡服務(wù)使得分塊數(shù)據(jù)的存儲滿足均衡分布。具體實(shí)現(xiàn)過程為:首先HDFS的NameNode根據(jù)集群內(nèi)每個DataNode磁盤使用情況生成一份數(shù)據(jù)分布分析報告,并根據(jù)需要移動的數(shù)據(jù)分布情況計算具體數(shù)據(jù)塊遷移路線圖,最后根據(jù)計算好的數(shù)據(jù)遷移路線圖完成數(shù)據(jù)遷移,以達(dá)到數(shù)據(jù)均衡標(biāo)準(zhǔn)。
以上兩項(xiàng)技術(shù)方案的應(yīng)用最大程度滿足了作業(yè)的負(fù)載均衡,輸入數(shù)據(jù)的讀取減少了網(wǎng)絡(luò)通信開銷,極大地提升了數(shù)據(jù)讀取效率。
由于Spark框架在算法過程中以輸入RDD為并行單元進(jìn)行偏移計算,而RDD是以數(shù)據(jù)塊的形式存儲,因此,對數(shù)據(jù)塊進(jìn)行分割時,需要對當(dāng)前數(shù)據(jù)的道頭先進(jìn)行判斷再進(jìn)行分割,以保證一個RDD內(nèi)包含的炮集為整數(shù)。對于包含多個炮集的RDD數(shù)據(jù)在計算過程中各個炮集會按序進(jìn)行計算并完成偏移結(jié)果的實(shí)時疊加,中間結(jié)果無需落盤,只在內(nèi)存中流轉(zhuǎn),因而無消息通信和數(shù)據(jù)等待時間,降低了I/O耗時,進(jìn)一步提升了計算效率。每個輸入的RDD(炮集數(shù)據(jù))在偏移計算完成后會轉(zhuǎn)換成新的RDD(偏移結(jié)果)并保存在內(nèi)存之中,新生成的RDD的鍵值對以主測線號-偏移剖面的形式存儲,每完成一個并行作業(yè)就會對新生成的偏移結(jié)果RDD按照既定的鍵值對進(jìn)行疊加,直至全部作業(yè)完成,最后按照既定的鍵值對中的主測線號對數(shù)據(jù)進(jìn)行排序生成最終的偏移結(jié)果并輸出。
逆時偏移成像計算過程中另一個重要的環(huán)節(jié)是斷點(diǎn)保護(hù)的實(shí)現(xiàn),由于本文方法基于Spark框架,算法實(shí)現(xiàn)過程是以輸入炮集RDD為并行單元進(jìn)行計算而且數(shù)據(jù)均是在內(nèi)存中流轉(zhuǎn),因此在實(shí)現(xiàn)斷點(diǎn)保護(hù)時以輸入RDD的偏移結(jié)果為最小并行粒度將數(shù)據(jù)落盤,同時記錄當(dāng)前已完成的RDD序號,并將其作為斷點(diǎn)續(xù)航的標(biāo)志,與MapReduce的中間結(jié)果全部落盤再規(guī)約的方式相比,Spark僅將已完成疊加后的偏移結(jié)果作為副本保存在HDFS上,實(shí)際計算的數(shù)據(jù)體仍在內(nèi)存中流轉(zhuǎn)。作業(yè)續(xù)發(fā)時若啟動斷點(diǎn)續(xù)發(fā),作業(yè)首先會判斷中間結(jié)果文件是否存在,若存在就讀取當(dāng)前結(jié)果并跳過已經(jīng)完成的RDD續(xù)發(fā)作業(yè),進(jìn)行剩余RDD的偏移,最終實(shí)現(xiàn)作業(yè)的斷點(diǎn)保護(hù)。圖5給出了基于Spark框架的偏移成像算法實(shí)現(xiàn)流程圖。
圖5 基于Spark框架的偏移成像算法實(shí)現(xiàn)流程
為了進(jìn)一步說明本文方法的實(shí)現(xiàn)過程,我們給出了主體算法的偽代碼(如圖6所示),同時也給出了斷點(diǎn)保護(hù)的實(shí)現(xiàn)機(jī)制,整個作業(yè)過程主要分為兩個階段(如圖7所示),第一階段主要是從分布式文件系統(tǒng)中讀取地震炮集數(shù)據(jù)生成所需RDD即seisData,并通過Spark的mapPartitions函數(shù)進(jìn)行RDD轉(zhuǎn)換和數(shù)據(jù)分區(qū),同時通過pair操作返回炮號-數(shù)據(jù)鍵值對,根據(jù)返回的鍵值對進(jìn)行單炮偏移并將每個單炮數(shù)據(jù)的偏移結(jié)果進(jìn)行疊加存放于如圖6中所示的result變量中,直至完成該RDD內(nèi)的所有炮數(shù)據(jù);第二階段主要是通過如圖7中所示的向量轉(zhuǎn)換(Shuffle)操作對輸入RDD的偏移結(jié)果按照鍵值重新轉(zhuǎn)換得到新的成像結(jié)果RDD并進(jìn)行偏移結(jié)果規(guī)約,進(jìn)一步對最終的偏移結(jié)果按鍵值排序并輸出結(jié)果resData。
圖6 主體算法偽代碼
圖7 有向無環(huán)圖(DAG)
為了檢驗(yàn)基于Spark大數(shù)據(jù)處理框架逆時偏移成像技術(shù)的應(yīng)用效果,選取了國內(nèi)西部某工區(qū)的一塊實(shí)際資料進(jìn)行了測試。該資料中淺層信噪比較高,以串珠成像和小斷裂成像為目標(biāo)。工區(qū)總計施工36516炮,采集的數(shù)據(jù)體大小約為3.04TB,數(shù)據(jù)存儲于HDFS文件系統(tǒng),并行讀取,使用的計算集群為125個Tesla P100的GPU節(jié)點(diǎn),每個節(jié)點(diǎn)兩個GPU卡,顯存為16GB,共250個GPU卡,每個節(jié)點(diǎn)的內(nèi)存為256GB,每個節(jié)點(diǎn)配置24TB的機(jī)械硬盤以及兩個1TB的固態(tài)硬盤,配置集群HDFS總存儲容量為2.6PB。由此可見,HDFS充分利用了每個節(jié)點(diǎn)的存儲資源,無需大容量的集中存儲就能實(shí)現(xiàn)PB乃至更高級別的數(shù)據(jù)存儲。這里設(shè)定512MB為數(shù)據(jù)塊分割的基本單位,共6086個數(shù)據(jù)塊,即并行進(jìn)程數(shù)為6086,平均每塊卡處理約24塊數(shù)據(jù),每塊數(shù)據(jù)包含6炮數(shù)據(jù)。該設(shè)定的并行粒度合理,節(jié)點(diǎn)間數(shù)據(jù)分配均衡,因而可有效提升數(shù)據(jù)讀取效率。成像結(jié)果參數(shù)為Nx=1901,Ny=1071,Nz=1001,即成像結(jié)果大小為7.6GB。圖8給出了基于Spark框架下的兩條線的偏移成像結(jié)果,可以看出,偏移成像結(jié)果具有較高的分辨率,串珠收斂,斷層接觸關(guān)系清晰。
圖8 偏移成像剖面a line 390; b line 550
為檢驗(yàn)基于Spark大數(shù)據(jù)處理框架的地震偏移成像技術(shù)的計算效率優(yōu)勢,利用上述數(shù)據(jù)分別進(jìn)行了3種并行計算實(shí)現(xiàn)方式的地震偏移成像計算,由于3種方式的核心計算方法一致,因此得到的偏移成像結(jié)果是一樣的,此外,對應(yīng)的單炮偏移時間效率相同。影響3種實(shí)現(xiàn)方式計算效率的主要因素是數(shù)據(jù)的I/O以及規(guī)約通信。其中,利用基于MPI并行方式進(jìn)行測試時,由于存儲和計算相互獨(dú)立,因而將數(shù)據(jù)集中存儲在一套特定的存儲節(jié)點(diǎn)上,各計算節(jié)點(diǎn)通過網(wǎng)絡(luò)通信進(jìn)行輸入炮集數(shù)據(jù)讀取,經(jīng)統(tǒng)計,網(wǎng)絡(luò)傳輸速率均值穩(wěn)定在150MB/s。而基于MapReduce和Spark的并行方式均基于HDFS讀寫,優(yōu)先獲取存儲在本地磁盤的炮集數(shù)據(jù),而本地磁盤的讀寫速率一般穩(wěn)定在400MB/s,即基于HDFS的數(shù)據(jù)讀寫效率是基于網(wǎng)絡(luò)傳輸效率的2.6倍,因此基于Spark框架的偏移算法在輸入數(shù)據(jù)尤其針對海量數(shù)據(jù)時的效率要明顯優(yōu)于MPI。此外,關(guān)于偏移結(jié)果數(shù)據(jù)規(guī)約,此次數(shù)據(jù)共包含36516炮數(shù)據(jù),對于MPI在此次測試集群中并行度設(shè)定為250,總共250個進(jìn)程,平均每個進(jìn)程處理146炮,即在偏移過程中每個進(jìn)程除了需要從管理輸入的主進(jìn)程0(圖2)進(jìn)行146次數(shù)據(jù)讀取之外,在數(shù)據(jù)規(guī)約時還需和管理輸出的主進(jìn)程1進(jìn)行146次成像結(jié)果的傳輸并落盤,由此在實(shí)際計算過程產(chǎn)生了較大的數(shù)據(jù)通訊以及數(shù)據(jù)I/O開銷。對于MapReduce,在每完成一個Map偏移時,其對應(yīng)的偏移結(jié)果都會單獨(dú)落盤,進(jìn)而在Reduce階段對所有Map的結(jié)果進(jìn)行疊加(圖3),即基于MapReduce框架對應(yīng)的偏移過程和規(guī)約過程完全分離,該模式雖具有高度作業(yè)容錯性但帶來了巨大的數(shù)據(jù)I/O開銷,因而降低了作業(yè)效率。此次測試中,炮集數(shù)據(jù)共分割為6086個數(shù)據(jù)塊,即對應(yīng)的Map數(shù)為6086并對應(yīng)產(chǎn)生6086個成像結(jié)果文件,每個文件大小為7.6GB,共產(chǎn)生45TB中間結(jié)果,在Reduce階段,對這些數(shù)據(jù)進(jìn)行規(guī)約,不僅對儲存產(chǎn)生較大壓力,同時也造成巨大的I/O開銷。而Spark框架基于分布式內(nèi)存計算,在偏移計算過程中數(shù)據(jù)在內(nèi)存中流轉(zhuǎn)直接完成疊加,疊加耗時基本隱藏在偏移計算過程中,沒有額外的數(shù)據(jù)I/O開銷,計算效率的優(yōu)勢較為明顯。數(shù)據(jù)測試時間的統(tǒng)計結(jié)果表明,假設(shè)MPI的運(yùn)行時間為1,則基于MapReduce的運(yùn)行時間為1.3,而基于Spark框架的運(yùn)行時間為0.9,表1給出了3種實(shí)現(xiàn)方式的數(shù)據(jù)讀取速率和相對總運(yùn)行時間。
表1 3種并行實(shí)現(xiàn)方式運(yùn)行時間對比
本次測試數(shù)據(jù)大小為3.04TB,這種規(guī)模的數(shù)據(jù)對集中存儲方式的硬盤容量有較高的要求,隨著數(shù)據(jù)量的進(jìn)一步提升,集中存儲的容量將難以滿足存儲要求。此外,在實(shí)際計算過程中,集中存儲的數(shù)據(jù)頻繁讀取會大量使用網(wǎng)絡(luò)通信從而嚴(yán)重影響數(shù)據(jù)讀取效率,此時基于Spark的分布式文件存儲將體現(xiàn)出更大的優(yōu)勢。
本文提出了一種基于Spark大數(shù)據(jù)處理框架的地震偏移成像技術(shù),并通過實(shí)際數(shù)據(jù)測試從數(shù)據(jù)I/O、規(guī)約通信等方面與MPI和MapReduce兩種并行實(shí)現(xiàn)方式下的逆時偏移成像技術(shù)進(jìn)行了對比論述,驗(yàn)證了該技術(shù)的成像精度以及計算高效性。近年來,隨著地震勘探目標(biāo)的逐漸精細(xì)化,單點(diǎn)高密度地震技術(shù)不斷發(fā)展,由此產(chǎn)生了海量地震數(shù)據(jù)。本文方法充分利用了Spark框架分布式存儲的特性以及分布式內(nèi)存的優(yōu)勢,實(shí)現(xiàn)了海量數(shù)據(jù)存儲并有效提升了讀寫效率,并且隨著地震數(shù)據(jù)量的進(jìn)一步增加,分布式存儲的優(yōu)勢將會得到更好的體現(xiàn)。本文方法尚未對逆時偏移的核心算法進(jìn)行Spark框架的全面融合,因此下一步可將分布式內(nèi)存計算應(yīng)用到逆時偏移核心算法如波場延拓過程中的波場存儲等階段,從而進(jìn)一步減少數(shù)據(jù)I/O,提升算法效率。Spark作為一種專為海量數(shù)據(jù)處理而設(shè)計的高效通用計算框架,可針對地震數(shù)據(jù)處理過程中的多個階段進(jìn)行優(yōu)化,基于Spark框架進(jìn)行地震資料處理技術(shù)的開發(fā),對于提升海量數(shù)據(jù)的處理效率具有重要意義。