在Windows上运行没有Admin权限的Hadoop MR作业

时间:2014-10-10 04:24:34

标签: java windows hadoop mapreduce hadoop2

我在Windows中安装了Hadoop 2.3.0,并且能够成功执行MR作业。但是当我尝试以正常权限(没有管理员权限)执行MR作业时,意味着作业获取失败并出现以下异常。在这里,我尝试使用Pig Script样本。

    2014-10-15 12:02:32,822 WARN [main] org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:kaveen (auth:SIMPLE) cause:java.io.IOException: Split class org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit not found
2014-10-15 12:02:32,823 WARN [main] org.apache.hadoop.mapred.YarnChild: Exception running child : java.io.IOException: Split class org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit not found
    at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:362)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:403)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)
Caused by: java.lang.ClassNotFoundException: Class org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit not found
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1794)
    at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:360)
    ... 7 more

2014-10-15 12:02:32,827 INFO [main] org.apache.hadoop.mapred.Task: Runnning cleanup for the task
2014-10-15 12:02:32,827 WARN [main] org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter: Output Path is null in abortTask()

更新

我能够深入研究这个问题,发现在“MapTask.getSplitDetails(MapTask.java:363)”方法的下一行引发了异常。

private <T> T getSplitDetails(Path file, long offset) 
  throws IOException {
   FileSystem fs = file.getFileSystem(conf);
   FSDataInputStream inFile = fs.open(file);
   inFile.seek(offset);
   String className = StringInterner.weakIntern(Text.readString(inFile));
   Class<T> cls;
   try {
     cls = (Class<T>) conf.getClassByName(className);
   } catch (ClassNotFoundException ce) {
     IOException wrap = new IOException("Split class " + className + 
                                         " not found");
     wrap.initCause(ce);

     throw wrap;
   }

但如果我使用admin权限启动“NodeManager”意味着不会发生上述异常。当我以正常权限启动“NodeManager”时,我不知道为什么MR作业不起作用。

如果有人知道上述问题的原因和解决方案。请尽快指导我。

1 个答案:

答案 0 :(得分:1)

您可以使用以下属性

更改hadoop的tmp目录位置的位置
<property>
   <name>hadoop.tmp.dir</name>
   <value>/other/tmp</value>
</property>

您的默认tmp位置是c:\ tmp,这需要管理员权限才能访问。将位置更改为任何子目录,并尝试没有管理员权限的MR作业。

希望它有所帮助。