APP下载

一种新型的Hadoop本地化测试模型

2013-07-17王晓华

赤峰学院学报·自然科学版 2013年19期
关键词:测试工具环境变量插件

王晓华

(蚌埠医学院 科研处,安徽 蚌埠 233000)

一种新型的Hadoop本地化测试模型

王晓华

(蚌埠医学院 科研处,安徽 蚌埠 233000)

MapReduce是Hadoop核心处理程序.但是目前软件界更多是对MapReduce程序的编写,而对其测试方法还是空白,依旧使用的是基于JUnit为基础的测试插件.而JUnit是为了软件进行单机测试而诞生的一种测试插件,其对分布式测试的支持性很差.同时由于其天生的狭隘性,对大规模数据进行测试根本是不可能进行.本文利用Hadoop自带的抽象类,通过欺骗注入,给Hadoop设计一种通过营造一个运行在单机上的伪集群环境模型,从而使得MapReduce在不借助外部其他插件支持的情况下可以独立完成全部运行并将结果输出在本地磁盘空间.

分布式计算;hadoop;MapReduce;软件测试

1 引言

面对现代社会数据信息高速增长,数据分析与设计人员迫切地希望一种能够对大规模数据进行分析与处理的系统.但是由于往往数据的日常产生是以G B为单位,因此对于其分析进而计算并不是一件非常容易的事.而Hadoop为了解决单机对大数据分析计算的不能够有效及时处理这一缺陷而诞生的.

Hadoop是一种新兴的分布式计算系统框架,由Apache基金会开发.其主要是为了解决大规模分布式计算模式下的,让使用者不必要知道底层运算的细节的情况下,充分利用集群计算机的强大处理能力进行数据的存储与计算. Hadoop的构成主要是由一个底层分布式文件存储系统以及运行在存储系统之上的一个MapReduce处理程序构成.其中H D F S主要是负责在集群的计算机存储硬盘上重新构建出一个基于Java虚拟机的一种集群化存储结构,把集群中所有可利用磁盘空间组成一个巨大的伪磁盘空间供Hadoop使用.而MapReduce在此之上则通过充分调用集群内各个计算机所拥有的的独立资源进行分布式并行数据处理,为使用者提供了充足的可使用资源,并且由于其架构本身就是低耦合性为特性,因此可以很容易的进行数据扩展.

随着“云计算”这一新兴数据处理模型的日益推广,Hadoop作为实现“云计算”的底层实现框架也越来越深入人心.随之而来的就是Hadoop核心处理程序MapReduce的大规模应用.但是MapReduce程序设计广泛推广应用的基础上,存在一个非常严重的问题,就是目前缺乏对MapReduce有效的测试工具.而且对测试工具的模型设计基本上是空白,因此本文提出了一种基于本地化的测试可用的MapReduce测试模型.

2 MapReduce测试存在的问题

Hadoop是使用Java语言所搭建的大规模数据处理框架,因此对其核心处理程序的设计我们首选是Java程序测试框架.MRUnit可以较好的为我们解决极小量数据处理的测试.其依托于JUnit来对程序进行测试运算,通过断言计算值与期望值之间的一致性为我们提供特定值的测试结果.此种结果在一定程度上是准确且可信的,但是对于数据进行分析,特别是大规模数据分析,如果测试数据过于狭隘,往往并不能得到有效可信的结果.而MRUnit则是继承自JUnit测试插件.JUnit的使用本身是为了单机程序测试而创造的测试工具,因此MRUnit在诞生之处就先天具有狭隘性,并不能为集群环境的数据测试提供支持.

而将未经测试的MapReduce程序上传到集群环境中进行测试本身就是一种极大的冒险.而且相对本地环境的测试,其配置更为复杂,影响因素较多,无法能够简单的实现对,MapReduce程序进行测试.同时目前软件界还没有专门文献证实或关于直接在云计算集群系统中运行MapReduce的测试案例及测试结果出现.

为了解决MapReduce程序使用MRUnit进行测试无法对大规模数据进行测试分析,同时又不推荐直接向程序上传到集群环境中进行测试的问题,我们自己设计了一种的基于本地磁盘系统的在单机上进行文件测试方法用以解决难以对MapReduce进行测试的难题.

3 测试分析

Java程序是一种面向对象的程序设计语言,其设计普遍思路是将实物抽象成一个抽象的数据模型来进行操纵.而抽象的数据模型在Java程序设计中以类的形式表现.而Hadoop的分布式框架是由Java语言构成.因此,我们在对分布式框架进行测试的时候,应该遵循Java语言这一特性,更多的使用类进行我们需要的测试.而对于测试类的来历我们偏向于使用Hadoop自带的原生类.因为相对于使用外部测试框架或辅助文件包来说,使用原生类能为我们带来更具有稳定性及健壮性的支持.在这里我们选择使用的是Configured类.通过分析Hadoop的源代码我们可以知道,Configured是继承自Configurable接口的一个实现类,主要作用是对Hadoop设置一个可供运行的环境变量.这里的环境变量指的是基于Java虚拟机环境系统下的一种Java运行环境.我们知道Java本身具有平台无关性的特点.而对于Hadoop来说,其本身的运行环境也是一种基于Java虚拟机的集群式分布环境,此种环境也是Java语言构建的运行环境,因此可以通过获得本地的运行环境从而修改和替换分布式的运行环境,因此如果想在本地磁盘环境下进行MapReduce程序测试的话,那么获得本地环境设置是我们需要解决的重点问题.

