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

我在窗口中安装了Hadoop 2.3.0,能够成功执行MR作业。 但是,当我试图以正常的权限(没有pipe理员权限)执行MR作业时,意味着作业失败,出现以下exception。 在这里,我试着用猪脚本样本。

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)”方法的下面一行中引发的exception。

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

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

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

Solutions Collecting From Web of "在Windows上运行没有Admin权限的Hadoop MR作业"

您可以使用下面的属性更改hadoop的tmp目录位置

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

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

希望能帮助到你。