코디네이터로 워크플로를 주기 실행한다. 코디네이터 정의와 워크플로 정의를 HDFS 의 서로 다른 디렉터리에 두고, job.properties 는 코디네이터 경로를 가리킨다.
hdfs://HDFS_HOSTNAME/user/example/myproject/oozie # 사용자의 oozie 작업 디렉터리
├── workflow
│ ├── spark_submit_action.sh # workflow shell action 으로 사용될 bash 스크립트
│ ├── sample-analyzer-1-assembly-0.1.jar # spark-submit 에서 실행할 jar (스크립트에서 필요한 jar)
│ ├── hive-site.xml # hive 스크립트를 실행하는 경우 필요한 hive-site.xml
│ └── workflow.xml
├── coordinator
│ └── coordinator.xml
├── spark2.tar.gz # spark 실행 jar 아카이브
├── hadoop_conf.tar.gz # hadoop configuration 아카이브
├── spark_conf.tar.gz # spark configuration 아카이브
└── df.test01.keytab # 계정의 커버로스 키탭
jobName=Hive_Action_test_schedule
nameNode=hdfs://mast1.hadoop.com:8020
#oozie.wf.application.path=${appPath}
oozie.use.system.libpath=true
# job directory information
homeDir=${nameNode}/user/hdfs/test_oozie
workflowDir=${homeDir}/workflow
# oozie configuration
# this is where you deploy coordinator.xml into
oozie.coord.application.path=${homeDir}/coordinator
워크플로 하나만 돌릴 때의 oozie.wf.application.path 대신 oozie.coord.application.path 를 준다. 둘 다 있으면 코디네이터가 우선한다.
<coordinator-app name="hourly-aggregation" frequency="${coord:minutes(5)}" start="2023-06-13T14:00+0900" end="2023-10-10T08:00+0900" timezone="Asia/Seoul" xmlns="uri:oozie:coordinator:0.4">
<!-- 주기는 최소 5분 -->
<!-- job 목록에서 job 이름은 coordinator 의 이름이 표시된다 -->
<controls>
<timeout>10</timeout>
<concurrency>1</concurrency>
</controls>
<action>
<workflow>
<app-path>${workflowDir}</app-path>
</workflow>
</action>
</coordinator-app>
<app-path> 는 워크플로 디렉터리의 HDFS 절대 경로다. frequency 는 ${coord:minutes(n)} · ${coord:hours(n)} · ${coord:days(n)} 또는 cron 식으로 준다. <concurrency>1</concurrency> 이면 이전 실행이 끝나기 전에는 다음을 띄우지 않는다.
<workflow-app xmlns="uri:oozie:workflow:0.4" name="Hive_Action_test_schedule">
<global>
<job-tracker>YARN_HOSTNAME:8032</job-tracker>
<name-node>hdfs://HDFS_HOST_NAME:8020</name-node>
<job-xml>hive-site.xml</job-xml>
</global>
<start to="hive_action"/>
<action name="hive_action">
<hive xmlns="uri:oozie:hive-action:0.4">
<script>${workflowDir}/test.hql</script>
</hive>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
oozie job -oozie http://OOZIE_HOSTNAME:11000/oozie -config job.properties -run
oozie jobs -oozie http://OOZIE_HOSTNAME:11000/oozie -jobtype coord