大数据分析之Hadoop现有测试框架探幽


 
在新的测试框架中,测试代码被放置在:


中,而跟Framework相关的代码都位于org.apache.hadoop.test.system中,而HDFS和MR相关的Herriot测试代码,则分别位于org.apache.hadoop.hdfs.test.system, org.apache.hadoop.mapreduce.test.system中。

Example

这里以Herriot系统中真实的case src/test/system/test/org/apache/hadoop/mapred/TestCluster.java为例。
 
该用例中,从@BeforeClass开始,该before会创建一个cluster proxy的instance(在这里为一个mapreduce cluster),这个proxy能够让程序直接访问MapReduce的daemons进程(JT和TTs)。程序的第二行创建了mapreduce所有的daemon proxies,并通过Herriot library API让这些daemons进程都对测试程序可用。Herriot会保证测试环境是完全clean并且所有的内部daemons的状态都已经reset。不仅如此,所有daemons进程的log也都会被保存下来。这些log非常有用,可以让开发和测试人员方便定位问题。@BeforeClass会确保所有的testcase在运行时,只有一个cluster proxy 的instance在服务。以避免冲突。

在测试中,要提交一个job到集群,也是非常简单的,如下:

新的JT API调用submitAndVerifyJob(Configuration conf)来检查提交的job是否已经成功完成。并会跟踪job运行的details(比如运行了多少map多少reduce),监控job的progress和成功与否,并执行相应的cleanup。如果任意一个过程中发生异常,测试框架将会抛出异常。
 
下列代码演示了如何修改一个集群的配置并将之重启的过程。随后又使用之前的配置再次进行重启。

1.1 测试用例执行环境

执行测试用例前,测试的client端需要满足如下条件:

  • l能够访问某个已有的支持Herriot的hadoop集群
  • l相应的hadoop配置文件目录(通常在$HADOOP_CONF_DIR下)

运行testcase的客户端并不需要hadoop的binary包,Herriot test是使用source code直接通过运行如下命令来执行。
 
ant test-system -Dhadoop.conf.dir.deployed=${HADOOP_CONF_DIR}
这样运行test-system,会将有的testcase全部执行一遍。如果只想运行其中某一个testcase,只需要运行时加上选项 –Dtestcase=testname 就可以了。
 
当test执行完以后,执行结果和日志都可以从 build-fi/system/test目录下找到。
 
通常,test client都是在cluster的gateway上,但执行test的client同样也可以是一台slave,笔记本等其他有权访问cluster的机器。

VIA:阿里集团数据平台

更多详细信息,请您微信关注“计算网”公众号: