我在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目錄需要管理員權限才能訪問:
我嘗試了下面的可能性,但這個問題沒有解決。 (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
請人指導我解決這個問題問題。 – 2014-10-15 12:57:59
可能是類路徑權限問題...?你有沒有試過確保豬罐子在非特權用戶類路徑中,並且它們是可訪問的?我不太瞭解Pig,也沒有在Windows中運行過Hadoop,但是這個錯誤肯定似乎表明無法找到豬罐(s)。 – Wanderer 2014-10-21 19:29:59