CN103678098A - 一种hadoop程序测试的方法和系统 - Google Patents

一种hadoop程序测试的方法和系统 Download PDF

Info

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
Application number
CN201210328786.0A
Other languages
English (en)
Other versions
CN103678098B (zh
Inventor
沙安澜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201210328786.0A priority Critical patent/CN103678098B/zh
Publication of CN103678098A publication Critical patent/CN103678098A/zh
Application granted granted Critical
Publication of CN103678098B publication Critical patent/CN103678098B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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程序测试的方法和系统。
【背景技术】
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
Figure BDA00002108556300061
步骤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执行脚本之前将解压缩的文件拷贝到本地执行路径。
CN201210328786.0A 2012-09-06 2012-09-06 一种hadoop程序测试的方法和系统 Active CN103678098B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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