Apache Oozieチュートリアル:ワークフロー図、スケジューラ

⚡ スマートサマリー

Apache Oozieは、Hadoop用のワークフロースケジューラであり、依存するジョブを指向性非巡回グラフとして実行します。MapReduce、Pig、Hiveアクション用のワークフローエンジンと、時間とデータの可用性に基づいて駆動されるコーディネーターエンジンを組み合わせています。

  • 🔘 2つのエンジン: ワークフローエンジンはHadoopジョブグラフを実行し、コーディネーターエンジンはスケジュールに基づいて、またはデータ到着時にジョブグラフをトリガーします。
  • ☑️ ノードの種類: アクションノードは処理を実行し、決定、分岐、結合などの制御ノードは経路を制御します。
  • 3種類の仕事: ワークフロー、コーディネーター、バンドルジョブが積み重なって、完全なデータパイプラインが構築されます。
  • 🧪 展開: ワークフローアプリケーションとは、workflow.xmlファイルとlibフォルダを含むディレクトリであり、HDFSにコピーされます。
  • 🛠️ コマンドライン: OOZIE_を設定URLoozie job -run でジョブを送信し、SUCCEEDED と報告されるまで oozie job -info をポーリングします。
  • ⚠️ プロジェクト状況: Oozieは2025年にApache Atticに引退したため、新しいパイプラインは通常Apache Airflowを使用します。

Apache Oozieのチュートリアル(ワークフロー、コーディネータージョブ、Hadoopスケジューリングについて解説)

Apache Oozieとは何ですか?

Apache Oozieはワークフロースケジューラです Hadoopのこれは、依存関係のあるジョブのワークフローを実行するシステムです。ここでは、ユーザーはワークフローの有向非巡回グラフを作成することができ、Hadoop上で並列および逐次的に実行できます。

これはXNUMXつの部分で構成されています。

  • ワークフローエンジン: ワークフロー エンジンの役割は、Hadoop ジョブで構成されるワークフローを保存および実行することです。 MapReduce, , ハイブ.
  • コーディネーターエンジン: 事前に定義されたスケジュールとデータの可用性に基づいてワークフロージョブを実行します。

Oozieは拡張性に優れており、Hadoopクラスタ内で数千ものワークフロー(それぞれ数十個のジョブで構成)をタイムリーに実行できます。下の図は、スケジューラがクラスタ内およびスケジューラが制御するジョブに対してどのような位置にあるかを示しています。

Apache Oozieワークフロースケジューラが依存するHadoopジョブを有向非巡回グラフとして実行する

Oozieは非常に柔軟性にも優れています。ジョブの開始、停止、一時停止、再実行が簡単に行えます。Oozieを使えば、失敗したワークフローの再実行も非常に簡単です。ダウンタイムや障害によって実行できなかったジョブや失敗したジョブを挽回するのがいかに難しいかは容易に想像できるでしょう。特定の障害ノードをスキップすることも可能です。

プロジェクト状況: Apache OozieはApache Softwareによって提供が終了されました。 Foundation 2025年2月、そして アパッチ・アティック 2025年4月に完了予定。最終リリースは2021年2月版の5.2.1のままで、ソースリポジトリは現在読み取り専用となっています。既存のクラスターでは引き続き動作するため、以下の仕組みを知っておくことは重要ですが、新しいパイプラインは通常Apache Airflow上に構築されます。

Oozieはどのように機能するのですか?

Oozieはクラスタ内でサービスとして動作し、クライアントはワークフロー定義を送信して、即時処理または後日処理を行います。

Oozieのワークフローは、アクションノードと制御フローノードで構成されます。

アクションノードはワークフロータスクを表します。たとえば、ファイルを移動するなどです。 HDFSMapReduce、Pig、またはHiveジョブの実行、データのインポート スクープまたは、シェルスクリプトやプログラムを実行する Java.

制御フローノードは、条件ロジックなどの構造を可能にすることで、アクション間のワークフロー実行を制御します。これにより、前のアクションノードの結果に応じて、異なる分岐に進むことができます。

開始ノード、終了ノード、およびエラーノードは、このカテゴリのノードに分類されます。

  • 開始ノード ワークフロー ジョブの開始を指定します。
  • エンドノード それは仕事の終わりを告げる合図だ。
  • エラーノード エラーの発生と、それに対応するエラーメッセージの表示を指定します。

ワークフローの実行が終了すると、OozieはHTTPコールバックを使用してクライアントにワークフローの状態を更新します。アクションノードへの進入または退出時にも、このコールバックがトリガーされる場合があります。

