计算机系统应用  2021, Vol. 30 Issue (8): 126-132   PDF    
基于Apache Spark的地震观测数据噪声功率谱计算
郭凯1,2,3, 黎建辉1, 温亮明1,2, 韩振华4     
1. 中国科学院 计算机网络信息中心, 北京 100190;
2. 中国科学院大学, 北京 100049;
3. 中国地震台网中心, 北京 100045;
4. 太原理工大学, 太原 030024
摘要:为解决单机环境下海量地震观测数据计算和分析效率低下的问题, 提出一种基于分布式架构的地震观测数据的存储、计算和分析处理方法, 选择噪声功率谱复杂计算过程的应用场景进行实现. 基于Hadoop在海量数据处理上的性能优势, 在分布式文件存储系统HDFS上进行地震观测数据的存储和调度, 研究测震数据噪声功率谱的质量评估方法在Spark分布式计算架构上的实现, 采用弹性数据集Spark RDD将计算任务自动分配到计算节点, 解析存储在HDFS中的测震波形数据, 计算结果采用RowKey方式放入分布式数据库HBase中, 实现了长周期地震噪声功率谱结果的存储和提取. 计算结果表明, 基于Spark分布式架构的该方法可以支撑TB级海量数据的处理, 并且具有较高的处理效率, 可应用于海量地震观测数据的分析计算.
关键词: 地震观测数据    噪声功率谱    Spark    Hadoop    分布式    
Noise Power Spectrum Calculation Method of Seismic Data Based on Apache Spark
GUO Kai1,2,3, LI Jian-Hui1, WEN Liang-Ming1,2, HAN Zhen-Hua4     
1. Computer Network Information Center, Chinese Academy of Sciences, Beijing 100190, China;
2. University of Chinese Academy of Sciences, Beijing 100049, China;
3. China Seismic Network Center, Beijing 100045, China;
4. Taiyuan University of Technology, Taiyuan 030024, China
Foundation item: National Key Research and Development Program of China (2018YFC1504500); Research Project for Monitoring, Forecasting, and Scientific, China Earthquake Administration (3JH-20200207)
Abstract: To solve the problem of inefficient calculation and analysis of massive seismic data in a single machine environment, we propose a distributed architecture based method for storage, calculation, and analysis of seismic data and select the complex calculation process of a noise power spectrum as the application scenario for implementation. In light of Hadoop’s performance advantage in massive data processing, the storage and scheduling of seismic data are carried out on the Hadoop Distributed File System (HDFS). The implementation of the quality evaluation method for the noise power spectrum of seismic data in Spark distributed computing architecture is studied. The elastic dataset Spark RDD is used to automatically allocate the tasks to the computing nodes, and the seismic waveform data stored in HDFS is analyzed. In addition, the calculation results are input into the distributed database HBase in the RowKey mode, realizing the storage and extraction of the power spectra of long-period seismic noise. The calculation results show that the method based on Spark distributed architecture can support the efficient processing of massive data at the TB level in volume, which can be applied to the analysis and calculation of massive seismic data.
Key words: seismic data     noise power spectrum     Spark     Hadoop     distributed    

在随着国内地震观测台站的持续布局, 我国的地震观测台网不断加密, 截至2018年底, 中国地震台网中心实时汇集的测震台站数量已经达到了1107个, 地震观测数据每年汇集的量级已经达到数十TB级别. 如此海量级数据体量对数据的汇集和分析带来了巨大的挑战, 采用传统单机模式进行的计算和分析在时效性上已经无法满足要求.

以数据质量评估为例, 地震观测台站记录系统瞬态变化、仪器毛刺、数据记录的阶跃、尖峰以及由于系统故障引起的信号失真和重大环境的干扰等, 都是影响数据记录质量的重要因素, 国际上主要采用噪声功率谱PSD[1]和功率谱密度概率密度函数PDF等方法进行台站的噪声水平监测[2]. 目前美国地震学研究联合会(IRIS)数据管理中心(DMC)将相关方法集成形成了单机运行的软件PQLX和相关脚本程序, 国内相关研究开发大多都采用Matlab等单机程序开发编制[3]. 这些处理方法计算效率受限于单机处理能力, 在面向海量地震观测数据计算时均存在磁盘IO瓶颈, 主要原因在于其处理保存的数据量和计算结果非常有限, 一般仅能处理半年到一年之内全国监测台网的数据, 不利于对地震观测台站进行长周期的数据质量评估和挖掘分析.

