2016-11-30 5 views
1

enter image description herehadoopのこの失敗の理由は何ですか?

reduceタスクの実行時にhadoopジョブで頻繁に発生しました。 この問題の理由のいくつかは、レデューサーが長い間コンテキストを書き込まなかったため、コードに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

私はまずアプリケーションUIを開き、減損していないマシンからアプリケーションログをチェックします。彼らはいくつかの手がかりを含めることができます – AdamSkywalker

答えて

3

タスクが完了するまでに600秒以上かかります。

Apacheのマニュアルpageから、詳細を見つけることができます。

mapreduce.task.timeout

600000(ミリ秒 s内のデフォルト値)

ミリ秒数、それは入力を読み取りでもない場合、タスクが終了する前に、出力を書き込みそのステータス文字列も更新しません。値0はタイムアウトを無効にします。

可能なオプション:

  1. mapred-site.xmlのの中では600秒でパラメータmapreduce.task.timeoutため

    OR

  2. 増加タイムアウトをタスクを完了するためにアプリケーションを微調整

+0

ありがとう!それは非常に役立ちます –

関連する問題