2014-10-10 79 views
2

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

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

但是如果我用管理员权限启动“NodeManager”意味着不会发生上述异常。我不知道为什么当我启动具有普通权限的“NodeManager”时,MR作业不起作用。

如果有人知道上述问题的原因和解决方案。请尽快指导我。 \ tmp目录需要管理员权限才能访问:

+0

我尝试了下面的可能性,但这个问题没有解决。 (1)我为“tmp”和“logs”文件夹设置了完全权限,如下所示: c:\> cacls C:\ tmp/E/T/G :F c:\> cacls C:\ Syncfusion \ BigDataSDK \ 1.1.0.8 \ SDK \ Hadoop \ logs/E/T/G :F (2)我在hdfs位置为(.staging)dircetory设置了完全权限。 (hadoop dfs -chmod -R 777 )。 (3)我也试图改变所有者和组包含全perivilege在我的情况 “Hadoop的DFS -chgrp -R管理员/” “Hadoop的DFS -chown -R /” – 2014-10-15 12:55:55

+0

请人指导我解决这个问题问题。 – 2014-10-15 12:57:59

+1

可能是类路径权限问题...?你有没有试过确保猪罐子在非特权用户类路径中,并且它们是可访问的?我不太了解Pig,也没有在Windows中运行过Hadoop,但是这个错误肯定似乎表明无法找到猪罐(s)。 – Wanderer 2014-10-21 19:29:59

回答

1

您可以使用下面的属性

<property> 
    <name>hadoop.tmp.dir</name> 
    <value>/other/tmp</value> 
</property> 

您的默认tmp目录位置是c改变tmp目录位置的位置Hadoop的。将位置更改为任何子目录,然后尝试MR作业而无需管理员权限。

希望它有帮助。

+0

嗨@kumar,感谢您的更新。它的工作正常。你说这个问题可能是许可在'C:\ tmp'位置不可用。即使我给了'C:\ tmp'的文件夹和子文件夹的完全许可,但它不起作用。你会详细说明原因吗? – 2015-05-26 11:38:26

+0

我的解决方案是解决问题的最简单方法。您可以为/ tmp目录的所有人授予完全权限。然后它将工作而不更改默认位置。 – Kumar 2015-05-26 12:05:57

相关问题