Driver 的 MRUnit 测试用例
MRUnit test case for Driver
我用以下代码编写了 MUnit:
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "file:///");
conf.set("fs.default.name", "file:///");
conf.set("mapreduce.framework.name", "local");
conf.setInt("mapreduce.task.io.sort.mb", 1);
Path input = new Path("input/ncdc/micro");
Path output = new Path("output");
FileSystem fs = FileSystem.getLocal(conf);
fs.delete(output, true); // delete old output
VisitedItemFlattenDriver driver = new VisitedItemFlattenDriver();
driver.setConf(conf);
int exitCode = driver.run(new String[] {
input.toString(), output.toString(), "false" });
但是当我从eclipse 执行Junit 测试用例时。我收到如下异常:-
java.lang.NullPointerException
at java.lang.ProcessBuilder.start(ProcessBuilder.java:441)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:404)
at org.apache.hadoop.util.Shell.run(Shell.java:379)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:678)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:661)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:277)
at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:344)
at org.apache.hadoop.mapreduce.Job.run(Job.java:1268)
at org.apache.hadoop.mapreduce.Job.run(Job.java:1265)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286)
at biz.ds.www.preprocess.visiteditem.VisitedItemFlattenDriver.run(VisitedItemFlattenDriver.java:69)
我不确定是什么导致了这个错误,因为我只是想对我的 class:
进行单元测试
public class VisitedItemFlattenDriver extends Configured implements Tool {
...}
非常感谢有人指导如何解决错误。
我尝试了几个选项来解决问题并花了很多时间..
首先,我搜索了一个选项,发现可以将 winutils.exe 和 .dll 文件添加到 hadoop/bin。我尝试了这个步骤,还设置了 HADOOP_HOME 环境变量。
上面提到的错误以某种方式解决了,然后我陷入了另一个错误,如下所示:
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
很明显,错误是由于某些兼容性问题造成的。但是后来搜索了一下,发现把JRE从32位升级到64位就可以解决了。
之前我使用的是 JDK 6 32 位,然后我将其更新为 JDK 6 64 位。它没有解决我的问题。我还尝试将 minidfscluster 用于 MR 单元,但给出了同样的错误。
但后来我的代码使用了 JDK 7 64 位,问题得到解决,运行 成功。
** 注意:我使用的是 Hadoop 版本 2.2.0
我用以下代码编写了 MUnit:
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "file:///");
conf.set("fs.default.name", "file:///");
conf.set("mapreduce.framework.name", "local");
conf.setInt("mapreduce.task.io.sort.mb", 1);
Path input = new Path("input/ncdc/micro");
Path output = new Path("output");
FileSystem fs = FileSystem.getLocal(conf);
fs.delete(output, true); // delete old output
VisitedItemFlattenDriver driver = new VisitedItemFlattenDriver();
driver.setConf(conf);
int exitCode = driver.run(new String[] {
input.toString(), output.toString(), "false" });
但是当我从eclipse 执行Junit 测试用例时。我收到如下异常:-
java.lang.NullPointerException
at java.lang.ProcessBuilder.start(ProcessBuilder.java:441)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:404)
at org.apache.hadoop.util.Shell.run(Shell.java:379)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:678)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:661)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:277)
at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:344)
at org.apache.hadoop.mapreduce.Job.run(Job.java:1268)
at org.apache.hadoop.mapreduce.Job.run(Job.java:1265)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286)
at biz.ds.www.preprocess.visiteditem.VisitedItemFlattenDriver.run(VisitedItemFlattenDriver.java:69)
我不确定是什么导致了这个错误,因为我只是想对我的 class:
进行单元测试public class VisitedItemFlattenDriver extends Configured implements Tool {
...}
非常感谢有人指导如何解决错误。
我尝试了几个选项来解决问题并花了很多时间..
首先,我搜索了一个选项,发现可以将 winutils.exe 和 .dll 文件添加到 hadoop/bin。我尝试了这个步骤,还设置了 HADOOP_HOME 环境变量。
上面提到的错误以某种方式解决了,然后我陷入了另一个错误,如下所示:
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
很明显,错误是由于某些兼容性问题造成的。但是后来搜索了一下,发现把JRE从32位升级到64位就可以解决了。
之前我使用的是 JDK 6 32 位,然后我将其更新为 JDK 6 64 位。它没有解决我的问题。我还尝试将 minidfscluster 用于 MR 单元,但给出了同样的错误。
但后来我的代码使用了 JDK 7 64 位,问题得到解决,运行 成功。
** 注意:我使用的是 Hadoop 版本 2.2.0