算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。
不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法工程师就是利用算法处理事物的人。
今天真是一个美好的时代,有无数的开源系统可以为我们提供服务,现在有许多开发软件可以用到工业大数据中,当然很多系统还不成熟,应用到工业中还需要小心,并且需要开发人员对其进行一定的优化和调整。下面就简单介绍一些开源的大数据工具软件,看看有哪些能够应用到工业大数据领域。
下面这张图是我根据网上流传的一张开源大数据软件分类图整理的:
我们可以把开源大数据软件分成几类,有一些可以逐步应用到工业大数据领域,下面就一一介绍一下这些软件。(以下系统介绍大都来源于网络)
1、数据存储类
(1)关系数据库MySQL
这个就不用太多介绍了吧,关系型数据库领域应用最广泛的开源软件,目前属于 Oracle 旗下产品。
(2)文件数据库Hadoop
Hadoop是大数据时代的明星产品,它最大的成就在于实现了一个分布式文件系统(Hadoop Distributed FileSystem),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上,而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。
Hadoop可以在工业大数据应用中用来作为底层的基础数据库,由于它采用了分布式部署的方式,如果是私有云部署,适用于大型企业集团。如果是公有云的话,可以用来存储文档、视频、图像等资料。
(3)列数据库Hbase
HBase是一个分布式的、面向列的开源数据库,HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
基于Hbase开发的OpenTSDB,可以存储所有的时序(无须采样)来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集所有metrics,支持永久存储,可以做容量规划,并很容易的接入到现有的报警系统里。
这样的话,它就可以替代在工业领域用得最多的实时数据库。
(4)文档数据库MongoDB
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB适合于存储工业大数据中的各类文档,包括各类图纸、文档等。
(5)图数据库Neo4j/OrientDB
图数据库不是存放图片的,是基于图的形式构建的数据系统。
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、 企业级 的数据库的所有好处。
OrientDB是兼具文档数据库的灵活性和图形数据库管理 链接 能力的可深层次扩展的文档-图形数据库管理系统。可选无模式、全模式或混合模式下。支持许多高级特性,诸如ACID事务、快速索引,原生和SQL查询功能。可以JSON格式导入、导出文档。若不执行昂贵的JOIN *** 作的话,如同关系数据库可在几毫秒内可检索数以百记的链接文档图。
这些数据库都可以用来存储非结构化数据。
2、数据分析类
(1)批处理MapReduce/Spark
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。
这些大数据的明星产品可以用来做工业大数据的处理。
(2)流处理Storm
Storm是一个开源的分布式实时计算系统,可以简单、可靠的处理大量的数据流。Storm有很多使用场景:如实时分析,在线机器学习,持续计算,分布式RPC,ETL等等。Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个结点每秒可以处理数以百万计的消息)。Storm的部署和运维都很便捷,而且更为重要的是可以使用任意编程语言来开发应用。
(3)图处理Giraph
Giraph是什么?Giraph是Apache基金会开源项目之一,被定义为迭代式图处理系统。他架构在Hadoop之上,提供了图处理接口,专门处理大数据的图问题。
Giraph的存在很有必要,现在的大数据的图问题又很多,例如表达人与人之间的关系的有社交网络,搜索引擎需要经常计算网页与网页之间的关系,而map-reduce接口不太适合实现图算法。
Giraph主要用于分析用户或者内容之间的联系或重要性。
(4)并行计算MPI/OpenCL
OpenCL(全称Open Computing Language,开放运算语言)是第一个面向 异构系统 通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算 服务器 、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在 游戏 、 娱乐 、科研、医疗等各种领域都有广阔的发展前景。
(5)分析框架Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
(6)分析框架Pig
Apache Pig 是apache平台下的一个免费开源项目,Pig为大型数据集的处理提供了更高层次的抽象,很多时候数据的处理需要多个MapReduce过程才能实现,使得数据处理过程与该模式匹配可能很困难。有了Pig就能够使用更丰富的数据结构。[2]
Pig LatinPig Latin 是一个相对简单的语言,一条语句 就是一个 *** 作,与数据库的表类似,可以在关系数据库中找到它(其中,元组代表行,并且每个元组都由字段组成)。
Pig 拥有大量的数据类型,不仅支持包、元组和映射等高级概念,还支持简单的数据类型,如 int、long、float、double、chararray 和 bytearray。并且,还有一套完整的比较运算符,包括使用正则表达式的丰富匹配模式。
刘兰锋1,2 魏修成1 黄忠玉1
(1.中国石化石油勘探开发研究院油气地球物理中心,北京 100083;
2.中国石油大学(北京),北京 102249)
摘 要 针对目前地震资料处理系统应对海量数据处理的需求,本文提出了一种高效并行道集排序方法。基于地震数据按线和道多级关键字管理的自身特点,将数据分块,分发给多个节点同时进行初级关键字排序,利用数据库存储过程控制并发进程之间的同步和异步,由最后一个进程将按初级关键字排序后的道集信息进行合并,继而再次分块进行下一级关键字的并行排序,实现了海量地震数据分块多级并行排序,最后此方法应用于并行数据加载和抽道集多个批处理模块,在实际处理系统应用中取得了良好的效果。
关键词 存储过程 并行抽道集 进程间同步
Trace-sorting Using Interjob Parallel Framework
LIU Lanfeng1,2,WEI Xiucheng1,HUANG Zhongyu1
(1.Exploration and Production Research Institute,SINOPEC,Beijing 100083,
China;2.China University of Petroleum,Beijing 102249,China)
Abstract For the requirement of mass seismic data management in the current seismic processing system, this paper put forward an rapid gathering method using concurrent sorting.Because seismic data is organized by multilevel keys,such as lines and traces,it can be divided into several parts and then be parallel sorted by primary key on the many compute-notes.The last task merged all of the firstly sorted results at the control of the interprocess-synchronization through the stored procedure of database.The merged information can also be divided to perform parallel sorting by next-level key.Finally,the multilevel concurrent sorting is achieved rapidly by parting the massive seismic data.Based on this sorting method,we developed the parallel data-loading and gathering modules in our seismic processing system and achieved good results in the application of real seismic data.
Key words stored procedure;concurrent gathering;interprocess-synchronization
随着油气田勘探开发程度日益加深,勘探目标越来越隐蔽,采集精度要求越来越高,高分辨率地震勘探和四维地震勘探等技术也相继开展,地震数据野外的采集量成倍增长[1,2],因此,当今的地震资料处理系统必须具备海量(T级)数据管理的能力,不仅可以存取大的数据文件,而且要求访问速度快,能为复杂的偏移成像算法赢取宝贵的工作时间[3~6]。不同的处理算法要求输入不同域的地震数据,如共炮点(CSP)、共接收点(CRP)、共中心点(CMP)或共叠加点(CDP)道集等,因此要求地震处理平台必须具有高效的道集排序能力,在不同道集之间快速转换,或者将杂乱无序的道集数据快速整理成一个有序道集。众所周知,地震数据自身具有很好的分块和并行特征,一是野外采集数据本身就是按束、炮、线和道等方式组织的,二是中间处理的地震数据也是按线和道等关键字多级管理的,所以我们可以将地震数据分割成若干块,分发给多个计算节点[7,8],首先进行初级关键字排序,然后借助数据库存储过程高效和安全的特性控制并发进程之间的同步,由最后一个进程将按初级关键字排序后的道集信息进行合并,再次分块进行下一级关键字的并行排序,依次多级循环便可实现海量地震数据的分块多级并行排序,进而应用于并行数据加载和抽道集多个批处理模块,在实际处理系统应用中取得了良好的效果。
1 系统并行框架
当今地震资料处理系统的并行从并行方式和并行粒度的角度区分可以分为四大类,即模块内部算法并行、作业内模块间并行(即流水线并行)、作业内部数据并行和作业间数据并行[9~11]。模块内部算法并行是粒度最细的并行方式,对某些计算量巨大的模块(如叠前偏移模块)直接以并行算法实现,可以最大限度地利用计算节点的物理计算能力。但是并行算法复杂,需要巧妙地分割算法任务和输入数据,同时精确控制进程、线程间的同步才能获得最佳的并行加速比,且近些年来,随着GPU技术的日益成熟,MPI并行逐步被GPU运算所替代[12]。作业内模块并行则需要缓存大量数据,风险较高。
图1 作业内数据并行示意图
较为直接的并行便是作业并行,具体分两种:一是作业内部数据并行,如图1所示,数据I/O由系统集中控制,将作业中除去作业头尾的输入和输出模块以外的其他处理模块复制到多个处理节点上,当各个处理节点完成处理后,控制程序回收处理后的地震数据,再将它们输出到输出文件中,从而实现处理作业(除数据I/O外)的并行运行,但由于各处理节点性能的差异,回收地震数据的顺序和分发地震数据的顺序并不能总保持一致,增加了集中控制数据I/O的复杂性;二是将集中的数据I/O任务也分散到各个处理节点上去运行,即作业间数据并行,其示意图见图2。简言之,就是根据可使用的处理节点数目和原始地震数据的存储形式,将需要处理的原始地震数据切割成相应的若干部分分发给各个处理节点,每个处理节点都启动一个独立的子作业,处理自己的那一部分地震数据,最后当各个处理节点上的子作业都完成后,再将各个处理结果数据进行合并,从而实现处理作业的并行运行。
图2 作业间数据并行示意图
多分量资料处理系统(MCS2.0)采用作业间数据并行形式,将原始作业分割成多个计算任务来管理,一个进程执行一个计算任务,其执行流程如图3所示,主控首先从数据库下载作业内容,然后将作业分割成若干个计算任务,注册到数据库等待计算节点上的守护进程调度;守护进程根据计算节点本地资源状况和计算任务量定时从数据库中下载计算任务,启动计算进程执行本次任务。
图3 作业执行流程示意图
2 并行抽道集算法
基于作业间数据并行的地震数据道头排序算法,其基本思想就是将大的数据体道头信息进行分块多级排序,这里以抽成CDP道集(即以线号、CDP号和偏移距分别为第一、二、三关键字进行3级排序)为例,其算法流程如图4所示,具体可分成以下4步来完成:
图4 并行排序示意流程图
1)首先将数据体按道顺序号分成若干块,分发给多个进程,分别进行一级排序(即按第一排序关键字排序,如线号),本地一级排序完成后,将排序结果输出到临时文件。
2)待每个进程完成一级排序后,由最后一个进程收集其他进程的排序结果,进行全局一级排序;然后将全局排序结果按第一排序关键字分成若干块,分发给多个进程。
3)每个进程接到二级排序任务后分别进行本地二级排序(即按第二排序关键字排序,如CDP号),至此已完成道集级别的排序。
4)最后读取实际地震道转存数据,同时完成道集内排序(即第三排序关键字,如偏移距)。
3 实际数据应用
我们将并行道头排序算法应用于并行地震数据加载和并行抽道集等批处理模块,实现了海量(T级)地震数据的快速访问。如图5所示,我们对一个约为970G的地震数据,共计64855988道,分成8个计算任务进行3级(线号、CDP号和偏移距)排序,然后根据排序后的道索引位置读取数据转存加载到处理系统中,耗时共计2h35min,极大地缩短了数据I/O时间,提高了处理平台的效率。
图5 并行抽道集加载地震数据
4 结论
利用地震数据自身可分割的特点,将常规串行地震数据作业的运行方式分割成若干个计算任务,分发到多个计算节点,启动多个计算任务并行运行,结合数据库的存储过程,控制并发进程间的同步、异步以及进程运行次序的判断,实现了地震数据并行抽道集算法。实际地震数据测试表明,这种并行抽道集方法充分利用了集群多节点、多进程的并行能力,极大地缩短了抽道集的运行时间,提高了地震处理系统对海量数据管理能力和运行效率。
致谢 本研究工作得到了国家重大专项 “地球物理技术软件集成”(2011ZX05005 -005-06)的资助,表示衷心的感谢。
参考文献
[1]张剑,刘梦花,等.地震勘探中超万道SPS文件整理方法.石油地球物理勘探,2010,45(增刊1):53~57.
[2]张军华,仝兆岐.地震资料处理中的并行计算机技术(综述).物探化探计算技术,2002,24(1):31~36.
[3]金君,何万青,乔楠,等.iCluster软件叠前时间偏移模块的优化方法.勘探地球物理进展,2008,31(6):433~437.
[4]黄中玉,曲寿利,等.层状各向异性介质转换波克希霍夫叠前时间偏移.地球物理学报,2009,52(12):3109~3115.
[5]方伍宝,孙建国,赵改善,等.波动方程叠前深度偏移成像软件系统的研制及应用.石油物探,2005,44(5):486~491.
[6]赵改善.地球物理软件技术发展趋势与战略研究.勘探地球物理进展,2010,33(2):77 ~86.
[7]祝树云,朱旭光,等.应用并行计算框架提升地震数据处理效率分析.石油地球物理勘探,2011,46(3):493~499.
[8]赵长海,晏海华,王宏琳,等.面向地震数据处理的并行与分布式编程框架.石油地球物理勘探,2010,45(1):145~155.
[9]杨红霞,赵改善.21世纪的地震数据处理系统.石油物探,2001,40(4):125~140.
[10]王宏琳.地球物理软件体系结构研究.石油地球物理勘探,2008,43(5):606~611.
[11]王宏琳.计算机集群地震交互成像软件技术——概念、系统结构、设计模式及Internet交互处理.勘探地球物理进展,2002,25(4):1~8.
[12]赵改善.地球物理高性能计算的新选择:GPU计算技术.勘探地球物理进展,2007,30(5):399~404.
[13]李军.高性能MySQL(第二版).北京:电子工业出版社,2010.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)