随着大数据技术的高速发展, 以Hadoop和Spark为代表的开源大数据平台在处理海量数据的IO并发和处理速度方面都体现了巨大优势, 它们为存储和处理大数据提供了动态、弹性和可伸缩的数据存储和分析解决方案, 在密集科学数据处理和分析挖掘应用中取得了较好的效果[4], 如生物学领域的密集计算[5]、海量行人轨迹数据的挖掘分析[6]、海量日志文件的分析等. 在地震学领域也开展了相关研究[7], 如基于MapReduce实现地震数据的成像[8], 基于Apache Spark实现地震事件的快速分类等[9]. 尽管相关研究工作已经表明大数据技术在海量地震观测数据处理上具备可行性和应用性能优势, 但成果的重心偏向于海量数据计算速度上的提升, 而对数据的全链条处理和分析较少关注. 本文试图从海量测震波形数据的分布式汇集、存储到分布式计算架构构建开展数据全链条研究, 选择在地震观测数据质量评估中需要密集计算的噪声功率谱方法进行具体实现.

1 地震观测数据分布式处理框架 1.1 地震观测数据的分布式汇集和归档

中国地震台网中心实时汇集的地震观测数据采用国际标准的MiniSeed格式, 每一个文件中存储了一个台站一个分项的24个小时观测数据,数据汇集在磁盘阵列、网络附属存储(NAS)等存储介质中, 全国1107个台站的具体分布如图1所示.

图 1 地震观测台站分布

按照NAS的存储性能和网络带宽限制, 一般每秒可处理的数据吞吐量在几十MB左右, 显然在面对TB级别的业务计算场景时, 该速度已经无法满足要求. Hadoop是一种专门用于批处理的分布式系统基础架构, 其通过配合使用多个组件来实现批处理业务: ① 分布式存储层HDFS, 协调集群节点间的存储和复制, 作用于数据来源, 保障整个集群中发生故障时数据的冗余, 用于存储中间态的处理结果和计算的最终结果, 完成海量数据的存储; ② 资源调度层YARN, 协调并管理底层资源和调度作业的运行. Hadoop广阔的生态系统和与其他框架/引擎之间良好的兼容性与集成能力使其成为多种工作负载处理平台的底层基础. 我们选取了2013年1月~2020年10月的地震观测波形数据进行迁移, 目前已迁移约数据体量约为70 TB, 通过万兆网络将这些数据传输到分布式文件系统HDFS中, 按照1:3的比例对数据进行副本设置以确保归档数据的安全性, 即将一份数据分布存储在3个数据节点上(如图2所示), 归档数据按照年/月/日/台站_测项的路径进行存储.

图 2 地震观测数据的分布式存储归档

1.2 噪声功率谱的分布式计算实现

目前主流的开源分布式计算系统主要有MapReduce、Spark、Flink、Storm等[10], MapReduce在数据处理过程中需要在硬盘进行读取和写入, 降低了运行速度, 而随着硬件性能的不断提升, 基于内存计算的分布式计算框架相对MapReduce有了明显提升. 针对海量地震观测数据进行高并发的计算与分析, 建立一套具有高可靠、高处理性能、可在线弹性伸缩、可不间断接收任务的处理模型,由于本文要实现的数据密集计算场景一般以小时为单位进行计算, 所以在计算架构上不考虑应用与实时数据解析计算相关的Storm和Flink系统. 同时由于PSD算法包含了复杂的迭代过程, 相对于Hadoop的MapRedurce而言, Spark在这方面有着较明显的优势[11]. 综合以上多种因素, 我们的数据处理模型采用分布式内存计算平台Spark, 聚焦海量地震观测数据的分布式噪声功率谱计算进行模型设计和实现, 如图3所示.

图3中, 处理模型从上至下共分为3个层次. 最上层为数据源层, 主要来源于地震历史观测数据文件, 这些文件存储在台网中心的NAS存储服务器上, 通过HDFS的标准接口将NAS系统上的数据推送到HDFS文件系统中.

图 3 地震观测数据的分布式处理模型设计

