2014-10-10 82 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

相關問題