2012-03-15 59 views
0

我試圖運行映射縮減工作。我設置輸出路徑:/本地/ mypath中/ mr_reuslt但得到:關於Hadoop的mrjob不能MKDIR

SEVERE: Mkdirs failed to create: /local/mypath/mr_reuslt/_temporary 

但我相信從我的賬戶,我可以做mkdir to hadoop。 如果我手動執行hadoop fs -mkdir/local/mypath/mr_reuslt/_temporary,它會創建文件夾。 沒有其他與之相關的異常消息。 我真的不認爲是一個權限問題。當我明確地調用mk作業中的創建文件時,它會被創建。 任何人都可以給我一些關於這裏發生的事情的建議嗎? 對不起,我不得不提,我試圖從我的java代碼調用map reduce作業。 我打電話給:

ToolRunner.run(new Validation(), new String[]{...,...,...}); 

從我的java代碼。 這是問題嗎? 請問有沒有什麼好的方法可以從普通的java代碼中調用mapreduce作業?

這裏是我的測試代碼:

for(final ExecJob e: jobSet){ 
     Thread t = new Thread(new Runnable(){ 
      @Override 
      public void run() { 
       String inputPath = pathsForValidation.get(e); 
       String outputPath = inputPath+validationExten; 
       logger.log(LogLevel.INFO,"Should validate data in "+inputPath+", validation result in "+outputPath); 
       try { 
        ToolRunner.run(new Validation(), new String[]{TransferToHadoopUtilities.hdfsPath,inputPath,outputPath}); 
       } catch (Exception e1) { 
        logger.log(LogLevel.ERROR,"Thread encountered exception:"); 
        TransferToHadoopUtilities.logger.log(e1); 
       }finally{ 
        Thread.currentThread().interrupt(); 
       } 
      } 

     }); 
     t.start(); 
    } 

我剛開始在我的java程序的代碼。不做哈流罐......

但作爲一個Java應用程序啓動。 謝謝!

+0

什麼用戶+組正在運行? – 2012-03-15 17:40:13

+0

我不在adm組中,但是我有很高的權限從我的帳戶製作任何目錄或刪除任何內容。謝謝:) – 2012-03-15 17:46:41

+0

您可能擁有足夠的權限,但Hadoop運行的用戶可能不是 – 2012-03-15 18:22:06

回答

0

Hadoop可能沒有適當的權限來創建該輸出目錄。以Hadoop用戶以外的系統用戶身份運行作業時會發生這種情況。

我想簡單的出路是在運行作業之前手動創建輸出目錄。

+0

我試圖手動創建輸出,它在_temporary創建時仍然失敗。 – 2012-03-15 19:53:28

+0

你可以發佈你的代碼嗎? – Chaos 2012-03-15 20:05:40

+0

當然,謝謝,我要編輯我的帖子:)〜 – 2012-03-15 22:21:47

0

這很可能是因爲用戶Hadoop作業正在運行,因爲沒有足夠的權限。

但是,我要麼改變輸出目錄權限,要麼作爲用戶運行作業,而不是在每次作業之前手動執行任何操作。

0

這可能是因爲該目錄已經存在。取決於你想要完成的事情,你可能會爲目錄添加時間戳。順便說一句,確保你清理。