2013-04-26 25 views
3

我有一個運行1.0.4的小型10節點hadoop羣集,我試圖讓它安裝,以便能夠從網絡上的機器提交作業不是NameNode。我有一個簡單的示例設置,我使用ToolRunner執行作業,手動構建JobConf,並使用JobClient.submitJob()提交。當我從NameNode運行它時,一切都按預期工作。遠程執行Hadoop作業時在減少階段出現異常

當我從作業提交網絡中的任何其他節點和所有地圖的任務都成功完成運行,但所有的reduce任務失敗,但以下情況除外:

org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find output/map_0.out in any of the configured local directories 
    at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathToRead(LocalDirAllocator.java:429) 
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathToRead(LocalDirAllocator.java:160) 
    at org.apache.hadoop.mapred.MapOutputFile.getInputFile(MapOutputFile.java:161) 
    at org.apache.hadoop.mapred.ReduceTask.getMapFiles(ReduceTask.java:220) 
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:398) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 
    at org.apache.hadoop.mapred.Child.main(Child.java:249) 

我認爲,這意味着,降低任務無法找到映射器的輸出。我相當肯定我只是在某處丟失了一個配置值,但我無法弄清楚哪些(我試過mapred.local.dirhadoop.tmp.dir沒有成功)。有誰知道上面的消息究竟意味着什麼以及如何解決它,或者知道一個簡單的方法來從NameNode以外的機器執行作業?

編輯:我認爲這也可能與權限有關。 hadoop用戶幾乎擁有hdfs上的所有文件,但是當我在另一臺機器上登錄時,它就是一個不同的用戶名。我已經嘗試了所有集羣中的類似this節點上更新mapred-site.xml,和包裝JobClient.submitJob()UserGroupInformation.doAs(),但我仍然得到類似的錯誤:

SEVERE: PriviledgedActionException as:hadoop via oren cause:org.apache.hadoop.ipc.RemoteException: User: oren is not allowed to impersonate hadoop 
+0

工作, 你設法解決這一問題 - 我面臨着同樣的一個?你能提供任何輸入嗎? – 2013-08-22 03:58:27

回答

0

你檢查磁盤託管本地目錄沒有空間不足?

+0

是的,我沒有用完任何磁盤上的空間。 – job 2013-04-26 22:57:41

+0

你的mapred.local.dir和hadoop.tmp.dir的路徑如何?他們是絕對還是相對路徑? – seedhead 2013-04-26 22:59:15

+0

他們都是絕對路徑。 mapred.local.dir是'/ home/hadoop/hadoop/tmp/mapred/local',而hadoop.tmp.dir是'/ home/hadoop/hadoop/tmp' – job 2013-04-29 14:34:42

0

這個屬性添加到核心的site.xml並重新啓動集羣:

<name>hadoop.proxyuser.myhttpfsuser.groups</name> 
<value>oren</value> 

另外,還要確保你已經打開的目錄權限爲「他人」爲好。

0

是的,我想我知道發生了什麼......

試圖讀取從降低作業地圖輸出時,應使用一個FQDN十歲上下的風格構建的路徑。

這就像hdfs://master:534110/user/hduser/map_0.out,也許你只是使用/map_0.out和例外是沒有用的。

HTH,

相關問題