Oozieの制御ノードとアクションタイプ

ワークフローXMLは、開始、終了、エラーに加えて、グラフを構成する制御ノードの小規模な語彙をサポートしています。

  • 決断: 式を評価し、ワークフローを複数の分岐のうちの1つに送ります。これはswitch文に相当します。
  • フォーク: パスを分割し、2つ以上のアクションを並行して実行します。
  • 加入: 一致する分岐のすべての分岐が完了するまで待機してから処理を続行します。
  • 殺します: ワークフローを即座に終了し、エラーメッセージを記録します。

アクションノードは作業自体をカバーし、それぞれが独自のXML要素を持ちます。

  • マップリデュース、ピッグ、ハイブ、スクープ アクションを実行すると、対応するHadoopジョブが起動します。
  • ジャワ クラスター上でメインクラスを実行する。 shell (NAIST) と ssh スクリプトを実行します。
  • fs HDFSのハウスキーピング業務を行うping 移動、削除、ディレクトリ作成、権限変更など。
  • メール 受信者に通知し、 サブワークフロー 別のワークフローアプリケーションを呼び出す。

ワークフロー図の例

下の図 tracこれは、開始ノードから MapReduce アクションを経て、終了ノード、またはアクションが失敗した場合はエラー パスに至る小さなワークフローです。

Oozieワークフロー図の例(開始ノード、アクションノード、エラー処理、終了ノードを示す)

ウージージョブの種類

Oozieは作業を3つのレベルで説明する。各レイヤーは下のレイヤーを包み込むように構成されているため、最終的には1つのバンドルが多数の個々のワークフローを制御することになる。

DOE それが定義するもの 引き起こされた
ワークフロー workflow.xmlに記述された、アクションノードと制御ノードからなる有向非巡回グラフ 手動提出、またはコーディネーター
コー​​ディネーター 開始時刻、終了時刻、および頻度を指定した、1つのワークフローの繰り返しスケジュール。 時計の時刻と入力データの可用性
一式販売 コーディネーターアプリケーションの集合体を、1つのデータパイプラインとしてまとめて管理する。 すべてのコーディネーターに適用されるキックオフ時間

実際には、この区別は重要です。ワークフローは「何を実行するか」を、コーディネーターは「いつ実行するか」を、バンドルは「何が同時に開始され、何が同時に停止するか」をそれぞれ示します。

Oozieワークフローアプリケーションのパッケージ化とデプロイ

ワークフローアプリケーションは、ワークフロー定義と、MapReduce JARファイル、Pigスクリプトなどの関連リソースすべてで構成されます。アプリケーションはシンプルなディレクトリ構造に従う必要があり、OozieがアクセスできるようにHDFSにデプロイされます。

以下にディレクトリ構造の例を示します。

<name of workflow>/
├── lib/
│   └── hadoop-examples.jar
└── workflow.xml

ワークフロー定義ファイルである workflow.xml は、最上位ディレクトリ(ワークフロー名を持つ親ディレクトリ)に配置する必要があります。lib ディレクトリには、MapReduce クラスを含む Jar ファイルが格納されます。このレイアウトに準拠したワークフロー アプリケーションは、Ant や Maven など、任意のビルド ツールを使用して構築できます。

このようなビルドは、例えば以下のコマンドを使用してHDFSにコピーする必要があります。

% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow

Oozieワークフロージョブを実行する手順

このセクションでは、ワークフロー ジョブを実行する方法を説明します。 これを実行するには、Oozie コマンドライン ツール (Oozie サーバーと通信するクライアント プログラム) を使用します。

1. OOZIE_をエクスポートしますURL 環境変数。これは、oozieコマンドにどのOozieサーバーを使用するかを指示します(ここでは、ローカルで実行されているサーバーを使用しています)。

% export OOZIE_URL="http://localhost:11000/oozie"

2. ワークフロージョブを実行するには、以下を使用してください。

% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run

-config オプションはローカルの Java プロパティ ファイルには、ワークフロー XML ファイル内のパラメーターの定義と、HDFS 内のワークフロー アプリケーションの場所を Oozie に伝える oozie.wf.application.path が含まれています。

プロパティ ファイルの内容の例:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>

3. ワークフロージョブのステータスを取得します。

ワークフロージョブのステータスは、サブコマンド「job」に「-info」オプションを付けて実行し、「-info」の後にジョブIDを指定することで確認できます。

e.g., % oozie job -info <job id>

