2016-11-30 91 views
1

enter image description here這個hadoop失敗的原因是什麼?

執行reduce任務時,經常發生在我的hadoop作業中。 這個問題的一些原因可能是reducer沒有長時間編寫上下文,所以你需要在你的代碼中添加context.progress()。但是在我的reduce函數中,上下文經常被寫入。這是我減少功能:

public void reduce(Text key, Iterable<Text> values, Context context) throws 
     IOException,InterruptedException{ 
      Text s=new Text(); 
      Text exist=new Text("e"); 
      ArrayList<String> T=new ArrayList<String>(); 
      for(Text val:values){ 
       String value=val.toString(); 
       T.add(value); 
       s.set(key.toString()+"-"+value); 
       context.write(s,exist); 
      } 
      Text need=new Text("n"); 
      for(int i=0;i<T.size();++i){ 
       String a=T.get(i); 
       for(int j=i+1;j<T.size();++j){ 
        String b=T.get(j); 
        int f=a.compareTo(b); 
        if(f<0){ 
         s.set(a+"-"+b); 
         context.write(s,need); 
        } 
        if(f>0){ 
         s.set(b+"-"+a); 
         context.write(s,need); 
        } 
       } 
      } 
     } 

你可以看到上下文中的循環頻繁寫入。 這種失敗的原因是什麼?我該如何處理它?

+0

沒有工作正確完成或因爲這些故障而中斷? – AdamSkywalker

+0

它仍然運行到100%,並以失敗告終。@ AdamSkywalker –

+0

我首先打開applicaton UI並檢查失敗的reducer中的應用程序日誌。他們可以包含一些線索 – AdamSkywalker

回答

3

您的任務需要600多秒才能完成。

從Apache文檔page,你可以找到更多的細節。

mapreduce.task.timeout

600000(在毫秒小號默認值)

如果它既不讀取的輸入毫秒的任務之前的數目將被終止,寫入一個輸出,也不更新其狀態字符串。值爲0會禁用超時。

可能的選項:

  1. 微調您的應用程序來完成任務,在600秒

    OR

  2. 增加超時參數mapreduce.task.timeoutmapred-site.xml中

+0

非常感謝!它非常有幫助 –