中间层为数据处理层, 主要完成数据计算和数据处理过程, 提供基于地震观测数据的预处理、台站仪器基础数据以及分布式架构的PSD数值计算. Spark的主节点在接收到前台传递需要处理计算的参数后(日期、台站以及通道)分配处理任务所需的资源后, 将任务分发到各个工作节点, 由各个节点完成计算过程并将结果反馈给主节点. 当处理层在接收到PSD计算请求时, 算法调度模块根据请求参数中的时间范围、台网以及台站等参数查询出需要计算的每个文件的具体位置, 同时将文件位置以及任务ID推送至计算模块的sever端; 计算模块在接收到计算请求后, 通过参数中的路径直接从HDFS上获取需要处理的mseed文件, 并对每个mseed文件进行计算. 这里PSD的计算模块主要采用美国地震学研究联合会(IRIS)数据管理中心(DMC)提供的PSD计算程序, 数据计算完成后, 计算模块将计算结果生成在一个临时文件中(频率和PSD数据值), 并通过sever将计算结果和临时文件的路径通知算法调度模块, 算法调度模块根据临时文件路径去解析临时文件并与查询参数组成的RowKey一起存入HBase数据表中.

最下层为数据存储层, 主要提供处理层中各类计算结果的存储, 包括PSD值和PDF值. 由于全国台站每个分项的观测数据计算频率为每小时一次, 因此需要将这些大量的结果数据存储在分布式数据库HBase中, 通过HBase接口进行存储和访问处理. 当大量的计算结果到HBase数据库时, 由于HBase表会被划分为1,…, n个Region, 被托管在RegionServer中. Region两个重要的属性: start-key与end-key表示这个Region维护的RowKey范围, 当我们要读/写数据时, 如果RowKey落在某个start-end key范围内, 那么就会定位到目标region并且读/写到相关的数据. 鉴于几点, 在设计表将计算结果按照台站首写字母进行排序存放在一个region里面, 使得数据检索更加快捷方便, 尤其在scan某个通道的数据设置start-key和end-key时, 只需在某个Region里面检索就可以了; 各个Region分散在集群的各个位置, 增加了数据读写的并发量. 这里数据处理模块按照小时对地震观测数据的PSD值进行计算, 采用RowKey格式为“台网代码_台站代码_测项代码_年_月_日_小时”, colum为”value”, 储存值为以某个小时的PSD数值.

2 实验验证 2.1 测试环境构建

为了验证以上分析处理框架的有效性, 我们搭建了测试系统进行实验验证. 设计的系统总体软硬件部署如图4所示, 采用14台高性能服务器搭建了具体的系统集群环境(如图5所示). 14台服务器的具体部署情况为: 2台作为管理节点, 8台存储型服务器作为存储节点, 4台服务器作为计算节点. 各类型服务器的基本配置信息如表1表2所示. 所有服务器均为机架式服务器, 配置12个可热拔插的硬盘接口, 其中存储服务节点挂载12块4 TB SATA硬盘, 计算节点配置4块600 GB高速SSD 硬盘.

图 4 计算节点数据处理流程

图 5 软硬件部署图

表 1 存储型服务器基本配置信息

表 2 计算型服务器基本配置信息

2.2 性能测试

基于上述搭建的环境, 我们以不同数据量开展了计算测试. 为了对系统整体计算性能进行充分测试, 按照4个计算节点, 以不同数据集计算时间来进行评估. 如图 6所示, Data Number 为计算任务包含的单个台站24小时记录的连续波形数据数量, 每一条数据量约12 MB. 计算结果显示, 集群在数据处理能力上处理时间与任务量呈现很好的线性关系, 处理速度并不会因为数据量的极速增加而变慢, 处理完成1个月全国汇集的地震观测数据, 数据量约1 TB的计算约需要60个小时, 而基于单节点, 采用IRIS DMC的PSD程序开展同样计算需要处理的时间可能会超过了10天, 且在海量数据的处理和计算结果存储上会受到单机计算节点性能的影响. 通过整体评估以及已有研究工作[12], 单机节点计算与本文采用的方法计算速度比值约为 1:N, N为计算节点的数量, 即集群可以直接通过增加计算节点提升集群处理速度, 具有很好的扩展性, 面向数据密级型的业务计算和存储分析具有很好的性能表现.

