--- title: "Oozie を使用する" slug: "df-eco-oozie" updated: 2026-09-17T09:30:01Z published: 2026-09-17T09:30:01Z canonical: "guide.ncloud-docs.com/df-eco-oozie" --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Oozie を使用する VPC環境で利用できます。 Oozieは、Apache HadoopのMapReduceジョブフローを管理するワークフロースケジューラーシステムです。頻繁なMapReduceジョブを管理でき、定期的なジョブを便利に行えるようにサポートします。このガイドでは、Oozieを使用してワークフローを作成する例を説明します。 参考 Oozieについての詳しい説明は[Oozieの公式文書](http://oozie.apache.org/)をご参照ください。 ## OozieCLI Oozie CLIはApache Oozieで提供するクライアントです。Oozie CLIは一部機能に対するカスタマイズを適用したクライアントで、ジョブを提出するとすぐに返され、ジョブの終了を待ちません。 | 項目 | Oozie CLI | | --- | --- | | 実行スクリプト名 | `/bin/oozie` | | サポートするオプション | job、jobs、admin、validate…などの様々なオプションをサポート | | コマンド | oozie job `<OPTIONS>`の形でコマンドを使用 | | job operation | run、rerun、submit、suspendなどのOperationが可能 | ## ワークフロー ワークフローはXMLベースのhPDL(hadoop Process Definition Language)で定義します。ワークフローの定義は、フロー制御ノードとアクションノードで構成されたDAG(Direct Acyclic Graph)であるため、有向閉路グラフを提供しません。 ワークフローには、フロー制御ノードとアクションノードが含まれています。 - **フロー制御ノード**:ワークフローの開始と終了を定義(start、end、failノード)し、ワークフロー実行方向(decision、fork、joinノード)を制御する方法を提供します。ワークフローは`${inputDir}`のようにパラメータを使用できます。ジョブを提出する際は、ワークフローのパラメータ値をjob propertiesファイルで作成して提供する必要があります。 - **アクションノード**:ワークフローが計算と処理タスクの実行を開始できるようにし、HadoopのMapReduce、ファイルシステム、SSH、メール、サブワークフローのような様々なアクションを提供します。 ### ワークフローの作成 ワークフローはworkflow.xmlに作成します。 ワークフローで定義したDAGは以下のように動作します。以下の図を参考にしてワークフローを定義します。 ![df-eco-oozie_01_vpc_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/df-eco-oozie_01_vpc.png?sv=2026-02-06&spr=https&st=2026-10-26T12%3A39%3A22Z&se=2026-10-26T13%3A39%3A22Z&sr=c&sp=r&sig=FbL6wBTIFl5LGOR5CniTUG%2BX%2FXjfmNkt4Gpu4IohLIM%3D) フロー制御ノードでstart、end、killノードの名前を明示します。 ``` # [ACTION-NODE-NAME]、[NEXT-NODE-NAME]、[END-NODE-NAME]、[ERROR-NODE-NAME]を希望する作業に合わせて明示。 ... ... [MESSAGE-TO-LOG] ``` - **start**ノード ワークフローが実行される際、最初に開始されるアクションを明示します。アクションは定義された順序ではなく、startノードに明示された順に実行されます。アクションノードの作成方法は[アクションノードの作成](/docs/ja/df-eco-oozie#%EC%95%A1%EC%85%98-%EB%85%B8%EB%93%9C-%EC%9E%91%EC%84%B1)をご参照ください。 - **ok**ノード アクションの名前を明示し、アクションの実行が正常に終了した場合に実行するノードを明示します。上記の例には`[END-NODE-NAME]`と表記されていますが、二番目に実行されるアクションノード名を明示することもできます。 - **error**ノード アクションの実行が異常終了した場合に実行するノードを明示します。**ok**ノードと同様に、**kill**ノードまたは次に実行するアクションノードを作成します。 - **kill**ノード ワークフロージョブを自ら終了できます。ジョブはエラーで終了します(KILLED)。**message**の内容はワークフロージョブの終了原因ログとして残ります。 - **end**ノード ワークフロージョブの最後で、ジョブに成功したことを意味します(SUCCEEDED)。 参考 説明されたノード以外のフロー制御ノードについての詳しい説明は、[decision](http://oozie.apache.org/docs/4.2.0/WorkflowFunctionalSpec.html#a3.1.4_Decision_Control_Node)と[fork and join](http://oozie.apache.org/docs/4.2.0/WorkflowFunctionalSpec.html#a3.1.5_Fork_and_Join_Control_Nodes)をご参照ください。 ### アクションノードの作成 アクションノードを定義します。 MapReduceアクションの例は以下のとおりです。 ``` ... [ResourceManagerHostAddress:Port] [NameNodeHostAddress:Port] [MAPPER] [REDUCER] mapred.mapper.new-api true mapred.reducer.new-api true [PROPERTY-NAME] [PROPERTY-VALUE] ... ... [FILE-PATH] [FILE-PATH] ... ... ``` MapReduce version2(以下MRv2)で各アクションノードを定義する方法は以下のとおりです。 - `job-tracker` MRv2でResourceManagerのアドレスに指定します。`ResourceManagerHostAddress:Port`のように作成します。Data ForestはResourceManagerにIDを付与して使用しているため、**rm1**か**rm2**のどちらかを使用します。 - `name-node` NameNodeアドレスを作成します。Data Forestは2つのHDFSネームスペースを提供するため、`hdfs://koya`または`hdfs://tata`のうち使用するネームスペースを指定します。 - `prepare` ジョブが開始する前に実行されるジョブを作成します。出力ディレクトリの削除のようなジョブを作成します。 - `configuration` ジョブに対する設定はConfiguration以降に作成します。MRv2の場合、`mapred.[mapper|reducer].new-api`は**true**に設定します。他のジョブに必要な設定をすべて作成します。 - `file` / `archive` Distributed Cacheでファイルを配布する場合、fileまたはarchive定義を追加します。 参考 ワークフローの設定内容は、`${NAME}`のようにパラメータとして定義できます。ジョブを実行するたびに設定内容を変える必要がある場合、パラメータとして定義しておくとワークフローの修正なしに様々な環境でジョブを実行できます。 #### ワークフローの例 フロー制御ノードとアクションノードを定義し、JavaとPythonで作成されたwordcountプログラムをワークフローで作成します。 **Javaを利用したMapReduceの例** ``` ${jobTracker} ${nameNode} mapred.mapper.new-api true mapred.reducer.new-api true mapreduce.job.queuename ${queueName} mapreduce.input.fileinputformat.inputdir ${inputDir} mapreduce.output.fileoutputformat.outputdir ${outputDir} mapreduce.job.reduces ${reduceNum} mapreduce.task.timeout 0 mapreduce.job.map.class org.apache.hadoop.examples.WordCount$TokenizerMapper mapreduce.job.reduce.class org.apache.hadoop.examples.WordCount$IntSumReducer mapreduce.job.output.key.class org.apache.hadoop.io.Text mapreduce.job.output.value.class org.apache.hadoop.io.IntWritable mapreduce.job.inputformat.class org.apache.hadoop.mapreduce.lib.input.TextInputFormat mapreduce.job.outputformat.class org.apache.hadoop.mapreduce.lib.output.TextOutputFormat Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}] ``` **ストリーミングを利用したMapReduceの例** ``` ${jobTracker} ${nameNode} python mapper.py python reducer.py mapreduce.job.queuename ${queueName} mapreduce.input.fileinputformat.inputdir ${inputDir} mapreduce.output.fileoutputformat.outputdir ${outputDir} mapreduce.job.reduces ${reduceNum} mapreduce.task.timeout 0 mapper.py reducer.py Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}] ``` ### ワークフローの配布 ワークフローを作成してから実際にジョブを実行するには、HDFS上にワークフローと実行に必要なライブラリを配布する必要があります。 作成されたワークフローをHDFSのジョブディレクトリにアップロードし、libディレクトリにジョブの実行に必要なライブラリ(*.jar、*.so)を配置します。 ``` ├── workflow.xml └── lib └── hadoop-mapreduce-examples-2.7.1.jar ``` 参考 libディレクトリに含まれたJARファイルは、自動でclasspathに追加されます。追加で必要なJARファイルやネイティブライブラリをfileエレメントに明示する場合には、libディレクトリに配置する必要はありません。 **ストリーミングジョブ** ストリーミングジョブの方法は以下のとおりです。 1. libディレクトリに`hadoop-streaming-<VERSION>.jar`をアップロードします。 2. mapperとreducerに明示したスクリプトやプログラムはHDFSパスにアップロードします。 ``` ├── workflow.xml ├── mapper.py ├── reducer.py └── lib └── hadoop-streaming-2.7.1.jar ``` ### ワークフローの実行 HDFS上に配布したワークフローを実行する前に、job propertiesを作成してください。 #### job propertiesの作成 ワークフローのパラメータを設定したjob propertiesファイルを作成します。 ``` # hadoop configuration nameNode=hdfs://koya jobTracker=rm1 # oozie configuration oozie.wf.application.path=${serviceDir}/workflow # job directory information serviceDir=${nameNode}/user/test01/wordcount inputDir=${serviceDir}/input outputDir=${serviceDir}/output # user information user.name=test01 # job configuration queueName=default reduceNum=2 # NameNode、Jobtrackerはジョブを実行するクラスタ情報を記入します。 # oozie.wf.application.pathは、実行するジョブのワークフローが配布された位置を記入します。 ``` #### job propertiesの配布 job properitesファイルは、作成後にHDFSやその他のシステムに配布する必要がありません。Oozieコマンドを実行するデバイスに配置します。 #### job propertiesの実行 ワークフローの配布とjob propertiesファイルの作成が完了した後、Oozieジョブを実行します。 ``` oozie job -oozie -config