2015-10-26 2 views
0

я написал 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 случай из затмения. Я получаю исключение, как показано ниже: -

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 { 
...} 

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

ответ

0

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

Во-первых, я искал вариант и нашел, чтобы добавить winutils.exe и .dll файлы Hadoop/бен , Я попробовал шаг, а также установил переменную среды 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

Смежные вопросы