2017-09-07 10 views
1

私はhadoopでタイムアウトの問題に遭い、私の仕事は殺されます。 close()メソッドでは大量のクリーンアップ作業があるので、クリーンアップを行う際にcloseメソッドの進捗状況を更新する必要があります。close()メソッドのジョブステータス/進捗状況を報告してください

クリーンアップ作業の量に合わせてスケーラブルではないため、タイムアウトの増加はこの場合には適していません。

私が見ているレガシージョブは古いAPIを使用していますが、進行状況を更新するために使用できるreduce()メソッドのレポータオブジェクトがあります。しかし、close()メソッドにReporterはありません。だから回避策はありますか?

答えて

0

Mapper.Contextを試してみてください。

Hadoopはこの興味深いメソッドPublic void Progress()を含むPrograssableインターフェイスを提供します。 Contextクラスは、このインターフェイスを実装しているので、任意のマッパーや減速を呼び出すことができます。

context.progress() 

は、それが生きていると処理を継続し表示するように。 「mapred-site.xmlの」に

<property> 
    <name>mapreduce.task.timeout</name> 
    <value>2000000</value> 
</property> 

:あなたはそれが良いオプションではありません確信しているので、最後の手段として


は、あなたがその構成プロパティを増加させる可能性があります。

かは、あなたのコードでこれを行う:あなたのケースのために、

Configuration conf = new Configuration(); 
long milliSeconds = 2000 * 60 * 60; 
conf.setLong("mapreduce.task.timeout", milliSeconds); 

高いこのプロパティの値は、より良いです。デフォルト値は600000です。

+0

古いAPIの同様のクラスはReporterと呼ばれます。しかし、それは減速機のclose()メソッドに渡されません。レポーターは、生涯に減速機のためのシングルトンですか?はいの場合は、それをオブジェクトレベルのフィールドに割り当てて、後で進捗状況を報告するために使用できますか? – StarPinkER

関連する問題