CN103678098A - 一种hadoop程序测试的方法和系统 - Google Patents
一种hadoop程序测试的方法和系统 Download PDFInfo
- Publication number
- CN103678098A CN103678098A CN201210328786.0A CN201210328786A CN103678098A CN 103678098 A CN103678098 A CN 103678098A CN 201210328786 A CN201210328786 A CN 201210328786A CN 103678098 A CN103678098 A CN 103678098A
- Authority
- CN
- China
- Prior art keywords
- path
- local
- hdfs
- execution
- script
- 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.)
- Granted
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供了一种HADOOP程序测试的方法和系统,其中运行待测试的HADOOP程序过程中,如果运行到对远程HADOOP分布式文件系统(HDFS)的SHELL接口的调用,则将对远程HDFS的SHELL接口的调用命令转换为对本地文件系统(FS)的SHELL接口的调用命令,并将HDFS路径转换为本地FS路径;执行转换后得到的命令,获取执行结果。或者,如果运行到对远程分布式(MAP/REDUCE)计算接口的调用,则将输入和输出路径从HDFS路径转换为本地FS路径,利用本地作业运行器替代作业追踪器,进入执行路径后,执行MAP执行脚本和REDUCE执行脚本,获取执行结果。通过本发明能够缩短测试执行的时间。
Description
【技术领域】
本发明涉及计算机应用技术领域,特别涉及一种HADOOP程序测试的方法和系统。
【背景技术】
HADOOP是一个由Apache基金会开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力高速运算和存储。
HADOOP程序的测试过程中,需要在已搭建好的分布式文件系统(HDFS,Hadoop Distributed File system)和HADOOP计算集群上进行,在访问HDFS和提交分布式计算作业(MAP/REDUCE JOB)时,需要进行远程数据访问和传输、处理JOB提交和初始化、任务分配和执行等远程工作,这些远程数据访问和调度工作往往会耗费大量时间。经试验需要1千到2千次远程数据访问,数据量在1M之内的情况下,全部自动化功能测试用例执行一遍至少需要1个小时40分钟。
另外,由于HADOOP程序使用Java实现,在运行时会启动Java虚拟机(JVM),也也会增加执行时间。
【发明内容】
有鉴于此,本发明提供了一种HADOOP程序测试的方法和系统,以便于缩短测试执行的时间。
具体技术方案如下:
一种HADOOP程序测试的方法,该方法包括:
S1、运行待测试的HADOOP程序;
S2、如果运行到对远程HADOOP分布式文件系统HDFS的SHELL接口的调用,执行步骤S3;或者,如果运行到对远程分布式MAP/REDUCE计算接口的调用,则执行步骤S4;
S3、按照预设的远程命令名与本地命令名之间的映射关系,将对远程HDFS的SHELL接口的调用命令转换为对本地文件系统FS的SHELL接口的调用命令,并基于预设的路径映射规则,将对远程HDFS的SHELL接口的调用命令中的HDFS路径转换为本地FS路径;执行转换后得到的命令,获取执行结果,转至步骤S1直至待测试的HADOOP程序运行结束;
S4、基于预设的路径映射规则,将对远程MAP/REDUCE计算接口的调用涉及到的输入和输出路径从HDFS路径转换为本地FS路径,利用本地作业运行器LocalJobRunner替代作业追踪器JobTracker,进入执行路径后,执行MAP执行脚本和REDUCE执行脚本,获取执行结果,转至步骤S1直至待测试的HADOOP程序运行结束。
根据本发明一优选实施例,所述路径映射规则为:
Localpath=Workspace+HDFSpath;
其中所述Localpath为本地FS路径,所述Workspace为从配置文件中读取的本地工作路径,所述HDFSpath为HDFS路径。
根据本发明一优选实施例,在所述步骤S3中使用python执行所述转换后得到的命令。
根据本发明一优选实施例,在所述步骤S4中还包括:将执行路径按照LocalExcpath=Workspace+Excpath转换为本地执行路径,所述进入的执行路径为转换后的本地执行路径;
其中,所述LocalExcpath为本地执行路径,所述Workspace为从配置文件中读取的本地工作路径,所述Excpath为原始生成的执行路径。
根据本发明一优选实施例,执行所述MAP执行脚本和REDUCE执行脚本的过程中,如果存在对HDFS API的调用,则在so动态共享库的函数入口处,将集群路径从HDFS路径转换为本地FS路径。
根据本发明一优选实施例,步骤S4中在将输入和输出路径从HDFS路径转换为本地FS路径之后,且利用LocalJobRunner替代JobTracker之前还包括:将执行MAP执行脚本和REDUCE执行脚本过程中使用的文件解压缩;
在执行MAP执行脚本和REDUCE执行脚本之前还包括:将解压缩的文件拷贝到本地执行路径。
一种HADOOP程序测试的系统,该系统包括:
程序获取单元,用于运行待测试的HADOOP程序;
调用判断单元,用于如果所述程序获取单元运行到对远程HADOOP分布式文件系统HDFS的SHELL接口的调用,则触发SHELL接口调用单元;或者,如果运行到对远程分布式MAP/REDUCE计算接口的调用,则触发分布式计算接口调用单元;
SHELL接口调用单元,用于受到触发后,按照预设的远程命令名与本地命令名之间的映射关系,将对远程HDFS的SHELL接口的调用命令转换为对本地文件系统FS的SHELL接口的调用命令,并基于预设的路径映射规则,将对远程HDFS的SHELL接口的调用命令中的HDFS路径转换为本地FS路径;执行转换后得到的命令,获取执行结果;
分布式计算接口调用单元,用于受到触发后,基于预设的路径映射规则,将对远程MAP/REDUCE计算接口的调用涉及到的输入和输出路径从HDFS路径转换为本地FS路径,利用本地作业运行器LocalJobRunner替代作业追踪器JobTracker,获取LocalJobRunner的执行结果;
LocalJobRunner,用于进入执行路径后,执行MAP执行脚本和REDUCE执行脚本。
根据本发明一优选实施例,所述路径映射规则为:
Localpath=Workspace+HDFSpath;
其中所述Localpath为本地FS路径,所述Workspace为从配置文件中读取的本地工作路径,所述HDFSpath为HDFS路径。
根据本发明一优选实施例,所述SHELL接口调用单元使用python执行所述转换后得到的命令。
根据本发明一优选实施例,分布式计算接口调用单元,还用于将执行路径按照LocalExcpath=Workspace+Excpath转换为本地执行路径,所述LocalJobRunner进入的执行路径为转换后的本地执行路径;
其中,所述LocalExcpath为本地执行路径,所述Workspace为从配置文件中读取的本地工作路径,所述Excpath为原始生成的执行路径。
根据本发明一优选实施例,所述LocalJobRunner在执行所述MAP执行脚本和REDUCE执行脚本的过程中,如果存在对HDFS API的调用,则在so动态共享库的函数入口处,将集群路径从HDFS路径转换为本地FS路径。
根据本发明一优选实施例,所述分布式计算接口调用单元在将输入和输出路径从HDFS路径转换为本地FS路径之后,且利用LocalJobRunner替代JobTracker之前,还用于将执行MAP执行脚本和REDUCE执行脚本过程中使用的文件解压缩;在所述LocalJobRunner执行MAP执行脚本和REDUCE执行脚本之前将解压缩的文件拷贝到本地执行路径。
由以上技术方案可以看出,本发明将远程集群上执行的HDFS访问、MAP/REDUCE计算转换到本地文件系统上,将基于JVM的操作替换为脚本操作,加快了测试执行速度,缩短了测试执行时间。
【附图说明】
图1为本发明实施例一提供的HADOOP程序测试的方法流程图;
图2为本发明实施例二提供的上述步骤103的具体方法流程图;
图3为本发明实施例三提供的上述步骤104的具体方法流程图;
图4为本发明实施例四提供的HADOOP程序测试的系统结构图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
实施例一、
图1为本发明实施例一提供的HADOOP程序测试的方法流程图,如图1所示,该方法包括以下步骤:
步骤101:运行待测试的HADOOP程序。
步骤102:判别运行到的调用类型,如果运行到对远程HDFS的SHELL接口的调用,则执行步骤103;如果运行到对远程MAP/REDUCE计算接口的调用,则执行步骤104。
HADOOP程序主要包括两种调用,即对远程HDFS的SHELL接口的调用和对远程MAP/REDUCE计算接口的调用。对远程HDFS的SHELL接口的调用主要是对远程文件的操作,诸如读、写、上传、下载、显示、复制、移动、删除等。对远程MAP/REDUCE计算接口的调用主要是以流式(streaming)方式启动的MAP/REDUCE计算任务。
步骤103:将对远程HDFS的SHELL接口的调用转换为对本地SHELL接口的调用,在本地执行调用命令后,获取执行结果,转至步骤101直至待测试的HADOOP程序运行结束。
将对远程HDFS的SHELL接口的调用转换为对本地SHELL接口的调用包含路径转换和命令转换,具体的转换过程将在实施例二中详细描述。
步骤104:将对远程MAP/REDUCE计算接口的调用转换为本地执行,获取执行结果,转至步骤101直至待测试的HADOOP程序运行结束。
对远程MAP/REDUCE计算接口的调用转换为本地执行包括路径的转换和作业执行的转换,具体的转换过程将在实施例三中详细描述。
在执行完毕后,可以将执行结果与预期结果进行比对得到测试结果,即如果执行结果与预期结果一致,则测试通过,否则测试失败。
实施例二、
图2为本发明实施例二提供的上述步骤103的具体方法流程图,如图2所示,包括以下步骤:
步骤201:按照预设的远程命令名与本地命令名之间的映射关系,将对远程HDFS的SHELL接口的调用命令转换为对本地FS的SHELL接口的调用命令。
预先配置远程命令名与本地命令名之间的映射关系,使得对远程HDFS的SHELL接口的调用命令能够转换为对本地FS的SHELL接口的调用命令,该映射关系可以如表1中所示例子。
表1
步骤202:基于预设的路径映射规则,将对远程HDFS的SHELL接口的调用命令中的HDFS路径转换为本地FS路径。
预先配置本地工作路径以及路径映射规则,该路径映射规则为HDFS路径与本地FS路径之间的映射关系,可以采用公式(1):
Localpath=Workspace+HDFSpath (1)
其中Localpath为本地FS路径,Workspace为本地工作路径,可以从配置文件中读取获得,HDFSpath为HDFS路径。
步骤203:执行转换后得到的命令。
在执行上述步骤201和步骤202的转换后,对远程HDFS的SHELL接口的调用命令就转换为对本地FS的SHELL接口的调用命令,本步骤的执行实际上就是执行了本地FS的SHELL接口的调用。
在执行时,优选采用python执行转换后得到的命令,能够进一步将命令的执行时间加快10倍。python是一种面向对象、直译式计算机程序设计语言,语法简洁清晰、具有丰富和强大的类库。python在执行时会将.py文件中的源代码编译成python的字节码,然后由python虚拟机来执行编译好的字节码。
步骤204:获取执行结果。
由于使用SHELL接口会返回特定格式的结果,比如查看某个远程路径上的文件列表,其通常与使用本地查看文件列表命令的返回结果格式是不一样的,因此在获取执行结果后,可以进一步将执行结果转换为执行远程HDFS的SHELL接口的调用命令的执行结果格式。
实施例三、
图3为本发明实施例三提供的上述步骤104的具体方法流程图,如图3所示,包括以下步骤:
步骤301:基于预设的路径映射规则,将对远程MAP/REDUCE计算接口的调用涉及到的输入和输出路径从HDFS路径转换为本地FS路径。
对远程MAP/REDUCE计算接口的调用所涉及的输入和输出路径是HDFS路径,作业执行本地化的基础是路径本地化,此处采用的路径映射规则与实施例二中采用的路径映射规则相同,在此不再赘述。
步骤302:利用本地作业运行器(LocalJobRunner)替代作业追踪器(JobTracker)。
HADOOP系统使用作业客户端将作业提交到JobTracker,再由JobTracker将作业划分为计算任务分派给多个TaskTracker进行并行计算。在本发明实施例中,采用HADOOP独立模式中的LocalJobRunner来代替JobTracker。LocalJobRunner利用Java Process封装MAP执行脚本和REDUCE执行脚本,在本地启动虚拟机,且输入和输出数据、脚本执行都在本地。
步骤303:进入执行路径后,执行MAP执行脚本和REDUCE执行脚本。
通常计算系统会使用一个根据作业id生成的一个路径作为执行路径,在本步骤可以对原始生成的执行路径也进行一个转换,即按照公式(2)转换为本地执行路径。
LocalExcpath=Workspace+Excpath (2)
其中,LocalExcpath为本地执行路径,Workspace为本地工作路径,可以从配置文件中读取获得,所述Excpath为原始生成的执行路径。在路径转换之后,HADOOP执行环境自然就会把MAP执行脚本和REDUCE执行脚本拷贝到本地执行路径下。
然后,LocalJobRunner进入本地执行路径,执行MAP执行脚本和REDUCE执行脚本。
步骤304:获取执行结果。
另外,有一类HADOOP程序在执行MAP执行脚本和REDUCE执行脚本的过程中,除了对标准输入和输出数据进行读/写之外,还需要访问HDFS上其他位置的数据,这种HDFS数据访问有可能是调用SHELL接口的形式,也有可能是对HDFS API的调用,比如调用hdfsOpen函数打开HDFS上的文件。对于调用SHELL接口的形式在实施例二中已经解决,对于调用HDFS API的形式,则需要一种本地化的形式。
C语言的HADOOP API是通过客户端包含的so动态共享库(libhdfs.so)实现的,libhdfs.so对外描述了HDFS文件操作的C接口,内部基于Java本地调用(JNI)实现。
本发明实施例中,在执行MAP执行脚本和REDUCE执行脚本的过程中,如果存在对HDFS API的调用,则在so动态共享库的函数入口处,将集群路径从HDFS路径转换为本地FS路径,从而使得非标准数据的访问也能够本地化。其中集群路径从HDFS路径转换为本地FS路径的方式也可以采用实施例二中的公式(1),不再赘述。
还有一类HADOOP程序在启动作业前,会将计算过程中所使用的文件(执行MAP执行脚本和REDUCE执行脚本过程中使用的文件),例如配置文件、MAPPER/REDUCER打包文件等,实现存储在HDFS上,在启动和执行MAP执行脚本和REDUCE执行脚本过程中直接引用,这种先上传后使用的功能是由分布式缓存提供的。但有些情况下,例如HADOOP独立模式下不支持分布式缓存功能,这就需要对客户端进行改造,以解决该问题。
本发明实施例中可以在步骤301和步骤302之间,将执行MAP执行脚本和REDUCE执行脚本过程中使用的文件解压缩。然后在步骤302和步骤303之间,将解压缩的文件拷贝到本地执行路径,这样执行时HADOOP程序就自然可以找到分布式缓存文件了。
下面举一个具体的实例,以词频统计为例,假设一台机器上存放了大量日志文件,为统计所有日志文件中各个单词出现次数编写了一个HADOOP程序,该程序由两部分组成:第一部分、将这台机器上的所有日志文件上传到集群(即由许多机器组成的HDFS);第二部分、启动HADOOP程序在集群上进行MAP/REDUCE统计计算,即许多机器同时进行统计,每台只统计一部分数据最后进行汇总。
HADOOP程序在运行时,第一部分程序会调用远程HDFS的SHELL接口上传日志,第二部分程序会调用远程MAP/REDUCE接口进行统计。
运行到第一部分程序时,假设命令为:
hadoop dfs–put./logfile/user/logdata,表示将本地当前路径下logfile文件上传到HDFS上的/user/logdata下。
此时开始执行实施例二所示流程:
首先按照预设的远程命令名与本地命令名之间的映射关系,将命令名转换为cp./logfile/user/logdata/。
基于预设的路径映射规则,假设用户配置的本地工作路径为:/home/localpath,则经过路径转换之后,得到的命令为:
cp./logfile/home/localpath/user/logdata/
在执行转换后得到的命令时,使用python调用shell命令的执行接口(subprocess),将数据从本地当前路径下拷贝到了本地/home/localpath下,并获取执行后的返回结果。
最后将返回结果按照执行远程HADOOP的SHELL接口调用命令的返回结果格式进行转换。
运行到第二部分程序时,假设MAP/REDUCE统计计算程序执行的是:
hadoop jar $HPATH/hadoop-*-streaming.jar-mapper prog/mymap.sh–reducer prog/myreduce.sh–cacheArchieve‘/user/prog.jar#prog’–input/user/logdata/*–output/user/output,即从集群上/user/logdata下面读取数据文件,通过prog/mymap.sh脚本将文件中每个单词切成独立一行,通过prog/myreduce.sh脚本对相同单词行进行计数,将统计结果写到/user/output下面,其中两个脚本都是从/user/prog.jar文件中解压到prog路径后得到的,这个/user/prog.jar是执行第二部分程序之前准备好的。
此时开始执行实施例三所示流程:
首先基于预设的路径映射规则,将输入和输出路径从HDFS路径转换为本地FS路径:从配置中读取本地工作路径/home/localpath,将输入路径/user/logdata/*进行转换得到/home/localpath/user/logdata/*,将输出路径/user/output进行转换得到/home/localpath/user/output。
然后将cacheArchieve路径进行转换,将-cacheArchieve中/user/prog.jar转换为/home/localpath/user/prog.jar,并将其解压到本地当前路径/home/localpath/user/prog下面。
使用LocalJobRunner替代JobTracker,LocalJobRunner是在本地启动Java虚拟机的,输入和输出数据、脚本计算都是在本地进行。需要指出的是,这里用到的LocalJobRunner借用了apache hadoop中的代码,在其基础上进行了修改,修改点主要包含路径转换、cacheArchieve处理等MAP/REDUCE接口优化部分。
将cacheArchieve/file拷贝到本地执行路径:使用LocalJobRunner执行计算时,会建立一个名为jobXXXX的临时目录,目前为止,两个实现计算的脚本仍存在/home/localpath/user/prog/目录下,在执行脚本之前需要把他们拷贝到jobXXXX路径,做这个工作主要是弥补了apache hadoop不支持cacheArchieve的不足。
进入本地执行路径,执行MAP执行脚本和REDUCE执行脚本。
进行上述过程之后,命令变为:
“hadoop jar $HPATH/hadoop-*-streaming.jar–mapper prog/mymap.sh-reducer prog/myreduce.sh-input/home/localpath/user/logdata/*-output/home/localpath/user/output”。
在执行脚本的过程中,对于读写非标准数据(即非输入和输出数据),改写so动态共享库的函数入口,将集群路径从HDFS路径转换为本地FS路径:在执行脚本mymap.sh、myreduce.sh的过程中,本发明改写了libhdfs.so,在so库函数入口处,将集群路径拼接转换为/home/localpath/user/whitelistfile,这样对于以非标准数据作为输入数据的HADOOP程序而言,也可以得到支持。例如为了避免统计白名单中的词典,会先读取白名单文件(保存在HDFS上),这种读取非标准数据需要通过另一个方式HDFS API实现(对于C语言来说就是libhdfs.so)。这种数据路径也为集群路径,类似/user/whitelistfile,为了这种支持本地读取此类数据,
实施例四、
图4为本发明实施例四提供的HADOOP程序测试的系统结构图,该系统可以设置在HADOOP程序测试的客户端,如图4所示,该系统包括:程序获取单元400、调用判断单元401、SHELL接口调用单元402、分布式计算接口调用单元403和LocalJobRunner 404。
程序获取单元400,用于运行待测试的HADOOP程序。
调用判断单元401,用于如果程序获取单元400运行到对远程HDFS的SHELL接口的调用,则触发SHELL接口调用单元402;或者,如果运行到对远程MAP/REDUCE计算接口的调用,则触发分布式计算接口调用单元403。
SHELL接口调用单元402,用于受到触发后,按照预设的远程命令名与本地命令名之间的映射关系,将对远程HDFS的SHELL接口的调用命令转换为对本地FS的SHELL接口的调用命令,并基于预设的路径映射规则,将对远程HDFS的SHELL接口的调用命令中的HDFS路径转换为本地FS路径;执行转换后得到的命令,获取执行结果。
具体地,可以优选使用python执行转换后得到的命令,能够进一步将命令的执行时间加快10倍。
分布式计算接口调用单元403,用于受到触发后,基于预设的路径映射规则,将对远程MAP/REDUCE计算接口的调用涉及到的输入和输出路径从HDFS路径转换为本地FS路径,利用本地作业运行器LocalJobRunner替代作业追踪器JobTracker,获取LocalJobRunner的执行结果。
LocalJobRunner 404,用于进入执行路径后,执行MAP执行脚本和REDUCE执行脚本。
其中,SHELL接口调用单元402和分布式计算接口调用单元403采用的路径映射规则可以为:Localpath=Workspace+HDFSpath;
其中Localpath为本地FS路径,Workspace为从配置文件中读取的本地工作路径,HDFSpath为HDFS路径。
通常计算系统会使用一个根据作业id生成的一个路径作为执行路径,分布式计算接口调用单元403可以对原始生成的执行路径也进行一个转换,即将执行路径按照LocalExcpath=Workspace+Excpath转换为本地执行路径,这样LocalJobRunner 404进入的执行路径就是转换后的本地执行路径。其中,LocalExcpath为本地执行路径,Workspace为从配置文件中读取的本地工作路径,Excpath为原始生成的执行路径。
在本发明实施例中,LocalJobRunner在执行MAP执行脚本和REDUCE执行脚本的过程中,如果存在对HDFS API的调用,则在so动态共享库的函数入口处,将集群路径从HDFS路径转换为本地FS路径,从而使得非标准数据的访问也能够本地化。其中集群路径从HDFS路径转换为本地FS路径的方式也可以采用实施例二中的公式(1),不再赘述。
还有一类HADOOP程序在启动作业前,会将计算过程中所使用的文件(执行MAP执行脚本和REDUCE执行脚本过程中使用的文件),例如配置文件、MAPPER/REDUCER打包文件等,实现存储在HDFS上,在启动和执行MAP执行脚本和REDUCE执行脚本过程中直接引用,这种先上传后使用的功能是由分布式缓存提供的。但有些情况下,例如HADOOP独立模式下不支持分布式缓存功能,这就需要对客户端进行改造。即分布式计算接口调用单元403在将输入和输出路径从HDFS路径转换为本地FS路径之后,且利用LocalJobRunner替代JobTracker之前,将执行MAP执行脚本和REDUCE执行脚本过程中使用的文件解压缩;在LocalJobRunner 404执行MAP执行脚本和REDUCE执行脚本之前将解压缩的文件拷贝到本地执行路径,这样执行时HADOOP程序就自然可以找到分布式缓存文件了。
程序运行结束后,会存在将执行结果和预期结果进行比对获得测试结果的单元,该单元为已有单元,在此不详述。
由以上描述可以看出,本发明提供的上述方法和系统具备以下优点:
1)本发明将远程集群上执行的HDFS访问、MAP/REDUCE计算转换到本地文件系统上,将基于JVM的操作替换为脚本操作,加快了测试执行速度,缩短了测试执行时间。经试验,从传统远程HADOOP测试执行时间的1小时40分虽短为40分钟。
2)无需在多台机器搭建集群、安装服务器节点程序以及维护,降低了测试环境的搭建和维护代价。
3)远程HADOOP测试时需要独占集群计算资源,本发明只需要占用本机计算资源,不会存在多任务争抢集群资源的情况。
4)本发明仅需要从客户端入手进行改造,具有对使用者透明的优点。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (12)
1.一种HADOOP程序测试的方法,其特征在于,该方法包括:
S1、运行待测试的HADOOP程序;
S2、如果运行到对远程HADOOP分布式文件系统HDFS的SHELL接口的调用,执行步骤S3;或者,如果运行到对远程分布式MAP/REDUCE计算接口的调用,则执行步骤S4;
S3、按照预设的远程命令名与本地命令名之间的映射关系,将对远程HDFS的SHELL接口的调用命令转换为对本地文件系统FS的SHELL接口的调用命令,并基于预设的路径映射规则,将对远程HDFS的SHELL接口的调用命令中的HDFS路径转换为本地FS路径;执行转换后得到的命令,获取执行结果,转至步骤S1直至待测试的HADOOP程序运行结束;
S4、基于预设的路径映射规则,将对远程MAP/REDUCE计算接口的调用涉及到的输入和输出路径从HDFS路径转换为本地FS路径,利用本地作业运行器LocalJobRunner替代作业追踪器JobTracker,进入执行路径后,执行MAP执行脚本和REDUCE执行脚本,获取执行结果,转至步骤S1直至待测试的HADOOP程序运行结束。
2.根据权利要求1所述的方法,其特征在于,所述路径映射规则为:
Localpath=Workspace+HDFSpath;
其中所述Localpath为本地FS路径,所述Workspace为从配置文件中读取的本地工作路径,所述HDFSpath为HDFS路径。
3.根据权利要求1所述的方法,其特征在于,在所述步骤S3中使用python执行所述转换后得到的命令。
4.根据权利要求1所述的方法,其特征在于,在所述步骤S4中还包括:将执行路径按照LocalExcpath=Workspace+Excpath转换为本地执行路径,所述进入的执行路径为转换后的本地执行路径;
其中,所述LocalExcpath为本地执行路径,所述Workspace为从配置文件中读取的本地工作路径,所述Excpath为原始生成的执行路径。
5.根据权利要求1所述的方法,其特征在于,执行所述MAP执行脚本和REDUCE执行脚本的过程中,如果存在对HDFS API的调用,则在so动态共享库的函数入口处,将集群路径从HDFS路径转换为本地FS路径。
6.根据权利要求1所述的方法,其特征在于,步骤S4中在将输入和输出路径从HDFS路径转换为本地FS路径之后,且利用LocalJobRunner替代JobTracker之前还包括:将执行MAP执行脚本和REDUCE执行脚本过程中使用的文件解压缩;
在执行MAP执行脚本和REDUCE执行脚本之前还包括:将解压缩的文件拷贝到本地执行路径。
7.一种HADOOP程序测试的系统,其特征在于,该系统包括:
程序获取单元,用于运行待测试的HADOOP程序;
调用判断单元,用于如果所述程序获取单元运行到对远程HADOOP分布式文件系统HDFS的SHELL接口的调用,则触发SHELL接口调用单元;或者,如果运行到对远程分布式MAP/REDUCE计算接口的调用,则触发分布式计算接口调用单元;
SHELL接口调用单元,用于受到触发后,按照预设的远程命令名与本地命令名之间的映射关系,将对远程HDFS的SHELL接口的调用命令转换为对本地文件系统FS的SHELL接口的调用命令,并基于预设的路径映射规则,将对远程HDFS的SHELL接口的调用命令中的HDFS路径转换为本地FS路径;执行转换后得到的命令,获取执行结果;
分布式计算接口调用单元,用于受到触发后,基于预设的路径映射规则,将对远程MAP/REDUCE计算接口的调用涉及到的输入和输出路径从HDFS路径转换为本地FS路径,利用本地作业运行器LocalJobRunner替代作业追踪器JobTracker,获取LocalJobRunner的执行结果;
LocalJobRunner,用于进入执行路径后,执行MAP执行脚本和REDUCE执行脚本。
8.根据权利要求7所述的系统,其特征在于,所述路径映射规则为:
Localpath=Workspace+HDFSpath;
其中所述Localpath为本地FS路径,所述Workspace为从配置文件中读取的本地工作路径,所述HDFSpath为HDFS路径。
9.根据权利要求7所述的系统,其特征在于,所述SHELL接口调用单元使用python执行所述转换后得到的命令。
10.根据权利要求7所述的系统,其特征在于,分布式计算接口调用单元,还用于将执行路径按照LocalExcpath=Workspace+Excpath转换为本地执行路径,所述LocalJobRunner进入的执行路径为转换后的本地执行路径;
其中,所述LocalExcpath为本地执行路径,所述Workspace为从配置文件中读取的本地工作路径,所述Excpath为原始生成的执行路径。
11.根据权利要求7所述的系统,其特征在于,所述LocalJobRunner在执行所述MAP执行脚本和REDUCE执行脚本的过程中,如果存在对HDFS API的调用,则在so动态共享库的函数入口处,将集群路径从HDFS路径转换为本地FS路径。
12.根据权利要求7所述的系统,其特征在于,所述分布式计算接口调用单元在将输入和输出路径从HDFS路径转换为本地FS路径之后,且利用LocalJobRunner替代JobTracker之前,还用于将执行MAP执行脚本和REDUCE执行脚本过程中使用的文件解压缩;在所述LocalJobRunner执行MAP执行脚本和REDUCE执行脚本之前将解压缩的文件拷贝到本地执行路径。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210328786.0A CN103678098B (zh) | 2012-09-06 | 2012-09-06 | 一种hadoop程序测试的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210328786.0A CN103678098B (zh) | 2012-09-06 | 2012-09-06 | 一种hadoop程序测试的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103678098A true CN103678098A (zh) | 2014-03-26 |
CN103678098B CN103678098B (zh) | 2017-12-19 |
Family
ID=50315739
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210328786.0A Active CN103678098B (zh) | 2012-09-06 | 2012-09-06 | 一种hadoop程序测试的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103678098B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461721A (zh) * | 2014-12-11 | 2015-03-25 | 北京国双科技有限公司 | 工作流的调用方法和装置 |
CN104853061A (zh) * | 2015-05-05 | 2015-08-19 | 中国人民解放军国防科学技术大学 | 一种基于Hadoop的视频处理方法及系统 |
CN105302717A (zh) * | 2015-09-30 | 2016-02-03 | 浪潮集团有限公司 | 一种大数据平台的检测方法及装置 |
CN105373409A (zh) * | 2015-12-09 | 2016-03-02 | 上海斐讯数据通信技术有限公司 | 基于Hadoop的测试用例分布式测试方法及系统 |
CN107368300A (zh) * | 2017-06-26 | 2017-11-21 | 北京天元创新科技有限公司 | 一种基于MapReduce的数据汇总系统及方法 |
CN107463483A (zh) * | 2017-07-31 | 2017-12-12 | 上海斐讯数据通信技术有限公司 | 一种海量移动终端在线量统计方法和装置 |
WO2018126964A1 (zh) * | 2017-01-04 | 2018-07-12 | 中兴通讯股份有限公司 | 任务执行方法、装置和服务器 |
CN109213514A (zh) * | 2017-07-01 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | Jenkins软件的维护方法、存储介质、电子设备及系统 |
CN110874321A (zh) * | 2018-09-04 | 2020-03-10 | 北京优酷科技有限公司 | 测试接口的远程调用方法、调用封装引擎及远程代理引擎 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100306286A1 (en) * | 2009-03-05 | 2010-12-02 | Chi-Hsien Chiu | Distributed steam processing |
US20120182891A1 (en) * | 2011-01-19 | 2012-07-19 | Youngseok Lee | Packet analysis system and method using hadoop based parallel computation |
-
2012
- 2012-09-06 CN CN201210328786.0A patent/CN103678098B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100306286A1 (en) * | 2009-03-05 | 2010-12-02 | Chi-Hsien Chiu | Distributed steam processing |
US20120182891A1 (en) * | 2011-01-19 | 2012-07-19 | Youngseok Lee | Packet analysis system and method using hadoop based parallel computation |
Non-Patent Citations (3)
Title |
---|
QIUHONG LI等: ""LI-MR: A Local Iteration Map/Reduce Model and Its Application to MineCommunity Structure in Large-scale Networks"", 《2011 11TH IEEE INTERNATIONAL CONFERENCE ON DATA MINING WORKSHOPS》 * |
TOM WHITE: "《Hadoop权威指南(第2版)》", 31 July 2011 * |
郝树魁: ""Hadoop HDFS和MapReduce架构浅析"", 《邮电设计技术》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461721A (zh) * | 2014-12-11 | 2015-03-25 | 北京国双科技有限公司 | 工作流的调用方法和装置 |
CN104461721B (zh) * | 2014-12-11 | 2017-11-14 | 北京国双科技有限公司 | 工作流的调用方法和装置 |
CN104853061A (zh) * | 2015-05-05 | 2015-08-19 | 中国人民解放军国防科学技术大学 | 一种基于Hadoop的视频处理方法及系统 |
CN104853061B (zh) * | 2015-05-05 | 2016-06-01 | 中国人民解放军国防科学技术大学 | 一种基于Hadoop的视频处理方法及系统 |
CN105302717A (zh) * | 2015-09-30 | 2016-02-03 | 浪潮集团有限公司 | 一种大数据平台的检测方法及装置 |
CN105373409A (zh) * | 2015-12-09 | 2016-03-02 | 上海斐讯数据通信技术有限公司 | 基于Hadoop的测试用例分布式测试方法及系统 |
CN105373409B (zh) * | 2015-12-09 | 2018-09-28 | 上海斐讯数据通信技术有限公司 | 基于Hadoop的测试用例分布式测试方法及系统 |
WO2018126964A1 (zh) * | 2017-01-04 | 2018-07-12 | 中兴通讯股份有限公司 | 任务执行方法、装置和服务器 |
CN108280023A (zh) * | 2017-01-04 | 2018-07-13 | 中兴通讯股份有限公司 | 任务执行方法、装置和服务器 |
CN108280023B (zh) * | 2017-01-04 | 2022-11-01 | 深圳市中兴通讯技术服务有限责任公司 | 任务执行方法、装置和服务器 |
CN107368300A (zh) * | 2017-06-26 | 2017-11-21 | 北京天元创新科技有限公司 | 一种基于MapReduce的数据汇总系统及方法 |
CN107368300B (zh) * | 2017-06-26 | 2020-09-08 | 北京天元创新科技有限公司 | 一种基于MapReduce的数据汇总系统及方法 |
CN109213514A (zh) * | 2017-07-01 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | Jenkins软件的维护方法、存储介质、电子设备及系统 |
CN107463483A (zh) * | 2017-07-31 | 2017-12-12 | 上海斐讯数据通信技术有限公司 | 一种海量移动终端在线量统计方法和装置 |
CN107463483B (zh) * | 2017-07-31 | 2021-03-19 | 台州市吉吉知识产权运营有限公司 | 一种海量移动终端在线量统计方法和装置 |
CN110874321A (zh) * | 2018-09-04 | 2020-03-10 | 北京优酷科技有限公司 | 测试接口的远程调用方法、调用封装引擎及远程代理引擎 |
CN110874321B (zh) * | 2018-09-04 | 2024-04-12 | 阿里巴巴(中国)有限公司 | 测试接口的远程调用方法、调用封装引擎及远程代理引擎 |
Also Published As
Publication number | Publication date |
---|---|
CN103678098B (zh) | 2017-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103678098A (zh) | 一种hadoop程序测试的方法和系统 | |
US10795660B1 (en) | Live code updates | |
CN108920133B (zh) | 跨语言编程方法、装置、电子设备及存储介质 | |
CN110096338A (zh) | 智能合约执行方法、装置、设备及介质 | |
US10853096B2 (en) | Container-based language runtime loading an isolated method | |
US20100205604A1 (en) | Systems and methods for efficiently running multiple instances of multiple applications | |
CN102023856A (zh) | 根据用户的需求格式化输出及操作伺服端业务数据的方法 | |
US9491222B2 (en) | System and method for interoperability between flex applications and .NET applications | |
US20140157247A1 (en) | Enabling Symbol Resolution of Private Symbols in Legacy Programs and Optimizing Access to the Private Symbols | |
EP2646906A2 (en) | Map transformation in data parallel code | |
CN103927193A (zh) | Java应用程序函数迁移运行时的加载方法、服务端虚拟机 | |
JP5811088B2 (ja) | データ処理システム及びデータ処理方法 | |
US20210055941A1 (en) | Type-constrained operations for plug-in types | |
US9218139B2 (en) | Minimally disruptive virtual machine snapshots | |
CN109542464B (zh) | IoT设备脚本程序的开发部署系统、方法及存储介质 | |
CN111324395B (zh) | 调用方法、装置和计算机可读存储介质 | |
US10802855B2 (en) | Producing an internal representation of a type based on the type's source representation | |
CN117573338A (zh) | 一种资源分配方法、装置及电子设备 | |
US10848410B2 (en) | Ranking service implementations for a service interface | |
CN115328679A (zh) | 异构函数库的自动化集成方法、计算设备及其系统 | |
CN109947407B (zh) | 一种数据获取方法及装置 | |
Haja et al. | Location, proximity, affinity–the key factors in FaaS | |
CN116685946A (zh) | 在不停止应用的执行的情况下的更新的共享库的重新加载 | |
Sekigawa et al. | Web Application-Based WebAssembly Container Platform for Extreme Edge Computing | |
Yamamoto et al. | Component-based mruby platform for IoT devices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |