Тестовый пример MRUnit для драйвера

Я написал MRunit со следующим кодом:

          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" });

Но когда я выполняю тестовый пример Junit из eclipse. Я получаю исключение, как показано ниже: -

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$10.run(Job.java:1268)
at org.apache.hadoop.mapreduce.Job$10.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)

Я не уверен, что вызывает эту ошибку, поскольку я просто намерен провести модульное тестирование своего класса:

public class VisitedItemFlattenDriver  extends Configured implements Tool {
...}

Я глубоко признателен, если кто-то подскажет, как устранить ошибку.


person dinesh028    schedule 26.10.2015    source источник


Ответы (1)


Я попробовал пару вариантов решения проблемы и потратил на это много часов.

Во-первых, я искал вариант и нашел, как добавить файлы 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-битной.

Ранее я использовал 32-разрядную версию JDK 6, а затем обновил ее до 64-разрядной версии JDK 6. Это не решило мою проблему. Я также пытался использовать minidfcluster для модуля MR, но это дало ту же ошибку.

Но затем я использовал 64-разрядную версию JDK 7 для своего кода, и проблема была решена, и она успешно запустилась.

** Примечание. Я использую Hadoop версии 2.2.0.

person dinesh028    schedule 29.10.2015