CN105868110B - 一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法 - Google Patents
一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法 Download PDFInfo
- Publication number
- CN105868110B CN105868110B CN201610186177.4A CN201610186177A CN105868110B CN 105868110 B CN105868110 B CN 105868110B CN 201610186177 A CN201610186177 A CN 201610186177A CN 105868110 B CN105868110 B CN 105868110B
- Authority
- CN
- China
- Prior art keywords
- data
- result
- program
- input
- treatment program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法,其核心思想是通过运行在分布式处理程序中的代理,监控处理的数据溯源信息即数据的输入与输出,并把这些信息发送给协调者,当程序出现错误、异常或者不一致的时候,开发人员或者用户可以利用这些溯源信息进行程序的调试,实现程序错误的分析与定位。
Description
技术领域
本发明涉及一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法,尤其是对基于内存数据网格的流式数据程序调试、错误、异常进行定位从而为软件开发人员进行程序调试和分布式程序运行的错误分析提供定位方法。属于软件技术领域。
背景技术
互联网、云计算、物联网等技术的飞速发展使得数据的产生速度越来越快、数据类型越来越多,促使全球数据量急剧增加,推动人类社会迈入大数据时代。诸如社交网站Facebook每天要处理25亿条以上的数据,500+TB的新数据(参见文献:http://www.shuju.net/article/MDAwMDE2O2TEy.html)。早在2008年1月的统计结果显示,Google每天处理的数据是20000TB,而1TB的数据相当于2008年5月美国国会图书馆存储的web数据的12倍(http://www.cnbeta.com/articles/70534.htm)。全球每分钟都产生204000000封电子邮件(http://www.chinamedia360.com/newspage/102311/75A79E9C545E05E0.html)。在2012年,Twitter每天产生约2亿条新数据(http://it.sohu.com/20110701/n312169441.shtml)。由于这些数据量的“大”,数据类型的”多“,产生速度“快”等特性,由称为”大数据”的概念描述。而这些特性使利用传统单机来处理这些数据变得不可能,所以新的计算和处理模式应运而生,以应对大数据带来的挑战和机遇。而大数据计算主要有批量计算和流式计算两种形态,目前在以apache社区的Hadoop为代表的批处理系统的发展相对成功,但是这些系统注重吞吐量,任务串行化,响应时间没有保证,不能应对实时流式数据的应用场景。但是随着物联网技术和智能设备的飞速发展,尤其是以智能交通和智慧社区为代表的物联网应用每天产生数以亿计的实时流式数据,所产生的数据量之密集、实时性之强是前所未有的,在Michael Stonebraker等人(Michael Stonebraker,UgarCetintemel,Stan Zdonik.The 8Requirements of Real-Time StreamProcessing.SIGMOD,December 2005,Pages 42-47)指出流式数据需要进行实时、高效的计算.但批处理系统无法满足实时响应的要求。而以Oracle Coherence(https://coherence.java.net/)与hazelcast(http://hazelcast.org/)等为代表的内存数据网格把数据加载到内存,实现一定时间内的数据常驻内存,可以满足系统实时性的要求,同时通过远程备份实现高可用。
鉴于分布式处理系统的特点,如图1所示,开发人员编写处理数据的逻辑,通过集群连接(对等式架构)或者集群Master节点(主从式架构)将开发人员需要完成的任务发送给集群,集群将会按照内部的分片算法或者任务调度管理工具,把任务分解为不同的子任务,并发送到不同的工作节点(Worker Node),在工作节点上完成具体的操作,当所有的子任务顺利完成以后,再通过集群连接或者集群Master节点把结果返回给开发人员。而当程序发生错误、异常或者结果与用户预期不一致时,由于任务分解和Worker Node完成任务的过程对开发人员是透明的,开发人员无法感知程序执行的中间状态,同时分布式程序执行的不可预测性和难再现性、再加上在运行过程中应用程序不会对大量的中间状态进行保存给程序的调试和错误、异常定位带来了巨大困难。但是当程序发生错误、异常或者结果与开发人员预期不一致时,开发人员必须定位导致这些错误、异常和不一致的原因,以保证程序可以满足应用的需要,另一方面,调试与定位分布式数据应用中的错误和状态有诸多挑战和困难,传统的做法主要有一些几种方式,第一种是不断的由开发人员随机选取数据集的子集,然后在数据子集上重新执行处理程序,并不断重复上述过程来确定导致错误的原因;第二种做法是开发人员选取一部分程序逻辑,模拟执行过程来确定导致程序错误的原因;第三是依靠开发人员在开发中输出日志信息或者保存日志信息,当错误或者异常发生时通过分析日志信息定位错误。上述做法除了存在效率低、费时、过度依赖开发人员、存储日志文件的大量开销、难以定位错误的问题外,针对特定的应用场景,上述方法甚至无法完成错误的定位和分析,例如在处理流式数据时,数据的流动性和易失性使得随机选取数据子集重新执行处理程序和在部分处理逻辑上模拟执行变得不可能,但是在实际应用中,对分布式应用程序进行调试和程序上线以后出现错误是不可避免的,因此现有的错误定位方法需要花费大量的时间和精力去定位程序中出现的错误,同时由于有的错误和议程与特定场景相关,加上流式数据的流动性和易失性,使错误和异常的重现和定位变得不可能。
发明内容
本发明的目的在于针对现有技术的不足,提出基于对内存数据网格的流式数据程序调试、错误、异常的Data Lineage(数据溯源)分析与定位,从而为软件开发人员进行程序调试和分布式程序运行的错误、异常分析提供定位方法。
一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法,实现步骤如下:
(1)在分布式处理程序中设置捕获器(Capture),其作用是在捕获进入到分布式处理程序中的输入数据和经过分布式处理程序处理之后的结果;
(2)分布式处理程序加载数据源中的数据时,通过设置的捕获器,获取每次操作之前的数据的值,给每一个数据值设置一个全局唯一标记来标记这个数据值,并把这个标记发送给协调者节点;
(3)将(2)中得到的全局唯一标记和输入数据通过分布式处理程序运行时上下文环境传入实际对数据进行操作的处理逻辑,执行相应的处理过程;
(4)处理逻辑执行完成以后,产生相应的结果;捕获器截获执行的结果,对执行结果设置一个全局唯一的标记,对数据进行更新操作时,对更新之后的值进行标记,通过标记之间的一对一的关系就建立了原数据和更新之后的数据之间的关联关系,并把这个标记发送给协调者节点,协调者根据输入数据和输入标记的对应关系与执行结果和结果标记的对应关系,建立输入数据标记和结果标记的之间的对应关系,通过标记值之间的关联建立输入数据与执行结果之间的关联;
(5)执行结果再作为输入数据继续后续的处理过程或者最终结果返回给开发人员;
(6)开发人员或进行调试和分析,在Java类Trace中,定义不同的调试方法,其中traceBack方法向前追溯Lineage信息,确定得到当前数值的操作和输入数据,traceBackAll一直往前追溯Lineage信息,确定得到当前数值的所有操作和最初的原始数据.,traceForward方法向后传播lineage信息,确定得到当前数值在之后一步操作中产生的结果,traceForwardAll方法一直向后传播Lineage信息,确定得到当前数值在之后的一系列操作中产生的最终的结果,sendContext方法向分布式处理程序传送运行时上下文环境信息;
(7)当分布式处理程序出现异常或者错误的时,开发人员通过(4)中捕获的数据溯源信息,利用(6)中提供的方法进行调试、错误的分析与定位,分布式处理系统向用户返回或者输入一定的结果,如果该结果与开发人员预期不一致,开发人员使用traceBack方法查看输出结果的输入数据和对应的处理逻辑,分析和判断可能的错误。
本发明与现有技术相比的优点在于:
(1)本发明记录了分布式处理程序输入数据和输出数据之间的关系,保留了数据执行过程中的数据,与传统的记录日志的方法相比,记录的数据更少,记录的数据更有针对性,开发人员可以利用这些数据可以非常少的时间和精力,较方便的定位和分析程序中的错误。
(2)本发明记录了分布式处理程序输入数据和输出数据之间的关系,同时保留了分布式程序执行过程中中间状态和数据,并把相应的状态信息和数据信息的对应关系发送给协调者节点,由协调者节点处理,存储这些信息,和传统的方法相比,本发明可以几乎完全的还原程序执行的过程和对应的输入数据、输出数据及其之间的对应关系,发现和定位程序中的错误和缺陷。
(3)本发明数据和数据溯源信息分离,方便内存数据网格集群和协调者集群的扩展性,二者之间没有耦合度,可以很方便的对其中的任何部分进行扩展,确保系统的扩展性。
附图说明
图1是分布式数据处理系统基本组成结构图,分布式处理程序运行在分布式数据处理系统上;
图2是添加捕获器与协调者之后的分布式数据处理系统的基本组成结构;
图3是调试类的详细描述图;
图4是本发明方法的实施流程图;
图5是捕获数据溯源信息过程图;
图6是根据数据溯源信息进行错误分析和定位流程图。
具体实施方式
以下结合具体实施例和附图对本发明作更详细的说明。
本发明提出一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法,其核心思想是通过运行在分布式处理程序中的代理,监控处理的数据溯源信息即数据的输入与输出,并把这些信息发送给协调者,当程序出现错误、异常或者不一致的时候,开发人员或者用户可以利用这些溯源信息进行程序的调试,实现程序错误的分析与定位。分布式处理程序运行在分布式数据处理系统上,分布式处理程序指的是利用MapReduce框架编写的处理程序,其特征就是运行在分布式数据处理系统上,本发明中做的是针对流失数据处理的情形。当前在大数据背景下,流式数据的处理都是在分布式环境下、即分布式系统中执行,而分布式处理程序运行在分布式数据处理系统中,这样的系统可以是spark,hadoop等典型的MapReduce处理框架。
如1所示,分布式数据处理系统包括集群主节点、集群工作节点、分布式数据处理程序以及与数据处理系统相关的数据源,其中集群中的工作节点构成计算集群,分布式集群连接(分布式集群主节点)作为开发人员编写的分布式处理程序和计算机群的连接,同时也作为计算集群的管理节点,负责对计算集群的执行过程进行管理,并把执行的结果返回给开发人员,数据源作为分布式程序数据的输入。系统工作流程是:开发人员编写分布式处理程序,之后通过分布式集群连接(主节点)把程序逻辑发送给主节点,主节点根据程序的执行过程,把执行过程分成不同的执行任务,同时根据系统的状态把任务分配给不同的工作节点,工作节点从数据源加载数据。工作节点具体执行程序,当执行结束以后把执行的结果返回给集群连接(主节点),在通过集群连接(主节点)返回给开发人员。
如图2所示,开发人员在编写处理程序时,在程序中嵌入捕获器的处理逻辑,之后将处理程序连同捕获器一起发送给集群连接。分布式处理程序运行在分布式数据处理系统上,分布式处理程序指的是利用MapReduce等框架编写的处理程序,其特征就是运行在分布式数据处理系统上,本发明中做的是针对流失数据处理的情形。
捕获器数据溯源信息获取的过程如图5,集群连接(主节点)把程序的执行任务和捕获器发送给工作节点,在工作节点上完成数据的处理和溯源信息的捕获。具体的,当输入的数据进入工作节点时时,代理首先获取输入的数据,给每一个数据添加一个唯一的标记,并把这个映射关系发送给协调者节点,之后代理把数据发给数据处理逻辑,即是数据处理逻辑进行相应的处理过程,得到相应的结果,代理获得处理的结果,对处理的结果添加唯一的标记,并把这个映射关系发送给协调者节点。协调者节点根据标记之间的对应关系存储映射关系。之后把执行结果输出。
如图3所示,定义了开发人员进行调试和分析的功能类:在类Trace中,定义不同的调试方法,其中traceBack方法向前追溯数据溯源信息,确定得到当前数值的操作和输入数据,traceBackAll一直往前追溯数据溯源信息,确定得到当前数值的所有操作和最初的原始数据.,traceForward方法向后传播数据溯源信息,确定得到当前数值在之后一步操作中产生的结果,traceForwardAll方法一直向后传播数据溯源信息,确定得到当前数值在之后的一系列操作中产生的最终的结果,sendContext方法向分布式处理程序传送运行时上下文环境信息。
如图4所示:具体实施例如下:
(1)在分布式处理程序中设置捕获器。本发明实施例除了分布式处理程序外,还包括内嵌到应用程序的溯源信息捕获代理(Agent)与溯源信息管理节点(协调者),其中由代理充当捕获器作用。溯源信息的捕获通过代理获取。
(2)数据溯源信息获取的过程如图5,集群连接(主节点)把程序的执行任务和捕获器发送给工作节点,在工作节点上完成数据的处理和溯源信息的捕获。当输入的数据进入工作节点时时,捕获器首先获取输入的数据,给每一个数据添加一个唯一的标记,并把这个映射关系发送给协调者节点,之后代理把数据发给数据处理逻辑,即是数据处理逻辑进行相应的处理过程,得到相应的结果,代捕获器获得处理的结果,对处理的结果添加唯一的标记,并把这个映射关系发送给协调者节点。协调者节点根据标记之间的对应关系存储映射关系。之后把执行结果输出。其中针对不同的处理逻辑,设置不同的代理,在本实例中,以常见的操作(但不限于如下操作)为例进行说明。如表所示:
溯源信息的存储,在本实例中,采用表格进行存储,其中每一行对应对于输入和输出,由协调者节点的扩展和容错机制保证可用性与扩展性。首先存储在协调者集群的内存中,当协调者节点的内存无法存储时,可以通过协调者的持久化方法把溯源信息持久化到磁盘中,例如分布式文件系统中。
(3)获取溯源之后,开发人员可以利用溯源信息对程序进行调试,分析和错误的定位。具体的是通过在协调者节点中不断的进行表的连接操作,确定相应的输入、输出以及对应的操作。在某个执行结果,溯源信息和利用溯源信息进行程序调试和错误分析流程图如图6所示:
欲分析的结果是“错误”的行,通过查看最后一个表的输出是“错误”的行,获取它的输入数据是“1”,通过表的连接操作(利用traceBack方法),得到前面的输入数据是“6”和“3”,再根据“6”和“3”,通过表的连接操作(利用traceBack方法),得到他们的输入数据是“B”、“E”和“C”,通过表的连接操作(利用traceBack方法),得到他们的输入数据是“237”、“260”和“255”,按照这样的方式一直向前,在往前追溯的过程中,可以检查对应的操作的处理逻辑。另外,向后追溯,可以查看当前输出在之后的操作中产生了哪些结果。查找输入数据是“A“产生的结果,可以得到“4”,进而得到“0”,最后得到“正确”的ROOT。
尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,在其他平台上也可以实现相应的方法与工具。因此,本发明不应局限于实施例和附图所公开的内容。
Claims (1)
1.一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法,其特征在于实现步骤如下:
(1)在分布式处理程序中设置捕获器Capture,其作用是在捕获进入到分布式处理程序中的输入数据和经过分布式处理程序处理之后的结果;
(2)分布式处理程序加载数据源中的数据时,通过设置的捕获器,获取每次操作之前的数据的值,给每一个数据值设置一个全局唯一标记来标记这个数据值,并把这个标记发送给协调者节点;
(3)将(2)中得到的全局唯一标记和输入数据通过分布式处理程序运行时上下文环境传入实际对数据进行操作的处理逻辑,执行相应的处理过程;
(4)处理逻辑执行完成以后,产生相应的结果;捕获器截获执行的结果,对执行结果设置一个全局唯一的标记,对数据进行更新操作时,对更新之后的值进行标记,通过标记之间的一对一的关系就建立了原数据和更新之后的数据之间的关联关系,并把这个标记发送给协调者节点,协调者根据输入数据和输入标记的对应关系与执行结果和结果标记的对应关系,建立输入数据标记和结果标记的之间的对应关系,通过标记值之间的关联建立输入数据与执行结果之间的关联;
(5)执行结果再作为输入数据继续后续的处理过程或者最终结果返回给开发人员或用户;
(6)开发人员或者用户进行调试和分析,在Java类Trace中,定义不同的调试方法,其中traceBack方法向前追溯Lineage信息,确定得到当前数值的操作和输入数据,traceBackAll一直往前追溯Lineage信息,确定得到当前数值的所有操作和最初的原始数据.,traceForward方法向后传播lineage信息,确定得到当前数值在之后一步操作中产生的结果,traceForwardAll方法一直向后传播Lineage信息,确定得到当前数值在之后的一系列操作中产生的最终的结果,sendContext方法向分布式处理程序传送运行时上下文环境信息;
(7)当分布式处理程序出现异常或者错误时,开发人员通过(4)中捕获的数据溯源信息,利用(6)中提供的方法进行调试、错误的分析与定位,分布式处理系统向用户返回或者输入一定的结果,如果该结果与用户预期不一致,用户使用traceBack方法查看输出结果的输入数据和对应的处理逻辑,分析和判断可能的错误。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610186177.4A CN105868110B (zh) | 2016-03-29 | 2016-03-29 | 一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610186177.4A CN105868110B (zh) | 2016-03-29 | 2016-03-29 | 一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105868110A CN105868110A (zh) | 2016-08-17 |
CN105868110B true CN105868110B (zh) | 2018-06-22 |
Family
ID=56626293
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610186177.4A Active CN105868110B (zh) | 2016-03-29 | 2016-03-29 | 一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105868110B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10338986B2 (en) | 2016-10-28 | 2019-07-02 | Microsoft Technology Licensing, Llc | Systems and methods for correlating errors to processing steps and data records to facilitate understanding of errors |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1971536A (zh) * | 2005-11-24 | 2007-05-30 | 鸿富锦精密工业(深圳)有限公司 | 基本输入输出系统的纠错系统及方法 |
-
2016
- 2016-03-29 CN CN201610186177.4A patent/CN105868110B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1971536A (zh) * | 2005-11-24 | 2007-05-30 | 鸿富锦精密工业(深圳)有限公司 | 基本输入输出系统的纠错系统及方法 |
Non-Patent Citations (2)
Title |
---|
Improving Test Suites for Efficient Fault Localization;Benoit Baudry 等;《28th International Conference on Software Engineering(ICSE 06)(2006)》;20060528;第1-10页 * |
基于动态内存池和WinpCap的高速数据捕获技术;甘彪 等;《信息技术》;20121231(第1期);第70-74页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105868110A (zh) | 2016-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110928772B (zh) | 一种测试方法及装置 | |
Engel et al. | Evaluation of microservice architectures: A metric and tool-based approach | |
Shepperd et al. | Researcher bias: The use of machine learning in software defect prediction | |
CN111611458B (zh) | 大数据治理中基于元数据和数据分析技术实现系统数据架构梳理的方法 | |
CN106897322A (zh) | 一种数据库和文件系统的访问方法和装置 | |
CN109739855B (zh) | 实现数据表拼接及自动训练机器学习模型的方法和系统 | |
CN104391796B (zh) | 一种测试用例解析方法 | |
US10002142B2 (en) | Method and apparatus for generating schema of non-relational database | |
JP7076208B2 (ja) | アプリケーション・テスト | |
JP2016100006A (ja) | パフォーマンス試験のためのベンチマーク・アプリケーションを生成する方法および装置 | |
CN107025167A (zh) | 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 | |
CN104636401B (zh) | 一种scada系统数据回滚的方法及装置 | |
CN116662441A (zh) | 一种分布式数据血缘构建及展现方法 | |
Zvara et al. | Optimizing distributed data stream processing by tracing | |
Schreiber et al. | {GitLab2PROV—Provenance} of Software Projects hosted on {GitLab} | |
CN105868110B (zh) | 一种基于内存数据网格的流式数据处理程序错误的数据溯源定位方法 | |
CN107480056A (zh) | 一种软件测试方法和装置 | |
TW201327199A (zh) | 雲端線上即時多維度分析系統與方法 | |
CN117472988A (zh) | 一种流程实例的日志查看方法、装置、设备及可读介质 | |
CN114981783A (zh) | 将主题可重放执行跟踪与比较可重放执行跟踪进行区分 | |
Suleykin et al. | Implementing big data processing workflows using open source technologies | |
CN115169578A (zh) | 一种基于元宇宙数据标记的ai模型生产方法及系统 | |
Rover et al. | Software tools for complex distributed systems: Toward integrated tool environments | |
WO2020151054A1 (zh) | 一种数据同步方法及装置 | |
Di Lucca et al. | Supporting Web application evolution by dynamic analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |