張 賽 司冠南* 周風余 蔡 寅
1(山東交通學院信息科學與電氣工程學院 山東 濟南 250300) 2(山東大學控制科學與工程學院 山東 濟南 250100) 3(山東省地震局 山東 濟南 250014)
目前,相對波速變化的計算在與火山活動和地震相關的地下結構變化研究領域應用非常廣泛。波速變化計算的實質就是通過對兩接收點上的地震臺站背景噪聲數據進行互相關運算[1-3],可以提取兩點之間的格林函數[4-5],通過測量當前經驗格林函數與參考經驗格林函數的相對走時偏移來計算相對波速的變化。隨著計算機技術與地震學研究的飛速發展,地震臺站數量大大增加,測量數據量也急劇增長。傳統的串行化處理方式是在單臺計算機上多次迭代,實時性較低,處理數據的速度遠遠落后于數據獲取的速度,導致大量的數據無法及時轉化為可用的信息,顯然這種處理數據的方式已不能滿足現有的需求。針對處理海量數據時相比并行方式存在計算速度慢、消耗時間長等問題,將大數據應用到地震行業的數據處理中成為一種趨勢。謝瑋等[6]基于Hadoop的大數據技術構建的大型地震勘測軟件平臺。王秀英等[7]利用大數據的研究思想,提出了一種前兆識別方法。張加慶[8]針對傳統空間模型在地震數據處理過程中造成地震損失評估結果偏差大的問題,基于大數據設計了一種地震損失價值評估模型。隨著數據量的不斷增加,數據的存儲管理、共享服務達到了性能瓶頸,郭凱等[9]基于大數據技術提出了相應的分布式管理和計算架構。陳湉等[10]根據地震災區的物資需求和傷員的病情的需要,基于大數據提出了震后物資和人員的調度模型。現階段,國內外關于波速計算的并行化計算研究較少,可以把大數據應用到波速計算當中,作為一個研究方向。目前一些相關算法的并行化的研究有: Rizvandi等[11]提出了基于hadoop框架實現PKTM算法,通過使用映射規約模式方法把原始地震數據集轉換成鍵值,然后進行數據處理,盡管改進了處理速度,但導致了過多的I/O開銷。Kurte等[12]基于多核GPU和MPI的并行方法處理遙感災害的數據,提出的并行方法雖然可以實現快速處理數據的目的,但是計算過程中進程的開銷較大。因此,本文針對常規方法面向海量數據的相對波速變化計算速度較慢的特點,結合Spark[13-15]優勢提出一個基于分布式框架[16-17]的模型,將原始地震數據移植到計算框架中,并充分利用并行計算思想加速處理。
模型設計的目的是將存儲在HDFS上的對應波形數據分發到Spark框架的計算節點上進行并行計算來提高相對波速變化計算的速度。
分布式波速計算流程如圖1所示。

圖1 波速計算流程
波速計算流程主要包括以下內容:
1) 對地震原始數據進行數據處理,數據缺失時采用數據插補的方式,即采取前后相鄰幾個數據的平均值作為插值。
2) 對處理后的數據進行波形的整理,得到所需的SAC文件。
3) 將上述SAC文件進行歸一化處理,將分布式歸一化后的文件集合作為下一步并行計算的輸入。
4) 對上述數據集在Spark平臺上并行計算,最后把生成的數據文件存儲到HDFS中。
5) HDFS能提供高吞吐量的數據訪問,適合存儲處理完的大量地震數據文件,用于數據的共享和調度。
1.2.1數據準備階段
對源數據進行數據處理之后,整理對應波形,得到我們所需的不同時點上的各分量波形SAC文件,之后將兩個臺站在不同時點上的各分量波形SAC文件一一對應起來,每個時點的對應關系組成一個二元組,形如:
1.2.2分布式時域歸一化
傳統的波速計算首先在波形中取一系列的小窗口,計算速度擾動前后該窗口內的走時擾動Δτi;根據上述模型,對上述操作中構成的波形對應集合進行分布式處理,方便下一步Spark的模型對歸一化的數據進行分布式數據計算,達到快速計算的目的。
1) 以每個二元組為一個數據單元,均勻分布到M=S×C個算法執行隊列中并行執行波形數據轉換,其中:S為計算節點的數量;C為計算節點的CPU核心數。
2) 提取二元組各波形文件的數據,執行多頻段進行時域歸一化,并疊加這些歸一化的曲線來生成1個寬頻帶數據,然后進行互相關運算,在時域和頻域得到更加均勻的能量分布。
3) 最后每個數據單元形成名為“Station1_Station2_Time .dat”的數據文件,并將所有文件的集合作為輸入執行下一步計算,其中:Station1、Station2為臺站名稱;Time為選取的時點。
1.2.3分布式數據計算
在傳統的波速計算中,假設在流逝時間處的小窗口,其長度為2tw,計算窗口內fcur與fref的互相關函數的相位譜φ(f),其相位誤差為:
(1)
式中:c為相干系數;Bω為信號的頻譜寬度。若窗口內的走時偏移Δτi為常數,則φ(f)的線性函數為:
φ(f)=2πΔτif
(2)
因此可用互相關函數的相位譜的斜率計算Δτi,即:
(3)

(4)
其中:
(5)
針對上述傳統的計算波速的問題,提出以下并行計算的框架,此模型設計的分布式計算的框架如圖2所示。

圖2 分布式計算的框架
1) 數據處理后的數據存儲在HDFS中,便于數據資源的調度和共享。
2) Spark框架對數據源的分布式計算,得到最后的結果。
3) 將結果集存儲到HDFS中。
上述模型將數據集均勻分布到多個算法執行隊列中并行計算。然后按照波速計算的原理,通過以下步驟計算出上述整合的分布式數據集。
1) 將分布式時域歸一化所形成的文件集合整合成分布式數據集,數據集的數量應滿足:
(6)
M≤S×C,M≤N≤ND
(7)
式中:TA為所有數據集計算總時間;TP為系統進行并行調度的損耗時間;N為分布式數據集的數量;TD為每個數據文件的計算時間;ND為數據文件的數量;M為計算隊列數量;S為計算節點的數量;C為計算節點的CPU核心數。TA、N、M未知,且TA需要取值最小。
2) 根據數據文件的數量ND,通過非線性規劃法求得N、M的值。
3) 將數據集均勻分布到M個算法執行隊列中并行執行。
4) 每個數據文件形成名為“Station1_Station2_.txt”的結果文件。
本文方法的優點在于通過對數據集的劃分與算法的調度,并行執行相對波速變化計算,在多個計算節點的支持下可以大大提高相對波速變化計算的速度。
采用50個計算節點進行地震波速計算處理,每個計算節點配置3核心CPU和16 GB內存,數據量分別為131天、181天、231天、281天。
1) 將兩個臺站LAW和TIA在不同時點上的各分量波形SAC文件一一對應起來。每個時點的對應關系組成一個二元組,形如:
<2019.001_LAW_BHE.SAC, 2019.001_TIA_BHE.SAC>
所有二元組組合起來構成一個波形對應集合,并將此集合作為分布式數據集。
2) 將上述生成的分布式數據集以每個二元組為一個數據單元,均勻分布到150個算法執行隊列中并行執行。提取二元組各波形文件的數據,執行多頻段進行時域歸一化,并疊加這些歸一化的曲線來生成1個寬頻帶數據,然后進行互相關運算,在時域和頻域得到更加均勻的能量分布。每個數據單元形成名為“LAW_TIA_2019.001.dat”的數據文件,并將所有文件的集合作為輸入執行下一步計算。
3) 將文件集合整合成分布式數據集。經測量,系統進行并行調度的損耗時間為5 min,每個數據文件的計算時間為3 min。數據集的數量應滿足:
(8)
M≤150M≤N≤ND
(9)
TA、N、M未知,且TA需要取值最小。根據數據文件的數量,ND分別取值131、181、231、281。
4) 把每個數據文件形成名為“LAW_TIA_.txt”的結果文件,將最終的數據文件整合到一起上傳到HDFS中存儲,使得數據共享和 I/O 的效率更高。
處理131天、181天、231天、281天分布式、單機MATLAB需要的時間并行化效果如圖3所示。

圖3 波速計算并行化時間對比
如圖3所示,隨著時間天數的增加,此方法并行計算得到數據的時間明顯小于采用單機MATLAB計算得到相應數據時間,當數據量達到281天的時候,利用本文方法時間為7.5 min,而采用單機MATLAB計算得到相應數據時間為92.24 min,這較好地顯示出所設計模型的并發調度的優勢,且模型具有較好的穩定性和可擴展性。
圖4為分布式與單機時間比的趨勢走向。

圖4 分布式與單機MATLAB時間比
如圖4所示,曲線存在整體下降的趨勢,說明并行計算的速度較快,從131天的數據量到231天的數據量的過程中,分布式與單機的時間比從9.85%下降到7.20%,分布式與單機的時間比越來越小,與小數據量計算任務相比,大數據量的計算任務的效率更高。181天到231天這段曲線相對平滑,沒有明顯下降的趨勢,原因有以下三點:
1) 兩次數據集的數據量比較接近。
2) 等待入隊的數據集相差不多,一個為31天的數據集,一個為81天的數據集。
3) 計算節點處理數據的情況相同,沒有出現計算節點處理速度過慢或過快的問題。
隨著數據量的增加,等待入隊的數據集增加,抵消了基于負載均衡并行策略帶來的快速計算的效果,可以看到231天到281天分布式與單機MATLAB的時間比出現了上升的趨勢,曲線上升的原因有以下兩點:
1) 計算的數據集比較大。
2) 處理281天數據集時,有的計算節點處理速度較慢,長時間占據計算節點,導致其他的數據集不能入隊進行計算。
圖5為基于負載均衡的并行策略。

圖5 基于負載均衡的并行策略
由圖5可知:
1) 因為該模型采用50個計算節點進行處理,每個計算節點配置3核心CPU和16 GB內存,所以一共150個計算節點。
2) 當對131天的數據集進行計算時,131天的數據可以同時放到150個計算節點中進行計算,這個時候會有19個計算節點空閑出來,導致資源的浪費。
3) 當對181天的數據集進行計算時,前150天的數據集進入隊列進行計算,當任意一個計算節點處理完數據空閑出來之后,剩余的31天數據集會基于負載均衡的并行策略及時入隊到計算節點完成的隊列中去,直到最后計算完成。
4) 當對231天,281天的數據集進行計算時,入隊原理同3)。
實驗表明,通過對數據集的劃分與算法的調度,并行執行相對波速變化計算,在多個計算節點的支持下可以提高相對波速變化計算的速度。
本文從并行化的角度,研究了面向海量數據的相對波速變化計算的方法,以地震波速計算為例,采用了并行計算的思想,利用分布式計算的算法對波速進行了并行計算,解決了傳統的串行化相對波速變化計算方法面向海量數據時存在計算速度慢、消耗時間長等問題,此外展示了分布式與單機實現相比的可行性和性能收益。實驗表明,隨著數據量的不斷增加,相對波速變化計算比相對于單機計算效率明顯提高。
模型的流程中還存在人工干預的環節,如:1) 數據的處理;2) 計算節點數的選取。今后可以從模型的流程的一體化方向以及計算節點數的選取做進一步的研究。