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

Apache Oozieとは何ですか?
Apache Oozieはワークフロースケジューラです Hadoopのこれは、依存関係のあるジョブのワークフローを実行するシステムです。ここでは、ユーザーはワークフローの有向非巡回グラフを作成することができ、Hadoop上で並列および逐次的に実行できます。
これはXNUMXつの部分で構成されています。
- ワークフローエンジン: ワークフロー エンジンの役割は、Hadoop ジョブで構成されるワークフローを保存および実行することです。 MapReduce, 豚, ハイブ.
- コーディネーターエンジン: 事前に定義されたスケジュールとデータの可用性に基づいてワークフロージョブを実行します。
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は作業を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の範囲を超えるような新規導入において、実用的な選択肢となります。