对于环境变量的获取,需要获取当前运行程序的环境变量并进行欺骗性注入实现一种对于MapReduce验证的欺骗.为了解决此目的,我们选择了Tool接口.

Tool接口本身实现了两个方法,分别是getConf与set-Conf.其作用是获取当前运行环境的一个环境变量.在这里我们可以通过获取当前的环境变量注入到MapReduce中,实验结果证明是可行的.

4 实验环境

词频统计是测试Hadoop运算性能的既简单又有效的程序之一,主要是统计文本文件中每个单词出现的次数.具体的实验运行环境如下:

CPU:XEON5620

内存/主硬盘:4GB/500G7200 r/min

操作系统:Ubuntu11.10

测试工具:Eclipse 3.4.1

测试数据:hadoop0.20.2自带单词统计样本

5 代码设计

本测试中主要是为了对MapReduce的本地化运行模型进行测试,因此在MapReduce的运算模型选择上,更多采取了一些Hadoop自带的演示程序进行测试,但是由于新老A P I的交接原因,重写了所有MapReduce代码.

对于MapReduce来说,其自定义的Mapper与Reduce设定是重中之重.我们重写了经典的字母计数的MapReduce程序,部分代码如下所示:

这里分别使用了新API进行Map与Reduce的设置,这里不做过多程序,而对于主要环境获取来说,需要使用自定义的含有main方法的程序对MapReduce进行驱动执行.下面是程序部分模型建立代码:

从代码片段我们可以看到,对于传统的Configuration的对象获取,由过去产生对当前环境变量的获取转为获取程序所执行环境变量,并根据获取的环境变量注入Hadoop默认的执行驱动中,因此可以通过欺骗的形式运行MapReduce运行环境.

6 运行过程与输出验证

对于测试的运行我们使用的是Eclipse,只需使用传统的软件运行方式即可,而无需使用专门针对软件测试方式的JUnit模式进行运行、对于结果的验证,因为我们在本地磁盘上模拟Hadoop环境进行处理,生成的结果文件与集群环境下HDFS相类似,最终在本地磁盘空间的制定路径上生成名为“part-r-00000”的内容.part-r-00000并不带有后缀名,究其原因是因为HDFS默认对此类文件的支持.为了解决此问题,我们使用了“NOTEPAD++”这一开源免费的文本处理工具,可以直接将结果转码后显示.

7 测试结论

对于使用此新型本地化检测模型我们可以得到三个显著结论:

(1)Hadoop本身的运行环境是构建在Java的虚拟机环境之上,可以通过修改Configuration获取的路径从而欺骗Hadoop使用不同的虚拟机环境.

(2)Hadoop的存储底层是实现是使用HDFS系统,此系统也遵循一般的磁盘存储原理而仅仅是通过修改链接传输协议而构成的一个伪集群环境.HDFS的底层实现仍旧是一般的磁盘系统.

(3)MapReduce虽然是运行在Hadoop集群环境之上的数据处理程序,但是仍旧可以通过伪造环境变量的方式使之运行在本地计算机系统之上,而无需对其进行专门配置,这点为学习或者测试MapReduce的程序设计人员提供了一条非常好的测试思路.

〔1〕White T.Hadoop:the definitiveguide[M].南京:东南大学出版社,2011.203-204.

〔2〕Apache.Single node setup[EB/OL].(2012-02-14)[2012-05 -10].http//hadoop.apache.org/common/docs/r1.0.1/ single_node_setup.html.

〔3〕Borthakur D.HDFS architectureguide[EB/OL].(2011-04-12[2012-05-10]http://hadoop.apache.org/hdfs/docs/ current/hdfs_design.Html.

〔4〕BORTHAKUR D,GRAY J,SARMA J S,et al.A-pache hadoopgoes realtime at facebook[C]//Proc of International Conference on Management of Data New York:ACM Press,2011:1071-1080.

〔5〕李建江.MapReduce并行编程模型研究综述[J].电子学报,2011(11):2636-2641.

TP309

A

1673-260 X(2013)10-0020-02

安徽省科技创新基金资助(20120752Z);蚌埠医学院科研基金资助(BY1024)

猜你喜欢

测试工具环境变量插件
从桌面右键菜单调用环境变量选项
自编插件完善App Inventor与乐高机器人通信
彻底弄懂Windows 10环境变量
Http并发连接测试工具
手车式真空断路器回路电阻测试电流线接头研究
基于jQUerY的自定义插件开发
基于三阶段DEA—Malmquist模型的中国省域城镇化效率测度及其收敛分析
MapWindowGIS插件机制及应用
福禄克推出先进的连接式测试工具系统
基于Revit MEP的插件制作探讨