出力には、RUNNING、KILLED、またはSUCCEEDEDのいずれかのステータスが表示されます。

4. ワークフローが正常に実行された結果は、次のような Hadoop コマンドを使用して確認できます。

% hadoop fs -cat <location of result>

なぜオージーを使うのか?

Oozieを使用する主な目的は、Hadoopシステムで処理されるさまざまな種類のジョブを管理することです。

ジョブ間の依存関係は、ユーザーが有向非巡回グラフの形式で指定します。Oozieはこの情報を受け取り、ワークフローで指定された順序でジョブの実行を処理します。これにより、ユーザーがワークフロー全体を管理する時間を節約できます。さらに、Oozieには特定のジョブの実行頻度を指定する機能も備わっています。

オージーの特徴

  • OozieにはクライアントAPIとコマンドラインインターフェースがあり、これらを使用してジョブを起動、制御、監視できます。 Java アプリケーション。
  • そのWebサービスAPIを使用すれば、どこからでもジョブを制御できる。
  • Oozieには、定期的に実行されるようにスケジュールされたジョブを実行する機能があります。
  • Oozieには、作業完了時にメール通知を送信する機能があります。

Oozie vs Apache Airflow

Oozieは既にサービス終了しているため、現在スケジューラを評価するほとんどのチームは、既に使用しているシステムとApache Airflowを比較検討している。この2つのツールは、同じ問題を正反対のアプローチで解決する。

側面 アパッチ・ウージー ApacheAirflow
定義言語 XML形式で記述されたワークフロー DAG は次のように記述されます Python コード
対象領域 MapReduce、Pig、Hive、SqoopなどのHadoopアクションを中心に構築されています。 クラウドサービス、データベース、コンテナのオペレーターを備えた汎用プラットフォーム
スケジュール管理 コーディネーターの仕事は時間とデータの可用性によって左右される スケジュール間隔と外部条件を待つセンサー
プロジェクトの状況 2025年にApache Atticに引退。最終リリースバージョンは5.2.1。 活発に開発されているApacheトップレベルプロジェクト

Oozieは、既にOozieが稼働しているクラスター上では、アクションがHadoopコンポーネントに1対1で対応しているため、よりシンプルな選択肢となります。一方、Airflowは、特にパイプラインがHadoopの範囲を超えるような新規導入において、実用的な選択肢となります。

よくあるご質問

いいえ。Apacheソフトウェア Foundation Oozieは2025年2月にサービスを終了し、2025年4月にAtticへの移行を完了しました。最終リリースは2021年2月版のバージョン5.2.1で、リポジトリは読み取り専用となっていますが、ドキュメントは引き続きオンラインで閲覧可能です。

AIアシスタントは、記述されたパイプラインをスケジューラ構成に変換し、ジョブグラフがデッドロックした理由を説明し、クラスタログを要約して考えられる根本原因を特定します。最初のドラフト作成やトリアージには役立ちますが、本番スケジュールの承認には適していません。

Copilotはもっともらしいworkflow.xmlを素早く生成しますが、要素名が間違っていたり、スキーマのバージョンが間違っていたりすることがよくあります。生成されたXMLを5.2.1スキーマに対して検証し、まずテストクラスタでドライランを実行してください。

コーディネーターは、頻度、開始時刻、終了時刻をデータセット定義と組み合わせます。クロックが次の間隔に達し、宣言されたすべての入力データセットがHDFSに存在する場合にのみ実行されるため、データの遅延は実行を遅らせます。

再実行アクションと元のジョブIDを指定してジョブを再度送信し、スキップまたは繰り返すノードの名前を指定します。Oozieは完了したアクションを再利用するため、グラフの残りの部分のみが実行されます。

PREPは、ジョブは受理されたものの開始されていない状態を意味します。これは通常、HDFS内のアプリケーションパスが間違っているか、実行予定時刻になっていないことが原因です。SUSPENDEDは、誰かがジョブを一時停止したか、アクションが失敗してワークフローが保留状態になった状態を意味します。

サーバーは独自のプリンシパルとキータブで動作し、クライアントはHTTP経由のSPNEGOで認証を行います。ワークフローには委任トークンが含まれているため、各アクションはサーバーではなく、送信ユーザーとしてHDFSとYARNに到達します。

Cronはコマンドを実行して、それを忘れてしまう。スケジューラ tracジョブ間の依存関係を管理し、入力データが到着するまで待機し、すべてのアクションの状態を記録し、失敗した部分だけを再実行できるようにします。