---
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は以下のように動作します。以下の図を参考にしてワークフローを定義します。

フロー制御ノードで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