我已经在Windows中安装了Hadoop 2.3.0并且能够成功执行MR作业。但是,当我尝试以普通权限(无管理员权限)执行 MR 作业时,意味着作业获取失败并出现以下异常。在这里我尝试使用 Pig 脚本示例。
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()
Update:
我能够深入研究问题,发现在方法“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 作业不起作用。
如果有人知道上述问题的原因和解决方案。请尽快指导我。
您可以使用以下属性更改 hadoop 的 tmp 目录位置
<property>
<name>hadoop.tmp.dir</name>
<value>/other/tmp</value>
</property>
您的默认 tmp 位置是 c:\tmp,需要管理员权限才能访问。将位置更改为任意子目录,然后在没有管理员权限的情况下尝试 MR 作业。
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)