0

Oozie コーディネーターを現在の時刻よりも多くの "反復" (頻度に関して) 前の開始時刻で開始すると、コーディネーターは、割り当てられた頻度を無視して、ワークフローを数回連続して実行することに気付きました。ただし、私にとっては、ワークフロー/アクションが特定の時点で正しい回数実行されることよりも、ワークフロー/アクションが割り当てられた頻度で実行されることが重要です。

この動作を回避する方法はありますか? 1 つの方法は明らかに、反復時間内に開始時間が正しいことを確認することです (自動的に開始時間を取得する方法はありますか?)。もう 1 つは、この動作を完全に回避するように構成し、基本的に、開始時刻と頻度を指定する必要がある次の時刻に実行することです。

4

2 に答える 2

0

「過去の」開始日による副作用を回避する明白な方法は、提出時に実際の開始日を「現在」に設定することです。

それが私のチームでのやり方です:

  • ローカル ファイル システムで、 start="%Now%"などのプレースホルダーを使用して「Coord-template.xml」を書き留めます。
  • 送信する直前に、実際の「Coordinator.xml」を生成します

    sed "s/%Now%/$(date --utc '+%FT%TZ')/" coord-template.xml > coordinator.xml

  • コーディネーター定義を HDFS にアップロードし、Oozie CLI 経由で送信します

~~~~~~~~~~~~

代替手段: 「基本的な」頻度(CRON のようなスケジューリングではない)を使用している場合は、これらの <controls> を試して、Oozie にすべての「過去の」タイムスロットの実行を作成させ、すぐに破棄させることができます。

  <throttle>1</throttle>

および/または

  <execution>LAST_ONLY</execution>

参照。Oozie 4.x リファレンス

このルールは、Coordinator が中断されてから再開された場合、または Oozie サービスが停止されてから再開された場合、または YARN が新しいジョブを非常に長い時間 (クラスターが 100% ビジーであるため) キューに入れなければならない場合にも適用されます。

于 2015-08-05T20:41:58.703 に答える
0

Oozie は最近改善されたため、現在受け入れられている回答よりも簡単な解決策があります。Oozie 4.1 の時点で、「NONE」実行が利用可能です。これにより、過去に発生した反復が多かれ少なかれスキップされます。ドキュメントのスニペットは次のとおりです。

NONE: 古い実体化がすべてスキップされることを除いて、LAST_ONLY と同様です。NONE が設定されている場合、WAITING または READY のアクションは、現在の時間がアクションの公称時間から構成された特定の分数 (許容範囲) を超えている場合にスキップされます。デフォルトでは、しきい値は 1 分です。たとえば、アクション 1 と 2 が両方とも WAITING で、現在の時刻が午後 5 時 20 分で、両方のアクションの公称時刻が午後 5 時 19 分より前であるとします。それまでに SUBMITTED (または終了状態) に移行しないと仮定すると、両方のアクションが SKIPPED になります。これを別の方法で考えると、タイムアウトを最小の時間単位である 1 分に設定するのと同じように考えることができます。それは "

Oozie 4.1 ドキュメント

これをテストしましたが、CRON 周波数で動作します。LAST_ONLY は、現在/将来の反復に加えて、過去の最新の反復 (時間のずれ) を引き続き実行するため、LAST_ONLY の実行よりも優れています。

<execution>NONE</execution>
于 2016-08-10T23:13:28.337 に答える