Oozieチュートリアル:Hadoopジョブをスケジュールする方法を学ぶ



Apache Oozieチュートリアル:Oozieは、Hadoopジョブを管理するためのワークフロースケジューラシステムです。これは、スケーラブルで信頼性が高く、拡張可能なシステムです。

このApacheOozieチュートリアルを開始する前に、スケジューラシステムが使用されている場所を理解しましょう。リアルタイムのシナリオでは、MapReduceタスクの出力がさらなる処理のためにHiveジョブに渡される場合があるように、1つのジョブが他のジョブに依存しています。次のシナリオは、毎日、毎週、毎月などの時間に基づいて、またはデータの可用性に基づいて一連のタスクをスケジュールすることです。 Apache Oozieは、これらの種類のシナリオを簡単に処理する能力を提供します。これが、ApacheOozieがの重要な部分である理由です。 。

このApacheOozieチュートリアルブログでは、以下について説明します。





  • ApacheOozieの紹介
  • Oozieワークフロー
  • Oozieコーディネーター
  • Oozieバンドル
  • ワードカウントワークフロージョブ
  • 時間ベースの単語カウントコーディネーターの仕事

このOozieチュートリアルは、ApacheOozieを紹介することから始めます。次に、ApacheOozieを使用して作成および実行できるジョブの種類を理解します。

Apache Oozieチュートリアル:ApacheOozieの概要

ApacheOozie-Oozieチュートリアル-EdurekaApache Oozieは、分散環境でHadoopジョブを管理および実行するためのスケジューラシステムです。さまざまな種類のタスクを組み合わせて、目的のパイプラインを作成できます。これは、Hive、Pig、Sqoop、またはMapReduceタスクにすることができます。 Apache Oozieを使用すると、ジョブをスケジュールすることもできます。タスクのシーケンス内で、2つ以上のジョブを互いに並行して実行するようにプログラムすることもできます。これは、スケーラブルで信頼性が高く、拡張可能なシステムです。



OozieはオープンソースのJavaWebアプリケーションであり、ワークフローアクションのトリガーを担当します。次に、Hadoop実行エンジンを使用してタスクを実行します。

Apache Oozieは、コ​​ールバックとポーリングを通じてタスクの完了を検出します。 Oozieはタスクを開始すると、タスクに一意のコールバックHTTP URLを提供し、タスクが完了するとそのURLに通知します。タスクがコールバックURLの呼び出しに失敗した場合、Oozieはタスクをポーリングして完了を確認できます。

Apache Oozieには、次の3種類のジョブがあります。



  • Oozieワークフロージョブ &minusこれらは、実行するアクションのシーケンスを指定する有向非巡回グラフ(DAG)です。
  • Oozieコーディネーターの仕事 &minusこれらは、時間とデータの可用性によってトリガーされるワークフロージョブで構成されます。
  • Oozieバンドル &minusこれらは、複数のコーディネーターとワークフロージョブのパッケージと呼ぶことができます。

それでは、これらすべての仕事を1つずつ理解しましょう。

Apache Oozieチュートリアル:Oozieワークフロー

ワークフローは、Direct Acyclic Graph(DAG)に配置された一連のアクションです。次のアクションは現在のアクションの出力後にのみ実行できるため、アクションは相互に依存しています。ワークフローアクションには、Pigアクション、Hiveアクション、MapReduceアクション、Shellアクション、Javaアクションなどがあります。ジョブを実行する方法と条件を決定するための決定木があります。

ジョブに基づいてさまざまなタイプのアクションを作成でき、各タイプのアクションに独自のタイプのタグを付けることができます。ワークフローとスクリプトまたはjarは、ワークフローを実行する前にHDFSパスに配置する必要があります。

コマンド: oozie job –oozie http:// localhost:11000 / oozie -config job.properties -run

ジョブのステータスを確認するには、OozieWebコンソールにアクセスします。 http:// host_name:11000 。ジョブをクリックすると、ジョブのステータスが表示されます。

