CN104915352B - 一种验证MapReduce环境下处理数据正确性的方法和装置 - Google Patents
一种验证MapReduce环境下处理数据正确性的方法和装置 Download PDFInfo
- Publication number
- CN104915352B CN104915352B CN201410090641.0A CN201410090641A CN104915352B CN 104915352 B CN104915352 B CN 104915352B CN 201410090641 A CN201410090641 A CN 201410090641A CN 104915352 B CN104915352 B CN 104915352B
- Authority
- CN
- China
- Prior art keywords
- data
- triple
- unit
- code
- processing
- 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
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000012795 verification Methods 0.000 title claims abstract description 10
- 238000012545 processing Methods 0.000 claims abstract description 98
- 238000012544 monitoring process Methods 0.000 claims abstract description 64
- 230000008569 process Effects 0.000 claims abstract description 18
- 238000012986 modification Methods 0.000 claims description 6
- 230000004048 modification Effects 0.000 claims description 6
- 238000013480 data collection Methods 0.000 claims description 2
- 230000006870 function Effects 0.000 description 15
- 238000012360 testing method Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 230000006872 improvement Effects 0.000 description 8
- 230000002776 aggregation Effects 0.000 description 7
- 238000004220 aggregation Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 5
- 239000003607 modifier Substances 0.000 description 5
- 230000008859 change Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Landscapes
- Instructional Devices (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种验证MapReduce环境下处理数据正确性的方法,包括:为MapReduce源代码加入劫持代码,生成带有劫持代码的数据处理程序;运行带有劫持代码的数据处理程序对输入数据进行数据处理,得到输出数据,组成三元组数据;去除覆盖信息相同的三元组数据,形成监控三元组集合;需要验证处理数据正确性时,将监控三元组集合中的输入数据返回至带有劫持代码的数据处理程序重新进行数据处理,得到输出数据,形成输出数据集合;验证输出数据集合中每一条数据是否正确。本申请提供的验证MapReduce环境下处理数据正确性的方法可以减少验证处理数据正确性的人工成本和实现时间。本申请还提出了一种验证MapReduce环境下处理数据正确性的装置实施例,可实现本申请的方法实施例。
Description
技术领域
本发明涉及计算机计算领域,尤其涉及一种验证MapReduce环境下处理数据正确性的方法和装置。
背景技术
随着计算机技术的发展,计算机需要处理的数据的数据量也越来越大,单台计算机已经不能处理一些大规模的数据,为此需要将多台计算机联合起来,构成计算机群,并行处理大规模的数据。云计算就是通过采用精心设计的系统架构对设备进行组织管理,能够提供十分强大的计算能力。MapReduce是一种编程模型,通常用于将大规模数据集并行且分布式地运行于大型的集群中,所述的大规模数据集,一般是指大于1TB(万亿字节)的数据集。
MapReduce对数据集进行并行处理的过程具体可以包括:根据Map(映射)任务的数量,将数据集分解为多个数据块;分别对每个数据块中的每个原始键值对数据执行Map处理,得到每个原始键值对数据对应的中间结果键值对数据集;在得到所有原始键值对数据对应的中间结果键值对数据集后,再对所有具有相同键的中间结果键值对数据进行相应的Reduce(规约)处理,得到相应的最终结果键值对数据。一般开发人员需要做的就是实现自己的Map和Reduce函数逻辑,然后提交给MapReduce运行环境。由上述MapReduce的工作原理可以看出,每个子任务的执行结果都可以影响最终的计算结果。在实际的应用过程中,在MapReduce的函数逻辑不变的情况下,MapReduce运行环境并不是一直不变化的,例如会修改MapReduce运行环境中的某个或多个计算机的系统参数、修改运行的MapReduce代码中不会影响运行结果的参数等,这些微小的变化可能会导致某个或多个子任务的执行结果发生错误而影响最终的计算结果,例如,修改了某台计算机中的运算的精度可能会导致在该计算机上运行的子任务的输出结果发生改变,或者修改了MapReduce程序中不会影响运算结果的一些参数;这些可能会使某个或多个子任务的执行结果发生错误,进而导致最终的运算结果发生错误。所以,为了保证当前MapReduce运行环境下数据处理得到的结果是正确的,经常需要在进行实际的数据处理前,验证当前MapReduce运行环境下处理数据的正确性。
验证MapReduce环境下处理数据正确性的方法可以有两种:
一种称为编写测试用例法。所述编写测试用例法具体包括:测试人员编写用于测试的例子,在MapReduce环境下的运算结果应当发生变化时,所述测试的例子可以输出相应的错误的结果。这样在MapReduce环境发生变化后对编写的测试用例进行数据处理,将得到的数据处理的结果与MapReduce环境发生变化前的数据处理结果进行对比,如果。
另一种称为真实数据法。所述真实数据法具体包括:使用真实的数据,在MapReduce环境发生变化后对实的数据进行数据处理,将得到的数据处理的结果与MapReduce环境发生变化前的数据处理结果进行对比,分析数据处理结果的正确性。
在实现本申请过程中,发明人发现现有技术中至少存在如下问题:
采用编写测试用例法验证MapReduce环境下处理数据正确性时,需要人工编写测试用例,为了保证编写的测试用例能在任何MapReduce环境下的运算结果应当发生变化时能反应出数据处理的错误,需要保证编写的测试用例尽量的全面,这样就需要投入很大的人工成本;同时,由于MapReduce的运行环境复杂,运算过程中可能发生的错误不能被完全预测到,那么,人工编写测试用例通常不能保证能反映出所有数据处理的错误,因此测试用例的处理数据可能不可靠。采用真实数据法验证MapReduce环境下处理数据正确性时,所述真实数据通常数据量巨大,一般真实数据可达几百GB(千兆字节)到几个TB(万亿字节)之间,因此,不管是对所述真实数据进行数据处理,还是对数据处理的结果进行比较,都需要花费几个小时甚至一两天的时间。
发明内容
本申请的目的在于提供一种验证MapReduce环境下处理数据正确性的方法,以减少实现验证MapReduce环境下处理数据正确性的人工成本和实现时间。
一种验证MapReduce环境下处理数据正确性的方法,包括:
为MapReduce源代码加入劫持代码,生成带有劫持代码的数据处理程序;
运行所述带有劫持代码的数据处理程序对输入数据进行数据处理,所述带有劫持代码的数据处理程序劫持得到输入数据、输出数据,所述数据处理程序记录数据处理过程中代码是否被执行的覆盖信息;设定覆盖信息和对应的输入数据、输出数据为三元组数据;
去除覆盖信息相同的三元组数据,形成监控三元组集合;
在验证处理数据正确性时,将所述监控三元组集合中的输入数据返回至带有劫持代码的数据处理程序重新进行数据处理,所述带有劫持代码的数据处理程序劫持得到输出数据,形成输出数据集合;
通过监控三元组集合中的输出数据验证所述输出数据集合中的数据是否正确。
优选方案中,所述劫持代码包括:输入劫持代码和输出劫持代码。
优选方案中,所述去除覆盖信息相同的三元组数据,形成监控三元组集合,具体包括:设置三元组集合,所述三元组集合的初始状态为空集;将新生成的三元组数据的覆盖信息与三元组集合中的三元组数据的覆盖信息进行比对,将覆盖信息不完全相同的三元组数据存放至所述三元组集合中,将输入数据处理完毕后所述的三元组数据集合作为监控三元组集合。
优选方案中,通过监控三元组集合中的输出数据验证所述输出数据集合中的数据是否正确,具体包括:
将输出数据集合中的每一条输出数据与监控三元组集合中对应的输出数据进行比对,且:
对于同一输入数据的两个集合中对应的输出数据相同的,验证输出数据集合中该条记录的处理数据为正确;
对于同一输入数据的两个集合中对应的输出数据不相同的,验证输出数据集合中该条记录的处理数据为错误。
优选方案中,所述设定覆盖信息和对应的输入数据、输出数据为三元组数据,包括:将标识相同的输入数据与输出数据及对应的覆盖信息为三元组数据。
优选方案中,所述覆盖信息,包括:语句执行覆盖信息和跳转执行覆盖信息。
一种验证MapReduce环境下处理数据正确性的装置,包括:处理程序准备单元、三元组生成单元、监控三元组集合单元、输出数据集合单元、验证单元;其中,
所述处理程序准备单元,用于为MapReduce源代码加入劫持代码,并生成带有劫持代码的数据处理程序;
所述三元组生成单元,用于运行所述处理程序准备单元中的数据处理程序对输入数据进行数据处理,并记录输入数据、输出数据和覆盖信息,设定覆盖信息和对应的输入数据、输出数据为三元组数据;
所述监控三元组集合单元,用于读取所述三元组生成单元生成的三元组数据,去除覆盖信息相同的三元组数据,形成监控三元组集合;
所述输出数据集合单元,用于在验证处理数据正确性时,将所述监控三元组集合中的输入数据返回至三元组生成单元进行数据处理,并将此时的输出数据存放至输出数据集合中;
所述验证单元,用于根据监控三元组集合中的输出数据,验证输出数据集合中的输出数据是否正确。
优选方案中,所述处理程序准备单元,包括:代码修改单元、程序生成单元;其中,
所述代码修改单元,用于为MapReduce源代码加入记录输入数据、输出数据及数据标识的劫持代码;
所述程序生成单元,用于将代码修改单元输出的加入了劫持代码的MapReduce代码进行编译,生成带有劫持代码的数据处理程序。
优选方案中,所述三元组生成单元,包括:数据输入单元、程序处理单元、三元组组成单元;其中,
所述数据输入单元,用于读入需要进行数据处理的输入数据;
所述程序处理单元,用于对数据输入单元中读入的数据利用带有劫持代码的数据梳理程序进行处理,得到输出数据,并记录输入数据、输出数据和覆盖信息;
所述三元组组成单元,用于设定对应的输入数据、输出数据和覆盖信息为三元组数据。
优选方案中,所述监控三元组集合单元,包括:数据读取单元、信息对比单元、三元组存放单元;其中,
所述数据读取单元,用于读入三元组生成单元生成的新的三元组数据;
所述信息对比单元,用于将数据读取单元中三元组数据的覆盖信息与三元组存放单元中每一个三元组数据的覆盖信息进行对比;
所述三元组存放单元,用于将信息对比单元中对比结果是读入的三元组数据中覆盖信息与已有的三元组集合中每一个三元组数据的覆盖信息都不完全相同的三元组数据存放至三元组集合中,形成监控三元组集合。
优选方案中,所述输出数据集合单元,包括:输入数据返回单元、集合形成单元;其中,
所述输入数据返回单元,用于将监控三元组集合中的每一组输入数据返回至三元组生成单元重新进行数据处理,得到新的输出数据;
所述集合形成单元,用于将新的输出数据组成输出数据集合。
本申请提出的验证MapReduce环境下处理数据正确性的方法,利用真实数据进行处理,可以避免投入大量的人工成本;同时,利用真实数据可以保证数据的可靠性;本申请通过在MapReduce源代码中加入可以记录输入输出数据的劫持代码,生成带有劫持代码的数据处理程序,可以输出包括输入数据、输出数据和覆盖信息的三元组数据,同时,通过去除覆盖信息相同的三元组数据,得到监控三元组集合,使得作为验证数据正确性的参照数据的数据量大大减少。在需要验证MapReduce环境下处理数据正确性的时候,只需要将监控三元组集合中的输入信息重新返回至带有劫持代码的数据处理程序进行处理,得到新的输出数据,形成输出数据集合,此时需要处理的数据量也大大减少了,缩短了数据处理的时间。通过验证输出数据集合中的输出信息与监控三元组集合中对应的输出信息是否相同即可验证处理数据的正确性。
本申请提出的验证MapReduce环境下处理数据正确性的装置实施例与本申请提出的验证MapReduce环境下处理数据正确性的方法实施例相对应,可以实现本申请的方法实施例,达到减少实现验证MapReduce环境下处理数据正确性的人工成本和实现时间的效果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请验证MapReduce环境下处理数据正确性的方法实施例的流程图;
图2是本申请验证MapReduce环境下处理数据正确性的装置实施例的组成结构图;
图3是本申请装置实施例中处理程序准备单元的组成结构图;
图4是本申请装置实施例中三元组生成单元的组成结构图;
图5是本申请装置实施例中监控三元组集合单元的组成结构图;
图6是本申请装置实施例中输出数据集合单元的组成结构图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
在实际实现MapReduce的过程中,一般开发人员只需要实现自己的Map和Reduce函数逻辑,然后提交给MapReduce运行环境即可。所述MapReduce的函数逻辑可以理解为对于每一个实际要解决的问题所进行的具体的数据处理。通常Map阶段的数据处理可以称为Map类,同理,Reduce阶段的数据处理可以称为Reduce类。
例如,如表1的数据表所示,第一列表示人物编号,第二列表示人物姓名,第三列表示人物年龄。
表1数据表
人物编号 | 人物性别 | 人物年龄 |
1 | 男 | 26 |
2 | 男 | 24 |
3 | 男 | 12 |
4 | 女 | 16 |
5 | 女 | 29 |
6 | 女 | 23 |
对于表1中的数据,要实现的MapReduce的函数逻辑为:若人物性别为男,当人物年龄大于等于25,系数因子取0.8,否则系数因子取1;若人物性别为女,当人物年龄小于等于20,则系数因子取0.6,否则系数因子取1;最后统计系数因子为0.8的人数、系数因子为0.6和系数因子为1的人数。那么,在该例子中,Map类可以是:若人物性别为男,且人物年龄大于等于25,系数因子取0.8;若人物性别为女,且人物年龄小于等于20,则系数因子取0.6;Reduce类可以是:统计系数因子为0.8的人数、系数因子为0.6和系数因子为1的人数。
图1是本申请验证MapReduce环境下处理数据正确性的方法实施例的流程图。如图1所示,本申请验证MapReduce环境下处理数据正确性的方法,包括:
S101:为MapReduce源代码加入劫持代码,生成带有劫持代码的数据处理程序。
为MapReduce源代码加入劫持代码,所述加入劫持代码可以通过代码修改器来完成。对代码修改器进行设置后,向代码修改器中输入MapReduce源代码,代码修改器对源代码进行修改并输出,代码修改器输出的代码即为加入了劫持代码的MapReduce代码。所述劫持代码包括:输入劫持代码和输出劫持代码。所述输入劫持代码,用于在每次Map类或Reduce类被调用时,抢先记录下输入数据及所述输入数据的标识;所述输出劫持代码,用于在每次Map类或Reduce类被调用结束前抢先记录输出数据及所述输出数据的标识。
计算机对上述加入了劫持代码的MapReduce代码进行编译,生成带有劫持代码的MapReduce数据处理程序。
S102:运行所述带有劫持代码的数据处理程序对输入数据进行数据处理,所述带有劫持代码生成的数据处理程序劫持得到输入数据、输出数据,所述数据处理程序记录数据处理过程中代码是否被执行的覆盖信息;设定覆盖信息和对应的输入数据、输出数据为三元组数据。
运行所述带有劫持代码的MapReduce数据处理程序对真实数据进行处理,在此过程中,劫持代码记录输入/输出数据及其标识,MapReduce数据处理程序记录每组输入数据、输出数据的对应的程序运行的覆盖信息。所述覆盖信息,可以表示每一组输入数据经数据处理程序处理得到输出数据的过程中,所述数据处理程序代码是否得到执行;所述覆盖信息由所述MapReduce数据处理程序记录;所述覆盖信息可以包括:语句执行覆盖和跳转执行覆盖。所述语句执行覆盖可以表示代码中的语句是否得到执行;所述跳转执行覆盖可以表示代码中的跳转语句是否得到执行,即可以表示是否实现了跳转。根据输入数据和输出数据对应的标识,可以将每一组相应的输入数据、输出数据和覆盖信息组成一组三元组数据。
例如,对于表1中的数据按照MapReduce的函数逻辑进行数据处理,即若人物性别为男,当人物年龄大于等于25,系数因子取0.8,否则系数因子取1;若人物性别为女,当人物年龄小于等于20,则系数因子取0.6,否则系数因子取1;最后统计系数因子为0.8的人数、系数因子为0.6和系数因子为1的人数。则具体Map类的代码可以如下:
在调用该Map类时,输入数据为人物性别和人物年龄,人物编号可以作为输入数据的标识;
对人物编号为1的输入数据进行处理,可以执行到代码语句第3行且没有遇到需要跳转代码的部分;则覆盖信息可以表示为:语句3已执行;输出数据为0.8。
对人物编号为2的输入数据进行处理,在执行完第2行代码后需要跳转至第4行代码,并执行第4行、第5行代码;则覆盖信息可以表示为:语句2跳转语句4已执行,语句5已执行;
输出数据为1。
同理可以得到其他4组的覆盖信息和输出数据,如表2所示。
表2 处理后的输入数据、输出数据、覆盖信息
表2中的每一组对应的输入数据、输出数据和覆盖信息都组成一个三元组数据,例如第一组数据组成三元组数据可以表示为:“男,26;0.8;语句3已执行”。
S103:去除覆盖信息相同的三元组数据,形成监控三元组集合。
首先建立一个三元组集合,所述三元组集合初始化状态为一个空集。在读取三元组数据之前,可以利用监控程序每隔预定时间就主动扫描数据处理程序中是否产生了新的三元组数据,也可以数据处理程序在产生新的三元组数据后,主动提供三元组数据至监控程序。若数据处理程序产生了新的三元组数据,则监控程序读取所述新的三元组数据的信息,然后去除覆盖信息相同的三元组数据。所述去除覆盖信息相同的三元组数据,具体包括:将读入的三元组数据中的覆盖信息与三元组集合中的每一个三元组数据的覆盖信息进行对比,若所述读入的三元组数据中的覆盖信息与三元组集合中的每一个三元组数据的覆盖信息都不是完全相同,则将所述读入的三元组数据存放至三元组集合中;反之,若所述读入的三元组数据中的覆盖信息与三元组集合中的某一个三元组数据的覆盖信息,则不将该读入的三元组数据的内容存放至三元组集合中。直至MapReduce数据处理程序执行结束,监控程序不再读入新的三元组数据,则所述的三元组集合即为监控三元组集合。所述监控三元组集合作为验证处理数据正确性的对照数据。
例如,表2中的输入数据、输出数据、覆盖信息组成的三元组数据分别可以表示为:
“男,26;0.8;语句3已执行”
“男,24;1;语句2跳转语句4已执行,语句5已执行”
“男,12;1;语句2跳转语句4已执行,语句5已执行”
“女,16;0.6;语句1跳转语句6已执行,语句8已执行”
“女,29;1;语句1跳转语句6已执行,语句7跳转语句9已执行,语句10已执行”
“女,23;1;语句1跳转语句6已执行,语句7跳转语句9已执行,语句10已执行”
监控程序每隔预定时间主动扫描S102中是否产生了新的三元组数据,当S102输出第一个三元组数据“男,26;0.8;语句3已执行”时,监控程序读入该三元组数据,由于此时的三元组集合为空集,所以第一个三元组数据中的覆盖信息不会与三元组集合中有重复的信息,将该三元组数据“男,26;0.8;语句3已执行”存放至三元组集合中;
间隔预定时间后再次扫描S102中是否产生了新的三元组数据,当S102输出第二个三元组数据“男,24;1;语句2跳转语句4已执行,语句5已执行”时,将该三元组数据的覆盖信息“语句2跳转语句4已执行,语句5已执行”与存放在集合中的三元组数据“男,26;0.8;语句3已执行”的覆盖信息“语句3已执行”进行比对,两个三元组数据的覆盖信息不完全相同,则将第二个三元组数据“男,24;1;语句2跳转语句4已执行,语句5已执行”也存放至三元组集合中;
间隔预定时间后再次扫描S102中是否产生了新的三元组数据,当S102输出第三个三元组数据“男,12;1;语句2跳转语句4已执行,语句5已执行”时,将该三元组数据的覆盖信息“语句2跳转语句4已执行,语句5已执行”与存放在集合中的两个三元组数据的覆盖信息“语句3已执行”、“语句2跳转语句4已执行,语句5已执行”分别进行比对,该三元组数据的覆盖信息与其中一个三元组数据“男,24;1;语句2跳转语句4已执行,语句5已执行”的覆盖信息完全相同,所以该三元组数据“男,12;1;语句2跳转语句4已执行,语句5已执行”不存放至三元组集合中;
按照上述过程,可知最后存放至三元组集合中的三元组数据包括:
“男,26;0.8;语句3已执行”
“男,24;1;语句2跳转语句4已执行,语句5已执行”
“女,16;0.6;语句1跳转语句6已执行,语句8已执行”
“女,29;1;语句1跳转语句6已执行,语句7跳转语句9已执行,语句10已执行”
将上述三元组集合作为监控三元组集合,可以作为后续验证处理数据正确性的对照数据。
S104:在验证处理数据正确性时,将所述监控三元组集合中的输入数据返回至带有劫持代码的数据处理程序重新进行数据处理,所述带有劫持代码生成的数据处理程序劫持得到输出数据,形成输出数据集合。
在不改变MapReduce的函数逻辑的情况下,需要验证现阶段MapReduce环境下处理数据正确性时,只需利用带有劫持代码的MapReduce数据处理程序,对上述监控三元组集合中的输入数据再一次进行处理,并记录下经过处理后,劫持得到的每一组输入数据对应的新的输出数据,所述新的输出数据形成的集合称为输出数据集合。
例如,在不改变原来的MapReduce的函数逻辑的情况下,即Map类的函数逻辑为:若人物性别为男,当人物年龄大于等于25,系数因子取0.8,否则系数因子取1;若人物性别为女,当人物年龄小于等于20,则系数因子取0.6,否则系数因子取1;此时若需要验证MapReduce环境下处理数据正确性,则只需将原来监控三元组集合中的输入信息返回至S102中利用带有劫持代码的MapReduce数据处理程序重新进行处理,得到新的输出数据,所述新的输出数据形成的集合称为输出数据集合。
所述监控三元组集合包括:
“男,26;0.8;语句3已执行”
“男,24;1;语句2跳转语句4已执行,语句5已执行”
“女,16;0.6;语句1跳转语句6已执行,语句8已执行”
“女,29;1;语句1跳转语句6已执行,语句7跳转语句9已执行,语句10已执行”
将上述监控三元组集合中的输入数据,返回至S102中重新进行数据处理,包括将下述数据:
“男,26”
“男,24”
“女,16”
“女,29”
若重新进行数据处理后,得到的输出数据与输入数据的关系如下:
“男,26;”→“0.8”
“男,24;”→“1”
“女,16;”→“0.6”
“女,29;”→“0.6”
则,上述4个输出数据的集合称为输出数据集合。所述输出数据集合用于和监控三元组集合中的输出数据进行比较来验证现阶段MapReduce环境下处理数据正确性。
S105:通过监控三元组集合中的输出数据验证验证所述输出数据集合中的数据是否正确。
将上述输出数据集合中的每一条输出数据与监控三元组集合中对应的输出数据进行比对,验证输出数据集合中数据的正确性。若所述输出数据集合中某一条的输出数据与监控三元组集合中对应的输出数据完全相同,则表示输出数据集合中该条处理数据是正确的;反之,若所述输出数据集合中某一条的输出数据与监控三元组集合中对应的输出数据不完全相同,则表示输出数据集合中该条处理数据是错误的。
例如S104中,得到的输出数据集合包括:
“0.8”
“1”
“0.6”
“0.6”
监控三元组集合包括:
“男,26;0.8;语句3已执行”
“男,24;1;语句2跳转语句4已执行,语句5已执行”
“女,16;0.6;语句1跳转语句6已执行,语句8已执行”
“女,29;1;语句1跳转语句6已执行,语句7跳转语句9已执行,语句10已执行”
经过一一比对发现,输出数据集合中第1~3条输出数据与监控三元组集合中对应的输出数据都是完全相同的,说明现阶段第1~3条处理数据是正确的,而输出数据集合中的第4个输出数据是“0.6”,该输出数据与监控三元组集合中的第4个三元组数据的输出数据“1”不相同,说明现阶段第4条处理数据是错误的。
本申请提出的验证MapReduce环境下处理数据正确性的方法,利用真实数据进行处理,可以避免投入大量的人工成本;同时,利用真实数据可以保证数据的可靠性;本申请通过在MapReduce源代码中加入可以记录输入输出数据的劫持代码,生成带有劫持代码的数据处理程序,可以输出包括输入数据、输出数据和覆盖信息的三元组数据,同时,通过去除覆盖信息相同的三元组数据,得到监控三元组集合,使得作为验证数据正确性的参照数据的数据量大大减少。在需要验证MapReduce环境下处理数据正确性的时候,只需要将监控三元组集合中的输入信息重新返回至带有劫持代码的数据处理程序进行处理,得到新的输出数据,形成输出数据集合,此时需要处理的数据量也大大减少了,缩短了数据处理的时间。通过验证输出数据集合中的输出信息与监控三元组集合中对应的输出信息是否相同即可验证处理数据的正确性。综上所述,本申请提出的验证MapReduce环境下处理数据正确性的方法,可以减少实现验证MapReduce环境下处理数据正确性的人工成本和实现时间。
下面介绍本申请验证MapReduce环境下处理数据正确性的装置。图2是本申请验证MapReduce环境下处理数据正确性的装置实施例的组成结构图。如图2所示,所述验证MapReduce环境下处理数据正确性的装置,包括:处理程序准备单元21、三元组生成单元22、监控三元组集合单元23、输出数据集合单元24、验证单元25。其中,
所述处理程序准备单元21,用于为MapReduce源代码加入劫持代码,并生成带有劫持代码的数据处理程序。
图3是本申请装置实施例中处理程序准备单元的组成结构图。如图3所示,所述处理程序准备单元21,包括:代码修改单元211、程序生成单元212。其中,
所述代码修改单元211,用于为MapReduce源代码加入记录输入数据、输出数据及数据标识的劫持代码;
所述程序生成单元212,用于将代码修改单元211输出的加入了劫持代码的MapReduce代码进行编译,生成带有劫持代码的数据处理程序;
所述三元组生成单元22,用于运行所述处理程序准备单元21中的数据处理程序对输入数据进行数据处理,并记录每一组输入数据、输出数据和覆盖信息,生成三元组数据。
图4是本申请装置实施例中三元组生成单元的组成结构图。如图4所示,所述三元组生成单元22,包括:数据输入单元221、程序处理单元222、三元组组成单元223。其中,
所述数据输入单元221,用于读入需要进行数据处理的输入数据;
所述程序处理单元222,用于对数据输入单元221中读入的数据利用带有劫持代码的数据梳理程序进行处理,得到输出数据,并记录输入数据、输出数据和覆盖信息;
所述三元组组成单元223,用于将对应的输入数据、输出数据和覆盖信息设定为三元组数据。
所述监控三元组集合单元23,用于利用监控程序对所述三元组生成单元22进行扫描,读取所述三元组生成单元22生成的三元组数据,并去除覆盖信息相同的三元组数据,形成监控三元组集合。
图5是本申请装置实施例中监控三元组集合单元的组成结构图。如图5所示,所述监控三元组集合单元23,可以包括:数据读取单元231、信息对比单元232、三元组存放单元233。其中,
所述数据读取单元231,用于读入三元组生成单元22生成的新的三元组数据;
所述信息对比单元232,用于将数据读取单元231中三元组数据的覆盖信息与三元组存放单元233中存放的每一个三元组数据的覆盖信息进行对比;
所述三元组存放单元233,用于将信息对比单元232中对比结果是读入的三元组数据中覆盖信息与存放单元233已存放的三元组集合中每一个三元组数据的覆盖信息都不完全相同的三元组数据存放至三元组集合中,形成监控三元组集合。
所述输出数据集合单元24,用于在验证处理数据正确性时,将所述三元组存放单元234形成的监控三元组集合中的输入数据返回至三元组生成单元22进行数据处理,并将此时的输出数据组成输出数据集合。
图6是本申请装置实施例中输出数据集合单元的组成结构图。如图6所示,所述输出数据集合单元24,包括:输入数据返回单元241、集合形成单元242。其中,
所述输入数据返回单元241,用于将监控三元组集合中的每一组输入数据返回至三元组生成单元22重新进行数据处理,得到新的输出数据;
所述集合形成单元242,用于将新的输出数据组成输出数据集合。
所述验证单元25,用于将输出数据集合单元24生成的输出数据集合中的每一条输出数据与监控三元组集合中对应的输出数据进行比对,验证输出数据集合中的数据是否正确。
本申请提出的验证MapReduce环境下处理数据正确性的装置实施例与本申请提出的验证MapReduce环境下处理数据正确性的方法实施例相对应,可以实现本申请的方法实施例,达到减少实现验证MapReduce环境下处理数据正确性的人工成本和实现时间的效果。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。该计算机软件产品可以包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。该计算机软件产品可以存储在内存中,内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括短暂电脑可读媒体(transitory media),如调制的数据信号和载波。
本说明书中,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。
Claims (11)
1.一种验证MapReduce环境下处理数据正确性的方法,其特征在于,包括:
为MapReduce源代码加入劫持代码,生成带有劫持代码的数据处理程序;
运行所述带有劫持代码的数据处理程序对输入数据进行数据处理,所述带有劫持代码的数据处理程序劫持得到输入数据、输出数据,所述数据处理程序记录数据处理过程中代码是否被执行的覆盖信息;设定覆盖信息和对应的输入数据、输出数据为三元组数据;所述带有劫持代码的数据处理程序处理的输入数据为真实数据;
去除覆盖信息相同的三元组数据,形成监控三元组集合;
在验证处理数据正确性时,将所述监控三元组集合中的输入数据返回至带有劫持代码的数据处理程序重新进行数据处理,所述带有劫持代码的数据处理程序劫持得到输出数据,形成输出数据集合;
通过监控三元组集合中的输出数据验证所述输出数据集合中的数据是否正确。
2.如权利要求1所述的一种验证MapReduce环境下处理数据正确性的方法,其特征在于,所述劫持代码包括:输入劫持代码和输出劫持代码。
3.如权利要求1所述的一种验证MapReduce环境下处理数据正确性的方法,其特征在于,所述去除覆盖信息相同的三元组数据,形成监控三元组集合,具体包括:设置三元组集合,所述三元组集合的初始状态为空集;将新生成的三元组数据的覆盖信息与三元组集合中的三元组数据的覆盖信息进行比对,将覆盖信息不完全相同的三元组数据存放至所述三元组集合中,将输入数据处理完毕后所述的三元组数据集合作为监控三元组集合。
4.如权利要求1所述的一种验证MapReduce环境下处理数据正确性的方法,其特征在于,通过监控三元组集合中的输出数据验证所述输出数据集合中的数据是否正确,具体包括:
将输出数据集合中的每一条输出数据与监控三元组集合中对应的输出数据进行比对,且:
对于同一输入数据的两个集合中对应的输出数据相同的,验证输出数据集合中该条数据为正确;
对于同一输入数据的两个集合中对应的输出数据不相同的,验证输出数据集合中该条数据为错误。
5.如权利要求1所述的一种验证MapReduce环境下处理数据正确性的方法,其特征在于,所述设定覆盖信息和对应的输入数据、输出数据为三元组数据,包括:将标识相同的输入数据与输出数据及对应的覆盖信息为三元组数据。
6.如权利要求1所述的一种验证MapReduce环境下处理数据正确性的方法,其特征在于,所述覆盖信息,包括:语句执行覆盖信息和跳转执行覆盖信息。
7.一种验证MapReduce环境下处理数据正确性的装置,其特征在于,包括:处理程序准备单元、三元组生成单元、监控三元组集合单元、输出数据集合单元、验证单元;其中,
所述处理程序准备单元,用于为MapReduce源代码加入劫持代码,并生成带有劫持代码的数据处理程序;
所述三元组生成单元,用于运行所述处理程序准备单元中的数据处理程序对输入数据进行数据处理,并记录输入数据、输出数据和覆盖信息,将覆盖信息和对应的输入数据、输出数据设定为三元组数据;所述带有劫持代码的数据处理程序处理的输入数据为真实数据;
所述监控三元组集合单元,用于读取所述三元组生成单元生成的三元组数据,去除覆盖信息相同的三元组数据,形成监控三元组集合;
所述输出数据集合单元,用于在验证处理数据正确性时,将所述监控三元组集合中的输入数据返回至三元组生成单元进行数据处理,并将此时的输出数据存放至输出数据集合中;
所述验证单元,用于根据监控三元组集合中的输出数据,验证输出数据集合中的输出数据是否正确。
8.如权利要求7所述的一种验证MapReduce环境下处理数据正确性的装置,其特征在于,所述处理程序准备单元,包括:代码修改单元、程序生成单元;其中,
所述代码修改单元,用于为MapReduce源代码加入记录输入数据、输出数据及数据标识的劫持代码;
所述程序生成单元,用于将代码修改单元输出的加入了劫持代码的MapReduce代码进行编译,生成带有劫持代码的数据处理程序。
9.如权利要求7所述的一种验证MapReduce环境下处理数据正确性的装置,其特征在于,所述三元组生成单元,包括:数据输入单元、程序处理单元、三元组组成单元;其中,
所述数据输入单元,用于读入需要进行数据处理的输入数据;
所述程序处理单元,用于对数据输入单元中读入的数据利用带有劫持代码的数据梳理程序进行处理,得到输出数据,并记录输入数据、输出数据和覆盖信息;
所述三元组组成单元,用于将对应的输入数据、输出数据和覆盖信息设定为三元组数据。
10.如权利要求7所述的一种验证MapReduce环境下处理数据正确性的装置,其特征在于,所述监控三元组集合单元,包括:数据读取单元、信息对比单元、三元组存放单元;其中,
所述数据读取单元,用于读入三元组生成单元生成的新的三元组数据;
所述信息对比单元,用于将数据读取单元中三元组数据的覆盖信息与三元组存放单元中每一个三元组数据的覆盖信息进行对比;
所述三元组存放单元,用于将信息对比单元中对比结果是读入的三元组数据中覆盖信息与已有的三元组集合中每一个三元组数据的覆盖信息都不完全相同的三元组数据存放至三元组集合中,形成监控三元组集合。
11.如权利要求7所述的一种验证MapReduce环境下处理数据正确性的装置,其特征在于,所述输出数据集合单元,包括:输入数据返回单元、集合形成单元;其中,
所述输入数据返回单元,用于将监控三元组集合中的每一组输入数据返回至三元组生成单元重新进行数据处理,得到新的输出数据;
所述集合形成单元,用于将新的输出数据组成输出数据集合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410090641.0A CN104915352B (zh) | 2014-03-12 | 2014-03-12 | 一种验证MapReduce环境下处理数据正确性的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410090641.0A CN104915352B (zh) | 2014-03-12 | 2014-03-12 | 一种验证MapReduce环境下处理数据正确性的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104915352A CN104915352A (zh) | 2015-09-16 |
CN104915352B true CN104915352B (zh) | 2018-10-02 |
Family
ID=54084422
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410090641.0A Active CN104915352B (zh) | 2014-03-12 | 2014-03-12 | 一种验证MapReduce环境下处理数据正确性的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104915352B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577697B (zh) * | 2017-07-18 | 2021-07-06 | 创新先进技术有限公司 | 一种数据处理方法、装置及设备 |
CN107808098B (zh) * | 2017-09-07 | 2020-08-21 | 阿里巴巴集团控股有限公司 | 一种模型安全检测方法、装置以及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7278056B2 (en) * | 2004-06-09 | 2007-10-02 | International Business Machines Corporation | Methods, systems, and media for management of functional verification |
CN101866317A (zh) * | 2010-06-29 | 2010-10-20 | 南京大学 | 一种基于聚类分析的回归测试用例选择方法 |
CN102063374A (zh) * | 2011-01-07 | 2011-05-18 | 南京大学 | 一种使用半监督信息进行聚类的回归测试用例选择方法 |
CN102769615A (zh) * | 2012-07-02 | 2012-11-07 | 北京大学 | 一种基于MapReduce机制的任务调度方法和系统 |
CN103123607A (zh) * | 2013-03-08 | 2013-05-29 | 扬州大学 | 一种基于形式概念分析的软件回归测试方法 |
CN103617119A (zh) * | 2013-12-03 | 2014-03-05 | 南通大学 | 基于语句交互覆盖的回归测试用例选择方法 |
-
2014
- 2014-03-12 CN CN201410090641.0A patent/CN104915352B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7278056B2 (en) * | 2004-06-09 | 2007-10-02 | International Business Machines Corporation | Methods, systems, and media for management of functional verification |
CN101866317A (zh) * | 2010-06-29 | 2010-10-20 | 南京大学 | 一种基于聚类分析的回归测试用例选择方法 |
CN102063374A (zh) * | 2011-01-07 | 2011-05-18 | 南京大学 | 一种使用半监督信息进行聚类的回归测试用例选择方法 |
CN102769615A (zh) * | 2012-07-02 | 2012-11-07 | 北京大学 | 一种基于MapReduce机制的任务调度方法和系统 |
CN103123607A (zh) * | 2013-03-08 | 2013-05-29 | 扬州大学 | 一种基于形式概念分析的软件回归测试方法 |
CN103617119A (zh) * | 2013-12-03 | 2014-03-05 | 南通大学 | 基于语句交互覆盖的回归测试用例选择方法 |
Non-Patent Citations (1)
Title |
---|
基于动态域划分的MapReduce安全冗余调度策略;沈晴霓 等;《通信学报》;20140125;第35卷(第1期);第34-46页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104915352A (zh) | 2015-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106897322B (zh) | 一种数据库和文件系统的访问方法和装置 | |
CN111198868B (zh) | 一种智能分库实时数据迁移方法和装置 | |
US11036491B1 (en) | Identifying and resolving firmware component dependencies | |
CN107577697B (zh) | 一种数据处理方法、装置及设备 | |
WO2016026328A1 (zh) | 一种信息处理方法、装置及计算机存储介质 | |
CN106528067B (zh) | 一种生成报表的方法及装置 | |
US11188498B2 (en) | Method and system for processing engineering objects in an industrial automation environment | |
US9524475B1 (en) | Presenting discriminant change history records on topology graphs | |
CN103838626A (zh) | 一种处理串行任务的数据处理装置及方法 | |
CN103678115A (zh) | 在混合模式程序中检测源代码差错的位置的设备和方法 | |
US10496423B2 (en) | Method for opening up data and functions of terminal application based on reconstruction technology | |
CN109597678A (zh) | 任务处理方法及装置 | |
JP2017174418A (ja) | モデルチェックのためのデータ構造抽象化 | |
US20130024178A1 (en) | Playback methodology for verification components | |
CN105868216A (zh) | 一种实现对象过期操作的方法、装置和设备 | |
CN110134598B (zh) | 一种批量处理方法、装置及系统 | |
US9454382B2 (en) | Verification of UML state machines | |
US9460243B2 (en) | Selective importance sampling | |
CN104915352B (zh) | 一种验证MapReduce环境下处理数据正确性的方法和装置 | |
US11487641B1 (en) | Micro services recommendation system for identifying code areas at risk | |
CN112731117A (zh) | 芯片的自动验证方法和系统,及存储介质 | |
CN112181951A (zh) | 一种异构数据库数据迁移方法、装置及设备 | |
US20230305734A1 (en) | Platform for non-volatile memory storage devices simulation | |
US9442831B1 (en) | Automated testing of program code for processing a simple boot flag data structure | |
CN110704742B (zh) | 一种特征提取方法及装置 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211111 Address after: Room 201, floor 2, building 15, No. 1999, Yizhou Avenue, hi tech Zone, Chengdu, Sichuan Patentee after: Alibaba (Chengdu) Software Technology Co., Ltd Address before: Grand Cayman, British Cayman Islands Patentee before: Alibaba Group Holdings Limited |
|
TR01 | Transfer of patent right |