在计算结果的存储和分析上, 我们按照RowKey的方式进行计算结果的存储, 如图7(a)所示, 一条数据表示一个台站单个分项某个小时的PSD值, 图7(b)为对存储计算结果的数量统计, 目前存储条数已经超过了2000万条. 而如此海量计算结果的可以通过HBase Shell或者HappyBase 等多种方式进行高效的检索和获取, 在大数据分析和处理上相对单机节点具有明显优势. 时间分布结果如图8所示.

3 结论与展望

本文采用目前主流的Hadoop和Spark技术, 基于海量地震观测数据的业务应用场景, 设计了基于HDFS的地震观测数据分布式归档和基于Spark分布式计算架构, 适用于数据密级业务场景的计算和分析. 从开展的不同数量级计算任务来看, 本文所提出的方法在原始程序数据处理流程上优化了数据的接入和处理环节, 计算速度不会因数据量的大幅度提升而下降, 解决了单机节点处理海量数据的IO瓶颈和计算瓶颈, 大规模提升了计算能力和可处理数据能力; 在普适性方面, 本文设计的方法更适用于海量数据的计算和管理, 随着数据量的增加不需要频繁建立新表和选择存储环境, 单机环境下计算和处理存储的数据量有限, 数据量较大时需要投入更多人力处理环节.

图 6 建立的分布式数据库集群和Spark计算集群环境

图 7 本文设计的HBase存储的PSD计算结果和HBase存储数据表

图 8 集群处理不同数量级计算任务的时间分布

参考文献
[1]
Peterson JR. Observations and modeling of seismic background noise. U. S. Geological Survey, 1993.
[2]
McNamara DE, Buland RP. Ambient noise levels in the continental United States. Bulletin of the Seismological Society of America, 2004, 94(4): 1517-1527. DOI:10.1785/012003001
[3]
谢江涛, 林丽萍, 谌亮, 等. 地震台站台基噪声功率谱概率密度函数Matlab实现. 地震地磁观测与研究, 2018, 39(2): 84-89. DOI:10.3969/j.issn.1003-3246.2018.02.012
[4]
Petrov M, Butakov N, Nasonov D, et al. Adaptive performance model for dynamic scaling Apache Spark Streaming. Procedia Computer Science, 2018, 136: 109-117. DOI:10.1016/j.procs.2018.08.243
[5]
Cattaneo G, Giancarlo R, Petrillo UF, et al. MapReduce in computational biology via hadoop and spark. Encyclopedia of Bioinformatics and Computational Biology, 2019, 1: 221-229.
[6]
Karim L, Boulmakoul A, Mandar M, et al. A new pedestrians’ intuitionistic fuzzy risk exposure indicator and big data trajectories analytics on Spark-Hadoop ecosystem. Procedia Computer Science, 2020, 170: 137-144. DOI:10.1016/j.procs.2020.03.018
[7]
Tian Y, Liu C, Yan HH. Accelerate large-scale seismic data Kirchhoff time migration in spark. Proceedings of 2018 4th International Conference on Information Management. Oxford, UK. 2018. 41–45.
[8]
Rizvandi NB, Boloori AJ, Kamyabpour N, et al. MapReduce implementation of Prestack Kirchhoff Time Migration (PKTM) on seismic data. Proceedings of the 2011 12th International Conference on Parallel and Distributed Computing. Gwangju, Republic of Korea. 2012. 86–91.
[9]
Popov SE, Zamaraev RY. A fast algorithm for classifying seismic events using distributed computations in Apache Spark framework. Programming and Computer Software, 2020, 46(1): 35-48. DOI:10.1134/S0361768820010053
[10]
Chintapalli S, Dagit D, Evans B, et al. Benchmarking streaming computation engines: Storm, Flink and Spark streaming. Proceedings of 2016 IEEE International Parallel and Distributed Processing Symposium Workshops. Chicago, IL, USA. 2016. 1789–1792.
[11]
胡俊, 胡贤德, 程家兴. 基于Spark的大数据混合计算模型. 计算机系统应用, 2015, 24(4): 214-218. DOI:10.3969/j.issn.1003-3254.2015.04.038
[12]
郭凯, 黄金刚, 彭克银, 等. 大数据技术在海量测震数据中的研究应用. 地震研究, 2017, 40(2): 317-323. DOI:10.3969/j.issn.1000-0666.2017.02.020