複数のジョブを並行して実行したいシナリオでは、次を使用できます。 フォーク 。フォークを使用するときは常に、フォークのエンドノードとしてJoinを使用する必要があります。フォークごとに結合が必要です。結合は、並列に実行されているすべてのノードが単一のフォークの子であると想定しています。たとえば、2つのテーブルを同時に並行して作成できます。

決定の出力に基づいてアクションを実行する場合は、決定タグを追加できます。たとえば、ハイブテーブルがすでにある場合は、再度作成する必要はありません。そのような状況では、テーブルがすでに存在する場合にテーブルの作成ステップを実行しないように決定タグを追加できます。決定ノードには、switchcaseと同様のswitchタグがあります。

job-tracker、name-node、script、およびparamの値を直接渡すことができます。しかし、これは管理が難しくなります。ここで、構成ファイル(つまり、.propertyファイル)が便利です。

Apache Oozieチュートリアル:Oozieコーディネーター

Coordinatorを使用して、複雑なワークフローだけでなく、定期的にスケジュールされるワークフローもスケジュールできます。 Oozie Coordinatorsは、時間、データ、またはイベント述語に基づいてワークフロージョブをトリガーします。ジョブコーディネーター内のワークフローは、指定された条件が満たされたときに開始されます。

コーディネータージョブに必要な定義は次のとおりです。

  • 開始 &minusジョブの開始日時。
  • 終わり &minusジョブの終了日時。
  • タイムゾーン &minusコーディネーターアプリケーションのタイムゾーン。
  • 周波数 &minusジョブを実行する頻度(分単位)。

制御情報には、さらにいくつかのプロパティを使用できます。

  • タイムアウト &minusアクションが破棄される前に、追加の条件を満たすために待機する最大時間(分単位)。 0は、アクションの実体化時にすべての入力イベントが満たされない場合、アクションはすぐにタイムアウトする必要があることを示します。 -1はタイムアウトがないことを示し、アクションは永久に待機します。デフォルト値は-1です。
  • 並行性 &minus並列実行できるジョブのアクションの最大数。デフォルト値は1です。
  • 実行 –コーディネータージョブの複数のインスタンスが実行基準を満たした場合の実行順序を指定します。かもね:
    • FIFO(デフォルト)
    • LIFO
    • LAST_ONLY

コマンド: oozieジョブ–oozie http:// localhost:11000 / oozie -config -run

コーディネータージョブの送信中に、定義で使用されている構成プロパティがジョブ構成で提供されていない場合、ジョブの送信は失敗します。

Apache Oozieチュートリアル:Oozieバンドル

Oozieバンドルシステム多くの場合データパイプラインと呼ばれる一連のコーディネーターアプリケーションを定義して実行できます。 Oozieバンドルでは、コーディネーターアプリケーション間に明示的な依存関係はありません。ただし、コーディネーターアプリケーションのデータ依存関係を使用して、暗黙的なデータアプリケーションパイプラインを作成できます。バンドルを開始/停止/一時停止/再開/再実行できます。それはより良くそして簡単な操作制御を与えます。

キックオフタイム &minusバンドルを開始してコーディネーターアプリケーションを送信する必要がある時間。

このApacheOozieチュートリアルを進めると、ワークフロージョブの作成方法を理解できます。

Apache Oozieチュートリアル:ワードカウントワークフロージョブ

この例では、ApacheOozieを使用してワードカウントジョブを実行します。ここでは、MapReduceワードカウントプログラムの作成方法については説明しません。したがって、このApache Oozieチュートリアルに従う前に、これをダウンロードする必要があります。 ワードカウントジャー ファイル。次に、すべてのファイルを配置するWordCountTestディレクトリを作成します。以下の画像に示すように、ワードカウントjarを配置するlibディレクトリを作成します。

さあ、先に進んで作成しましょう job.properties Workflow.xml ファイル。ここで、ジョブとそれに関連するパラメーターを指定します。

