2012-02-16 10 views
3

私は、ログファイルを処理し、いくつかの統計を報告するHadoopジョブを持っています。このジョブはファイルハンドルが不足しているため、仕事の途中で死亡しました。私はファイルハンドルの問題を修正し、 "kill"ジョブを再起動できるかどうか疑問に思っています。「中断した」Hadoopジョブを中断した場所から再開することは可能ですか?

+0

あなたは、仕事全体または特定のノードのタスクの開始を話していますか?いくつかのノードが完了している場合は、出力があり、完了しなかったタスクの補完で実行する必要があります。しかし実際には、私はすべてを再実行する方が良いと思う。もし問題が1つあれば、他にもある可能性があり、回収可能なものを見つけるためにたくさんの粉砕物を掘り起こすことはめったに価値がありません。 – Iterator

+0

もしあなたがそれが自動的に起こりたければ、それのために仕事を設計しなければならないようです。それはある場合には価値があるかもしれません。あなたがそれを元に戻すことができ、それがわかるかもしれないなら、ああ、私はすでにその作品を完成しています、そしてそれを飛ばすことができます。 –

+0

私は全体の仕事について考えている、それは約3分の1だったと私はその仕事を失うことを望んでいた。私は未処理のデータを抽出しようとしていることを知っていますが、その時点でそのジョブを再実行する方が簡単かもしれません。何よりも、私は殺された仕事を再開させる機能を見落とさないようにしたいと思っていました。 – Miles

答えて

4

このように、良い方法はありません。ジョブが一旦終了すると、そのジョブを再インスタンス化し、最初の失敗の直前に処理を再開することはできません。これには本当に良い理由があるかもしれませんが、私はこの問題に話す資格はありません。

私自身のケースでは、大量のログファイルを処理して、これらのファイルをインデックスにロードしていました。さらに、これらのファイルの内容に関するレポートを同時に作成していました。索引付け側での失敗に対する耐性を高めるために(副作用はありませんが、これはHadoopとはまったく関係ありません)、代わりに多くの小規模なジョブを作成するように変更しました。これらのジョブのそれぞれは、これらのログファイル。これらのジョブの1つが終了すると、処理されたログファイルの名前が変更され、再度処理されません。各ジョブは、実行前に前のジョブが完了するのを待ちます。

  • Chaining multiple MapReduce jobs in Hadoop
  • つのジョブが失敗した

      、後続のジョブのすべてがすぐにその後失敗します。問題が何であっても簡単に修正し、私の仕事を再提出すると、おおよそ、中断したところで処理が行われます。障害発生時にジョブが99%完了した最悪のシナリオでは、その1つのジョブが誤って無駄に再処理されます。

    関連する問題