job.properties

まず、作成しています job.properties NameNodeとResourceManagerのパスを定義しているファイル。 NameNodeパスは、ワークフローディレクトリパスを解決するために必要です。jobTrackerパスは、ジョブをYARNに送信するのに役立ちます。のパスを提供する必要があります Workflow.xml ファイル。HDFSに保存する必要があります。

Workflow.xml

次に、を作成する必要があります Workflow.xml ファイル。ここで、すべてのアクションを定義して実行します。まず、ワークフローアプリ名を指定する必要があります。 WorkflowRunnerTest 。次に、 開始ノード 。開始ノード (( インクルード 開始する 鬼ごっこ ワークフロージョブのエントリポイントです。これは、ジョブを開始する最初のワークフローノードを指します。下の画像でわかるように、次のノードは 交差点0 ジョブが開始される場所から。

Javaとクラスの違い

次に、アクションノードで実行するタスクを指定します。ここでは、MapReduceWordCountタスクを実行しています。このMapReduceタスクを実行するために必要な構成を指定する必要があります。ジョブトラッカーとNameNodeアドレスを定義しています。

次は、アクションを実行する前に、ディレクトリのクリーンアップ専用に使用される準備された要素です。ここでは、HDFSで削除操作を実行して out1 すでに作成されている場合はフォルダ。準備タグは、ジョブを実行する前にフォルダを作成または削除するために使用されます。次に、ジョブキュー名、マッパークラス、レデューサークラス、出力キークラス、出力値クラスなどのMapReduceプロパティを指定します。

最後のMapReduceタスク構成は、HDFSの入力および出力ディレクトリです。入力ディレクトリは データ NameNodeのルートパスに保存されているディレクトリ 最後に、ジョブが失敗した場合にkill要素を指定します。

今、私たちは移動する必要があります WordCountTest で指定したように、HDFSのフォルダー oozie.wf.application.path のプロパティ job.properties ファイル。だから、私たちはコピーしています WordCountTest Hadoopルートディレクトリのフォルダ。

コマンド: hadoop fs -put WordCountTest /

確認するには、NameNode Web UIに移動して、フォルダーがHDFSルートディレクトリにアップロードされているかどうかを確認します。

これで、ワークフロージョブを実行する準備が整いました。

コマンド: oozie job –oozie http:// localhost:11000 / oozie -config job.properties -run

ジョブを実行すると、ジョブIDが取得されます(つまり、 0000009-171219160449620-oozie-edur-W )上の画像に示すように。 Oozie Web UIで送信したジョブを確認できます。つまり、 localhost:11000 。下の画像で、私たちが提出した仕事がリストされていることがわかります。

上の画像を見ると、ジョブID、ジョブの名前、ジョブのステータス、ジョブを送信したユーザー、作成時刻、開始と最終変更が表示されます。ジョブをクリックすると、次のような詳細が表示されます。

  • 求人情報

  • ジョブ定義

  • ジョブ構成

ジョブのステータスが成功したので、HDFSルートディレクトリに移動して、出力ディレクトリが作成されているかどうかを確認する必要があります。

あなたが見ることができるように oozieout ディレクトリはHDFSに作成されているので、作成された出力ファイルを見てみましょう。

Oozieワークフロージョブを作成する方法を見てきたので、次にこのApache Oozieチュートリアルブログに進み、コーディネータージョブを作成する方法を理解します。

Apache Oozieチュートリアル:時間ベースの単語カウントコーディネータージョブ

この例では、特定の時間間隔の後に実行される時間ベースの単語カウントコーディネータージョブを作成します。毎日または定期的に実行する必要があるApacheOozieを使用して、ジョブを作成およびスケジュールできます。

このApacheOozieチュートリアルをすばやく進めて、コーディネータージョブを作成しましょう。ここでは、3つのファイルを作成します。 coordinator.propertiescoordinator.xmlWorkflow.xml ファイル。ここでも、wを配置します ordcount 中の瓶 lib 下の画像に示すようなディレクトリ。

次に、これらのファイルを個別に見てみましょう。まず、coordinator.propertiesファイルから始めます。

ここでは、ワークフローが実行される頻度を指定しています。頻度は常に分で表されます。この場合、このコーディネータージョブは、指定された時間の間、1時間に1回実行されます。頻度は、データセットが生成される定期的な間隔をキャプチャするために使用され、コーディネーターアプリケーションの実行がスケジュールされます。

分、時間、日、月で頻度を定義するには、次の形式を使用します。

$ {coord:minutes(int n)} n $ {coord:minutes(45)} –> 45
$ {coord:hours(int n)} n * 60 $ {coord:hours(3)} –> 180
$ {coord:days(int n)} 変数 $ {coord:days(2)} –>現在の日付から丸2日での分
$ {coord:months(int n)} 変数 $ {coord:months(1)} –>現在の日付から1か月の分

次に、上の画像に示すように、ジョブの開始時間と終了時間を定義します。 始まる時間 ジョブの開始日時です& 終了時間 ジョブの終了日時です。

次に、NameNodeとResourceManagerのURLを指定します。これは、HDFSのworkflow.xmlファイルを参照し、ジョブをYARNに送信するためにそれぞれ使用されます。最後に、HDFSに保存するworkflow.xmlパスを指定します。また、すべてのファイルとlibディレクトリが保存されるアプリケーションパスも指定します。

2番目のファイルは coordinator.xml ここで、で指定したすべてのプロパティを使用します coordinator.properties ファイル。ここで、最初に、コーディネーターアプリケーションのプロパティ、つまり名前、頻度、タイムゾーンを指定します。次に、ワークフローを1つずつ指定します。ここでは、ワークフローは1つだけです。したがって、アクション要素内にワークフロー要素を作成し、そこでアプリケーションパスを指定します。

次に、先に進むには、作成する必要があります Workflow.xml タスクを指定するファイル。それはに似ています Workflow.xml ワークフロージョブで作成したファイル。

マージソートc ++アルゴリズム

もう一度、これを移動します WordCountTest_TimedBased ディレクトリをHDFSに。

コマンドhadoop fs -put WordCountTest_TimeBased /

これで、このOozieチュートリアルでこのコーディネータージョブを実行する準備が整いました。先に進んで実行しましょう。

コマンドoozieジョブ–oozie http:// localhost:11000 / oozie -config coordinator.properties -run

このコーディネーターのジョブID(つまり、0000010-171219160449620-oozie-edur-C)を書き留めます。 Oozie WebUIでの仕事を追跡するのに役立ちます。

Oozie WebUIの[コーディネータージョブ]タブにリストされているジョブを確認できます。ワークフロージョブと同様に、ジョブの名前、ステータス、ユーザー、頻度、開始時間と終了時間があります。特定のジョブをクリックすると、以下の画像に示すように、ジョブの詳細が表示されます。

  • コーディネーターの求人情報

  • コーディネーターの仕事の定義

  • コーディネーターのジョブ構成

さて、さまざまなタブを調べました。出力フォルダーが作成されるHDFSルートディレクトリに戻ります。下の画像でわかるように、 oozieTimeBasedout で指定したように、ディレクトリが作成されました Workflow.xml ファイル。

それでは、作成された出力ファイルを見てみましょう。

このApacheOozieチュートリアルブログが参考になることを願っています。あなたがもっと学ぶことに興味があるなら、あなたはこれを通過することができます ビッグデータと、Hadoopがビッグデータに関連する課題をどのように解決しているかについて説明します。

Apache Oozieを理解したので、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaビッグデータHadoop認定トレーニングコースは、小売、ソーシャルメディア、航空、観光、金融の各ドメインでリアルタイムのユースケースを使用して、学習者がHDFS、Yarn、MapReduce、Pig、Hive、HBase、Oozie、Flume、Sqoopのエキスパートになるのに役立ちます。

質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。